List of usage examples for org.eclipse.jface.viewers StructuredSelection StructuredSelection
public StructuredSelection(List elements)
List
. From source file:com.bdaum.zoom.ui.internal.dialogs.AutomatedRatingDialog.java
License:Open Source License
private void fillValues() { settings = getDialogSettings(UiActivator.getDefault(), SETTINGSID); if (providerViewer != null) { providerViewer.setInput(ratingProviderIds); selectedProvider = settings.get(PROVIDER); if (selectedProvider != null) providerViewer.setSelection(new StructuredSelection(selectedProvider)); }/* w w w . j av a 2 s. c o m*/ updateModelViewer(); try { maxField.setSelection(settings.getInt(MAXRATING)); } catch (NumberFormatException e) { maxField.setSelection(3); } overwriteButton.setSelection(settings.getBoolean(OVERWRITE)); }
From source file:com.bdaum.zoom.ui.internal.dialogs.AutomatedRatingDialog.java
License:Open Source License
private void updateModelViewer() { if (selectedProvider != null) { String selectedModel = (String) modelViewer.getStructuredSelection().getFirstElement(); if (selectedModel == null) selectedModel = settings.get(MODEL); modelIds = aiService.getRatingModelIds(selectedProvider); modelLabels = aiService.getRatingModelLabels(selectedProvider); modelViewer.setInput(modelIds);//from www . j av a 2s . c o m if (selectedModel != null) modelViewer.setSelection(new StructuredSelection(selectedModel)); } }
From source file:com.bdaum.zoom.ui.internal.dialogs.AutoRuleComponent.java
License:Open Source License
@SuppressWarnings("unused") public AutoRuleComponent(Composite parent, int style, IAdaptable info) { this.info = info; composite = new Composite(parent, SWT.NONE); Layout layout = parent.getLayout();/*from ww w . jav a 2s.c o m*/ if (layout instanceof GridLayout) { GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true); layoutData.horizontalSpan = ((GridLayout) layout).numColumns; composite.setLayoutData(layoutData); } composite.setLayout(new GridLayout()); new Label(composite, SWT.NONE).setText(Messages.AutoRuleComponent_collections_expl); CGroup autoGroup = UiUtilities.createGroup(composite, 2, Messages.AutoRuleComponent_title); ruleViewer = new TableViewer(autoGroup, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI | SWT.V_SCROLL); TableViewerColumn col0 = new TableViewerColumn(ruleViewer, SWT.NONE); col0.getColumn().setText(Messages.AutoRuleComponent_name); col0.getColumn().setWidth(100); col0.setLabelProvider(new ZColumnLabelProvider() { @Override public String getText(Object element) { if (element instanceof AutoRule) return ((AutoRule) element).getName(); return element.toString(); } }); TableViewerColumn col1 = new TableViewerColumn(ruleViewer, SWT.NONE); col1.getColumn().setText(Messages.AutoRuleComponent_group); col1.getColumn().setWidth(180); col1.setLabelProvider(new ZColumnLabelProvider() { @Override public String getText(Object element) { if (element instanceof AutoRule) return ((AutoRule) element).getQfield().getCategory().toString(); return element.toString(); } }); TableViewerColumn col2 = new TableViewerColumn(ruleViewer, SWT.NONE); col2.getColumn().setText(Messages.AutoRuleComponent_field); col2.getColumn().setWidth(220); col2.setLabelProvider(new ZColumnLabelProvider() { @Override public String getText(Object element) { if (element instanceof AutoRule) return ((AutoRule) element).getQfield().getLabel(); return element.toString(); } }); TableViewerColumn col3 = new TableViewerColumn(ruleViewer, SWT.NONE); col3.getColumn().setText(Messages.AutoRuleComponent_type); col3.getColumn().setWidth(160); col3.setLabelProvider(new ZColumnLabelProvider() { @Override public String getText(Object element) { if (element instanceof AutoRule) { AutoRule rule = (AutoRule) element; if (rule.hasCustomIntervals()) return Messages.AutoRuleComponent_custom; QueryField qfield = rule.getQfield(); switch (qfield.getAutoPolicy()) { case QueryField.AUTO_DISCRETE: if (qfield.getEnumeration() != null) return Messages.AutoRuleComponent_enum; if (qfield.getType() == QueryField.T_BOOLEAN) return Messages.AutoRuleComponent_bool; return Messages.AutoRuleComponent_discrete; case QueryField.AUTO_LINEAR: return Messages.AutoRuleComponent_linear; case QueryField.AUTO_LOG: return Messages.AutoRuleComponent_exp; case QueryField.AUTO_CONTAINS: return Messages.AutoRuleComponent_arbitrary; case QueryField.AUTO_SELECT: return Messages.AutoRuleComponent_multiple; } } return element.toString(); } }); TableViewerColumn col4 = new TableViewerColumn(ruleViewer, SWT.NONE); col4.getColumn().setText(Messages.AutoRuleComponent_parms); col4.getColumn().setWidth(220); col4.setLabelProvider(new ZColumnLabelProvider() { @Override public String getText(Object element) { if (element instanceof AutoRule) { AutoRule rule = (AutoRule) element; QueryField qfield = rule.getQfield(); switch (qfield.getAutoPolicy()) { case QueryField.AUTO_CONTAINS: case QueryField.AUTO_SELECT: return rule.getValueSpec(); case QueryField.AUTO_DISCRETE: if (qfield.getEnumeration() != null) return rule.getEnumerationSpec(); if (qfield.getType() == QueryField.T_BOOLEAN) return Format.booleanFormatter.toString(Boolean.parseBoolean(rule.getBooleanSpec())); //$FALL-THROUGH$ default: return rule.getIntervalSpec(); } } return element.toString(); } }); ruleViewer.getTable().setHeaderVisible(true); ruleViewer.getTable().setLinesVisible(true); GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true); layoutData.heightHint = (style & SWT.SHORT) != 0 ? 150 : 300; ruleViewer.getTable().setLayoutData(layoutData); ruleViewer.setContentProvider(ArrayContentProvider.getInstance()); new SortColumnManager(ruleViewer, new int[] { SWT.UP, SWT.UP, SWT.UP, SWT.NONE, SWT.NONE }, 0); ruleViewer.setComparator(ZViewerComparator.INSTANCE); ruleViewer.getControl().addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { if (e.keyCode == SWT.CTRL) cntrlDwn = true; } @Override public void keyReleased(KeyEvent e) { if (e.keyCode == SWT.CTRL) cntrlDwn = false; } }); ruleViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { updateButtons(); if (cntrlDwn) { if (editAutoButton.isEnabled()) editRule(); cntrlDwn = false; } } }); ruleViewer.addDoubleClickListener(new IDoubleClickListener() { @Override public void doubleClick(DoubleClickEvent event) { if (!cntrlDwn && editAutoButton.isEnabled()) editRule(); } }); ruleViewer.setInput(autoRules); Composite autoButtonBar = new Composite(autoGroup, SWT.NONE); autoButtonBar.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false)); autoButtonBar.setLayout(new GridLayout(1, false)); addAutoButton = new Button(autoButtonBar, SWT.PUSH); addAutoButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); addAutoButton.setText(Messages.AutoRuleComponent_add); addAutoButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { AutoRuleDialog dialog = new AutoRuleDialog(parent.getShell(), null, autoRules); if (dialog.open() == AutoRuleDialog.OK) { AutoRule rule = dialog.getRule(); autoRules.add(rule); ruleViewer.add(rule); ruleViewer.setSelection(new StructuredSelection(rule)); fillAccelViewer(); updateButtons(); } } }); editAutoButton = new Button(autoButtonBar, SWT.PUSH); editAutoButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); editAutoButton.setText(Messages.AutoRuleComponent_edit); editAutoButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { editRule(); } }); removeAutoButton = new Button(autoButtonBar, SWT.PUSH); removeAutoButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); removeAutoButton.setText(Messages.AutoRuleComponent_remove); removeAutoButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { @SuppressWarnings("unchecked") Iterator<AutoRule> it = ruleViewer.getStructuredSelection().iterator(); while (it.hasNext()) { AutoRule rule = it.next(); int index = autoRules.indexOf(rule); autoRules.remove(rule); if (index >= autoRules.size()) --index; ruleViewer.remove(rule); if (index >= 0) ruleViewer.setSelection(new StructuredSelection(autoRules.get(index))); } fillAccelViewer(); updateButtons(); } }); new Label(autoButtonBar, SWT.SEPARATOR | SWT.HORIZONTAL) .setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); applyButton = new Button(autoButtonBar, SWT.PUSH); applyButton.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false)); applyButton.setText(Messages.AutoRuleComponent_apply); applyButton.setToolTipText(Messages.AutoRuleComponent_apply_tooltip); applyButton.addSelectionListener(new SelectionAdapter() { @SuppressWarnings("unchecked") @Override public void widgetSelected(SelectionEvent e) { IStructuredSelection sel = ruleViewer.getStructuredSelection(); if (!sel.isEmpty()) OperationJob.executeSlaveOperation( new AutoRuleOperation(new ArrayList<AutoRule>(sel.toList()), null, null), info, false); } }); CGroup accelGroup = UiUtilities.createGroup(composite, 1, Messages.AutoRuleComponent_accel_candidates); new Label(accelGroup, SWT.WRAP).setText(Messages.AutoRuleComponent_accel_msg); accelViewer = CheckboxTableViewer.newCheckList(accelGroup, SWT.V_SCROLL | SWT.BORDER); accelViewer.getTable().setLayoutData(new GridData(400, (style & SWT.SHORT) != 0 ? 50 : 80)); accelViewer.setContentProvider(ArrayContentProvider.getInstance()); accelViewer.setLabelProvider(new ZColumnLabelProvider() { @Override public String getText(Object element) { if (element instanceof QueryField) return ((QueryField) element).getLabel(); return element.toString(); } }); accelViewer.setComparator(ZViewerComparator.INSTANCE); updateButtons(); }
From source file:com.bdaum.zoom.ui.internal.dialogs.CodesDialog.java
License:Open Source License
private void fillValues() { topicViewer.setInput(parser.loadCodes()); if (dflt != null && !dflt.isEmpty()) { selectedTopic = parser.findTopic(dflt); if (selectedTopic != null) topicViewer.setSelection(new StructuredSelection(selectedTopic), true); else/* ww w. j a v a 2 s .c o m*/ customField.setText(dflt); } if (recentViewer != null) { recentViewer.setInput(parser.getRecentTopics()); if (selectedTopic != null) recentViewer.setSelection(new StructuredSelection(selectedTopic), true); } }
From source file:com.bdaum.zoom.ui.internal.dialogs.EditMetaDialog.java
License:Open Source License
@SuppressWarnings("unused") private void createWatchedFolderGroup(CTabFolder folder) { final Composite wfComp = createTabPage(folder, Messages.EditMetaDialog_watched_folders, Messages.EditMetaDialog_watchedFolders_tooltip, 1, 0); final Composite composite = new Composite(wfComp, SWT.NONE); composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); composite.setLayout(new GridLayout(2, false)); watchedFolderViewer = new TableViewer(composite, SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION); setViewerLayout(watchedFolderViewer, 200, 1); watchedFolderViewer.getTable().setLinesVisible(true); watchedFolderViewer.getTable().setHeaderVisible(true); TableViewerColumn col0 = createColumn(Messages.EditMetaDialog_path, 240); col0.setLabelProvider(new ZColumnLabelProvider() { @Override//from w ww . ja v a 2 s . co m public String getText(Object element) { if (element instanceof WatchedFolder) { String uri = ((WatchedFolder) element).getUri(); try { File file = new File(new URI(uri)); String path = file.getPath(); if (!path.endsWith(File.separator)) path += File.separator; if (!file.exists()) path += Messages.EditMetaDialog_offline; return path; } catch (URISyntaxException e) { // ignore } return uri; } return null; } }); TableViewerColumn col1 = createColumn(Messages.EditMetaDialog_volume, 80); col1.setLabelProvider(new ZColumnLabelProvider() { @Override public String getText(Object element) { if (element instanceof WatchedFolder) { String volume = ((WatchedFolder) element).getVolume(); return volume == null ? "" : volume; //$NON-NLS-1$ } return null; } }); TableViewerColumn col2 = createColumn(Messages.EditMetaDialog_type, 60); col2.setLabelProvider(new ZColumnLabelProvider() { @Override public String getText(Object element) { if (element instanceof WatchedFolder) { return ((WatchedFolder) element).getTransfer() ? Messages.EditMetaDialog_transfer : Messages.EditMetaDialog_storage; } return null; } }); TableViewerColumn col3 = createColumn(Messages.EditMetaDialog_recursive, 80); col3.setLabelProvider(new ZColumnLabelProvider() { @Override public String getText(Object element) { if (element instanceof WatchedFolder) return ((WatchedFolder) element).getRecursive() ? Messages.EditMetaDialog_c_yes : Messages.EditMetaDialog_c_no; return null; } }); TableViewerColumn col4 = createColumn(Messages.EditMetaDialog_last_observation, 120); col4.setLabelProvider(new ZColumnLabelProvider() { @Override public String getText(Object element) { if (element instanceof WatchedFolder) return df.format(new Date(((WatchedFolder) element).getLastObservation())); return null; } }); TableViewerColumn col5 = createColumn(Messages.EditMetaDialog_file_filter, 400); col5.setLabelProvider(new ZColumnLabelProvider() { @Override public String getText(Object element) { if (element instanceof WatchedFolder) { WatchedFolder wf = (WatchedFolder) element; if (!wf.getTransfer()) return UiUtilities.getFilters(wf); StringBuilder sb = new StringBuilder(); int skipPolicy = wf.getSkipPolicy(); if (skipPolicy < 0 && skipPolicy >= ImportFileSelectionPage.SKIPPOLICIES.length) skipPolicy = 0; sb.append(ImportFileSelectionPage.SKIPPOLICIES[skipPolicy]); sb.append(" | ").append(wf.getTargetDir()); //$NON-NLS-1$ return sb.toString(); } return null; } }); watchedFolderViewer.setContentProvider(ArrayContentProvider.getInstance()); new SortColumnManager(watchedFolderViewer, new int[] { SWT.UP, SWT.UP, SWT.UP, SWT.NONE, SWT.UP, SWT.NONE }, 0); watchedFolderViewer.setComparator(new ZViewerComparator() { @Override public int compare(Viewer viewer, Object e1, Object e2) { Table table = watchedFolderViewer.getTable(); TableColumn sortColumn = table.getSortColumn(); if (sortColumn == table.getColumn(4)) { int sortDirection = table.getSortDirection(); int a = (sortDirection & SWT.DOWN) != 0 ? 1 : -1; long t1 = ((WatchedFolder) e1).getLastObservation(); long t2 = ((WatchedFolder) e2).getLastObservation(); return t1 == t2 ? 0 : t1 < t2 ? a : -a; } return super.compare(viewer, e1, e2); } }); watchedFolderViewer.getControl().addKeyListener(keyListener); watchedFolderViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { updateFolderButtons(); if (cntrlDwn) { if (editFolderButton.isEnabled()) editWatchedFolder(); cntrlDwn = false; } } }); watchedFolderViewer.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { if (!cntrlDwn && editFolderButton.isEnabled()) editWatchedFolder(); } }); Composite buttonComp = new Composite(composite, SWT.NONE); buttonComp.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, true)); buttonComp.setLayout(new GridLayout()); addFolderButton = new Button(buttonComp, SWT.PUSH); addFolderButton.setText(Messages.EditMetaDialog_add); addFolderButton.setToolTipText(Messages.EditMetaDialog_add_watched_folder); addFolderButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { WatchedFolder folder = new WatchedFolderImpl(null, null, 0L, true, null, false, null, false, 0, null, 2, null, null, Constants.FILESOURCE_DIGITAL_CAMERA, false); WatchedFolderWizard wizard = new WatchedFolderWizard(true); WizardDialog wizardDialog = new WizardDialog(getShell(), wizard); wizard.init(null, new StructuredSelection(folder)); if (wizardDialog.open() == WizardDialog.OK) { try { folder.setStringId(Utilities.computeWatchedFolderId(new File(new URI(folder.getUri())), folder.getVolume())); watchedFolders.add(folder); watchedFolderViewer.setInput(watchedFolders); } catch (URISyntaxException e1) { // should never happend } } } }); editFolderButton = new Button(buttonComp, SWT.PUSH); editFolderButton.setText(Messages.EditMetaDialog_edit_watched); editFolderButton.setToolTipText(Messages.EditMetaDialog_edit_watched_tooltip); editFolderButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { editWatchedFolder(); } }); removeFolderButton = new Button(buttonComp, SWT.PUSH); removeFolderButton.setText(Messages.EditMetaDialog_remove); removeFolderButton.setToolTipText(Messages.EditMetaDialog_remove_watched_folder); removeFolderButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { WatchedFolderImpl firstElement = (WatchedFolderImpl) watchedFolderViewer.getStructuredSelection() .getFirstElement(); watchedFolders.remove(firstElement); watchedFolderViewer.remove(firstElement); } }); categoryRemoveButton.setEnabled(!readonly); Composite optionComp = new Composite(buttonComp, SWT.NONE); optionComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); optionComp.setLayout(new GridLayout(2, false)); new Label(optionComp, SWT.NONE).setText(Messages.EditMetaDialog_latency); latencyField = new NumericControl(optionComp, SWT.NONE); latencyField.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false)); latencyField.setMaximum(60); latencyField.setMinimum(1); latencyField.setIncrement(1); pauseButton = WidgetFactory.createCheckButton(optionComp, Messages.EditMetaDialog_paused, new GridData(SWT.BEGINNING, SWT.END, true, false, 2, 1)); // Footer bgimportField = WidgetFactory.createCheckButton(composite, Messages.EditMetaDialog_show_bg_imports, new GridData(SWT.BEGINNING, SWT.END, true, false, 2, 1)); autoWatchButton = WidgetFactory.createCheckButton(composite, Messages.EditMetaDialog_automatically_add_imported_folders, new GridData(SWT.BEGINNING, SWT.END, true, false, 2, 1)); }
From source file:com.bdaum.zoom.ui.internal.dialogs.EditMetaDialog.java
License:Open Source License
@SuppressWarnings("unused") private void createKeywordsGroup(final CTabFolder folder) { final Composite kwComp = createTabPage(folder, Messages.EditMetaDialog_keywords, Messages.EditMetaDialog_keyword_tooltip, 2, 0); CGroup kwGroup = new CGroup(kwComp, SWT.NONE); kwGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); kwGroup.setLayout(new GridLayout(2, false)); kwGroup.setText(Messages.EditMetaDialog_cat_keywords); Label catKwLabel = new Label(kwGroup, SWT.NONE); catKwLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false)); catKwLabel.setFont(JFaceResources.getFontRegistry().get(UiConstants.SELECTIONFONT)); flatKeywordGroup = new FlatGroup(kwGroup, SWT.NONE, settings, "hierarchicalKeywords"); //$NON-NLS-1$ flatKeywordGroup.setLayoutData(new GridData(SWT.END, SWT.BEGINNING, false, false)); flatKeywordGroup.addListener(new Listener() { @Override//from w w w. java 2 s .c o m public void handleEvent(Event event) { keywordViewer.setInput(keywords); keywordViewer.expandAll(); keywordExpandCollapseGroup.setVisible(!flatKeywordGroup.isFlat()); } }); Composite viewerGroup = new Composite(kwGroup, SWT.NONE); viewerGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); GridLayout layout = new GridLayout(2, false); layout.marginHeight = layout.marginWidth = 0; viewerGroup.setLayout(layout); final FilterField filterField = new FilterField(viewerGroup); filterField.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { keywordViewer.setInput(keywords); keywordViewer.expandAll(); } }); final CheckboxButton excludeButton = WidgetFactory.createCheckButton(viewerGroup, Messages.KeywordGroup_exclude_geographic, new GridData(SWT.END, SWT.CENTER, true, false)); excludeButton.addListener(new Listener() { @Override public void handleEvent(Event event) { excludeGeographic = excludeButton.getSelection(); Object[] expandedElements = keywordViewer.getExpandedElements(); keywordViewer.setInput(keywords); keywordViewer.setExpandedElements(expandedElements); } }); keywordExpandCollapseGroup = new ExpandCollapseGroup(viewerGroup, SWT.NONE, new GridData(SWT.END, SWT.BEGINNING, true, false, 2, 1)); keywordViewer = new TreeViewer(viewerGroup, SWT.V_SCROLL | SWT.BORDER); keywordExpandCollapseGroup.setViewer(keywordViewer); keywordExpandCollapseGroup.setVisible(!flatKeywordGroup.isFlat()); setViewerLayout(keywordViewer, 220, 2); keywordViewer.setContentProvider(new KeywordContentProvider()); keywordViewer.setLabelProvider(new KeywordLabelProvider(getVocabManager(), null)); ZColumnViewerToolTipSupport.enableFor(keywordViewer); keywordViewer.setComparator(ZViewerComparator.INSTANCE); UiUtilities.installDoubleClickExpansion(keywordViewer); keywordViewer.setFilters(new ViewerFilter[] { new ViewerFilter() { @Override public boolean select(Viewer aViewer, Object parentElement, Object element) { WildCardFilter filter = filterField.getFilter(); return filter == null || element instanceof Character || filter.accept((String) element); } } }); keywordViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { updateButtons(); } }); configureKeywordLink = new CLink(viewerGroup, SWT.NONE); configureKeywordLink.setText(Messages.EditMetaDialog_configure_keyword_filter); configureKeywordLink.addListener(new Listener() { @Override public void handleEvent(Event event) { PreferencesUtil.createPreferenceDialogOn(getShell(), KeyPreferencePage.ID, new String[0], null) .open(); } }); final Composite buttonGroup = new Composite(kwGroup, SWT.NONE); buttonGroup.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false)); buttonGroup.setLayout(new GridLayout()); keywordAddButton = createPushButton(buttonGroup, Messages.EditMetaDialog_add, Messages.EditMetaDialog_add_keyword_tooltip); keywordAddButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { ZInputDialog dialog = createKeywordDialog(Messages.EditMetaDialog_add_keyword, Messages.EditMetaDialog_enter_a_new_keyword, ""); //$NON-NLS-1$ if (dialog.open() == Window.OK) addKeywordToViewer(keywordViewer, dialog.getValue(), true); } }); keywordModifyButton = createPushButton(buttonGroup, Messages.EditMetaDialog_edit, Messages.EditMetaDialog_modify_keyword_tooltip); keywordModifyButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { editKeyword(); } }); keywordViewer.getControl().addKeyListener(keyListener); keywordViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(final SelectionChangedEvent event) { updateButtons(); if (cntrlDwn) { if (keywordModifyButton.isEnabled()) editKeyword(); cntrlDwn = false; } } }); keywordReplaceButton = createPushButton(buttonGroup, Messages.EditMetaDialog_replace, Messages.EditMetaDialog_replace_tooltip); keywordReplaceButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { String kw = (String) ((IStructuredSelection) keywordViewer.getSelection()).getFirstElement(); if (kw != null) { KeywordDialog dialog = new KeywordDialog(getShell(), NLS.bind(Messages.EditMetaDialog_replace_keyword, kw), null, keywords, null); if (dialog.open() == Window.OK) { BagChange<String> result = dialog.getResult(); boolean found = false; Set<String> added = result.getAdded(); if (added != null) for (String s : added) if (kw.equals(s)) { found = true; break; } if (!found) removeKeywordFromViewer(keywordViewer, kw); Set<String> addedKeywords = result.getAdded(); String[] replacement = addedKeywords.toArray(new String[addedKeywords.size()]); int i = 0; for (String k : replacement) addKeywordToViewer(keywordViewer, k, i++ == 0); todo.add(new ReplaceKeywordOperation(kw, replacement)); } } } }); keywordDeleteButton = createPushButton(buttonGroup, Messages.EditMetaDialog_delete_keyword, Messages.EditMetaDialog_delete_keyword_tooltip); keywordDeleteButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { BusyIndicator.showWhile(keywordDeleteButton.getDisplay(), () -> { IStructuredSelection selection = (IStructuredSelection) keywordViewer.getSelection(); String kw = (String) selection.getFirstElement(); if (kw != null) { List<AssetImpl> set = dbManager.obtainObjects(AssetImpl.class, QueryField.IPTC_KEYWORDS.getKey(), kw, QueryField.EQUALS); removeKeywordFromViewer(keywordViewer, kw); if (!set.isEmpty()) { KeywordDeleteDialog dialog = new KeywordDeleteDialog(getShell(), kw, set); if (dialog.open() != Window.OK) { keywords.add(kw); return; } if (dialog.getPolicy() == KeywordDeleteDialog.REMOVE) todo.add(new ManageKeywordsOperation( new BagChange<String>(null, null, Collections.singleton(kw), null), set)); } } }); } }); keywordShowButton = createPushButton(buttonGroup, Messages.EditMetaDialog_show_images, Messages.EditMetaDialog_show_keyword_tooltip); keywordShowButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { IStructuredSelection selection = (IStructuredSelection) keywordViewer.getSelection(); String kw = (String) selection.getFirstElement(); if (kw != null) { SmartCollectionImpl sm = new SmartCollectionImpl(kw, false, false, true, false, null, 0, null, 0, null, Constants.INHERIT_LABEL, null, 0, null); sm.addCriterion(new CriterionImpl(QueryField.IPTC_KEYWORDS.getKey(), null, kw, QueryField.EQUALS, false)); sm.addSortCriterion(new SortCriterionImpl(QueryField.IPTC_DATECREATED.getKey(), null, true)); Ui.getUi().getNavigationHistory(workbenchPage.getWorkbenchWindow()) .postSelection(new StructuredSelection(sm)); close(); } } }); new Label(buttonGroup, SWT.SEPARATOR | SWT.HORIZONTAL); keywordCollectButton = createPushButton(buttonGroup, Messages.EditMetaDialog_collect, Messages.EditMetaDialog_collect_keyword_tooltip); keywordCollectButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { KeywordCollectDialog dialog = new KeywordCollectDialog(getShell(), keywords); if (dialog.open() == Window.OK) { int i = 0; for (String kw : dialog.getToAdd()) addKeywordToViewer(keywordViewer, kw, i++ == 0); for (String kw : dialog.getToRemove()) removeKeywordFromViewer(keywordViewer, kw); } } }); keywordLoadButton = createPushButton(buttonGroup, Messages.EditMetaDialog_load, NLS.bind(Messages.EditMetaDialog_load_keyword_tooltip, Constants.KEYWORDFILEEXTENSION)); keywordLoadButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent ev) { FileDialog dialog = new FileDialog(getShell(), SWT.OPEN); dialog.setFilterExtensions(KEYWORDEXTENSIONS); dialog.setFilterNames( new String[] { Constants.APPNAME + Messages.EditMetaDialog_zoom_keyword_file + Constants.KEYWORDFILEEXTENSION + ')', Messages.EditMetaDialog_all_files }); String filename = dialog.open(); if (filename != null) { try (InputStream in = new BufferedInputStream(new FileInputStream(filename))) { List<String> list = Utilities.loadKeywords(in); keywords.clear(); keywords.addAll(list); } catch (IOException e) { // ignore } keywordViewer.setInput(keywords); keywordViewer.expandAll(); } } }); keywordSaveButton = createPushButton(buttonGroup, Messages.EditMetaDialog_save, NLS.bind(Messages.EditMetaDialog_save_keyword_tooltip, Constants.KEYWORDFILEEXTENSION)); keywordSaveButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { FileDialog dialog = new FileDialog(getShell(), SWT.SAVE); dialog.setFilterExtensions(KEYWORDEXTENSIONS); dialog.setFilterNames( new String[] { Constants.APPNAME + Messages.EditMetaDialog_zoom_keyword_file + Constants.KEYWORDFILEEXTENSION + ")", //$NON-NLS-1$ Messages.EditMetaDialog_all_files }); dialog.setFileName("*" + Constants.KEYWORDFILEEXTENSION); //$NON-NLS-1$ dialog.setOverwrite(true); String filename = dialog.open(); if (filename != null) Utilities.saveKeywords(keywords, new File(filename)); } }); addToKeywordsButton = WidgetFactory.createCheckButton(kwGroup, Messages.EditMetaDialog_add_to_keywords, new GridData(SWT.BEGINNING, SWT.END, true, false, 2, 1)); CGroup vocabGroup = new CGroup(kwComp, SWT.NONE); vocabGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); vocabGroup.setLayout(new GridLayout(2, false)); vocabGroup.setText(Messages.EditMetaDialog_controlled_vocabs); Composite vocabViewerGroup = new Composite(vocabGroup, SWT.NONE); GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true); layoutData.verticalIndent = 20; vocabViewerGroup.setLayoutData(layoutData); vocabViewerGroup.setLayout(new GridLayout(2, false)); vocabViewer = new TableViewer(vocabViewerGroup, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); setViewerLayout(vocabViewer, 150, 1); TableViewerColumn col1 = new TableViewerColumn(vocabViewer, SWT.NONE); col1.getColumn().setWidth(300); col1.setLabelProvider(new ZColumnLabelProvider() { @Override public String getText(Object element) { return element.toString(); } @Override public Image getImage(Object element) { if (element instanceof String && !new File((String) element).exists()) return Icons.error.getImage(); return null; } @Override public String getToolTipText(Object element) { if (element instanceof String && UiActivator.getDefault().getShowHover()) { File file = new File((String) element); if (!file.exists()) return Messages.EditMetaDialog_file_does_not_exist; } return super.getToolTipText(element); } @Override public Image getToolTipImage(Object element) { return getImage(element); } }); vocabViewer.setContentProvider(ArrayContentProvider.getInstance()); vocabViewer.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { updateButtons(); } }); vocabViewer.addDoubleClickListener(new IDoubleClickListener() { @Override public void doubleClick(DoubleClickEvent event) { viewVocab(); } }); ColumnViewerToolTipSupport.enableFor(vocabViewer); Composite vocabButtonGroup = new Composite(vocabViewerGroup, SWT.NONE); vocabButtonGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); vocabButtonGroup.setLayout(new GridLayout()); vocabAddButton = createPushButton(vocabButtonGroup, Messages.EditMetaDialog_add, Messages.EditMetaDialog_add_vocab); vocabAddButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { FileDialog dialog = new FileDialog(getShell(), SWT.OPEN); dialog.setText(Messages.EditMetaDialog_select_vocab); dialog.setFilterExtensions(KEYWORDEXTENSIONS); dialog.setFilterNames( new String[] { Constants.APPNAME + Messages.EditMetaDialog_zoom_keyword_file + Constants.KEYWORDFILEEXTENSION + ')', Messages.EditMetaDialog_all_files }); String file = dialog.open(); if (file != null) { boolean found = false; for (String s : vocabularies) if (s.equals(file)) { found = true; break; } if (!found) { vocabularies.add(file); vocabViewer.add(file); } vocabViewer.setSelection(new StructuredSelection(file), true); if (vocabManager != null) vocabManager.reset(vocabularies); updateKeywordViewer(); } } }); vocabRemoveButton = createPushButton(vocabButtonGroup, Messages.EditMetaDialog_remove, Messages.EditMetaDialog_remove_vocab); vocabRemoveButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { @SuppressWarnings("unchecked") Iterator<Object> it = vocabViewer.getStructuredSelection().iterator(); while (it.hasNext()) { Object file = it.next(); vocabularies.remove(file); vocabViewer.remove(file); } if (vocabManager != null) vocabManager.reset(vocabularies); updateKeywordViewer(); } }); vocabViewButton = createPushButton(vocabButtonGroup, Messages.EditMetaDialog_view_vocab, Messages.EditMetaDialog_view_vocab_tooltip); vocabViewButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { viewVocab(); } }); new Label(vocabButtonGroup, SWT.SEPARATOR | SWT.HORIZONTAL); vocabEnforceButton = createPushButton(vocabButtonGroup, Messages.EditMetaDialog_enforce, Messages.EditMetaDialog_enforce_tooltip); vocabEnforceButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { List<String[]> changes = new ArrayList<>(); VocabManager vManager = getVocabManager(); for (String kw : keywords) { String mapped = vManager.getVocab(kw); if (!kw.equals(mapped)) changes.add(new String[] { kw, mapped }); } VocabEnforceDialog dialog = new VocabEnforceDialog(getShell(), changes); if (dialog.open() == VocabEnforceDialog.OK) { BusyIndicator.showWhile(getShell().getDisplay(), () -> { int policy = dialog.getPolicy(); for (String[] change : dialog.getChanges()) { String kw = change[0]; keywords.remove(kw); if (change[1] != null) { keywords.add(change[1]); if (policy == KeywordDeleteDialog.REMOVE) todo.add(new ReplaceKeywordOperation(kw, new String[] { change[1] })); } else if (policy == KeywordDeleteDialog.REMOVE) todo.add(new ManageKeywordsOperation( new BagChange<String>(null, null, Collections.singleton(kw), change), null)); updateKeywordViewer(); } }); } } }); }
From source file:com.bdaum.zoom.ui.internal.dialogs.EditMetaDialog.java
License:Open Source License
private void addKeywordToViewer(TreeViewer viewer, String kw, boolean select) { if (keywords.add(kw)) { if (flatKeywordGroup.isFlat()) viewer.add(null, kw);/*from ww w . j a v a 2 s . c o m*/ else { Object[] expandedElements = viewer.getExpandedElements(); viewer.setInput(keywords); viewer.setExpandedElements(expandedElements); } } if (select) keywordViewer.setSelection(new StructuredSelection(kw)); }
From source file:com.bdaum.zoom.ui.internal.dialogs.EditMetaDialog.java
License:Open Source License
private void initHeader() { meta = dbManager.getMeta(true);/*from w ww.j a v a 2 s .c om*/ readOnlyButton.setSelection(meta.getReadonly()); fileName.setText(dbManager.getFileName()); versionLabel.setText(NLS.bind(Messages.EditMetaDialog_catversion, meta.getVersion())); creationDate.setText(Constants.DFDT.format(meta.getCreationDate())); lastImport.setText(Constants.DFDT.format(meta.getLastImport())); seqNoField.setText(String.valueOf(meta.getLastSequenceNo())); yearlySeqNoField.setText(String.valueOf(meta.getLastYearSequenceNo())); backupField.setText(meta.getBackupLocation()); updateBackupTooltip(); String themeId = previousMeta != null ? previousMeta.getThemeID() : meta.getThemeID(); Theme theme = themeId != null ? CoreActivator.getDefault().getThemes().get(themeId) : null; if (theme == null) theme = CoreActivator.getDefault().getCurrentTheme(); themeField.setSelection(new StructuredSelection(theme)); String language = meta.getLocale(); if (language != null && languageCombo != null) languageCombo.setSelection(new StructuredSelection(language)); }
From source file:com.bdaum.zoom.ui.internal.dialogs.EditMetaDialog.java
License:Open Source License
private void initPages(int index) { if (index < 0) return;//from w w w.j a va 2 s .co m if (visited[index]) return; visited[index] = true; meta = dbManager.getMeta(true); if (index == OVERVIEW) { ownerInformation.setText(meta.getOwner()); description.setText(meta.getDescription()); userFieldLabel1.setText(meta.getUserFieldLabel1()); userFieldLabel2.setText(meta.getUserFieldLabel2()); timelineViewer.setSelection(new StructuredSelection(meta.getTimeline())); String locationFolders = meta.getLocationFolders(); locationViewer.setSelection(new StructuredSelection( locationFolders == null ? Meta_type.locationFolders_no : locationFolders)); updateCreateNowButtons(); } else if (index == THUMBNAILS) { fromPreviewButton.setSelection(meta.getThumbnailFromPreview()); String res = meta.getThumbnailResolution(); if (res.equals(Meta_type.thumbnailResolution_low)) thumbSizeGroup.setSelection(0); else if (res.equals(Meta_type.thumbnailResolution_medium)) thumbSizeGroup.setSelection(1); else if (res.equals(Meta_type.thumbnailResolution_high)) thumbSizeGroup.setSelection(2); else if (res.equals(Meta_type.thumbnailResolution_veryHigh)) thumbSizeGroup.setSelection(3); switch (meta.getSharpen()) { case ImageConstants.SHARPEN_LIGHT: sharpenButtonGroup.setSelection(1); break; case ImageConstants.SHARPEN_MEDIUM: sharpenButtonGroup.setSelection(2); break; case ImageConstants.SHARPEN_HEAVY: sharpenButtonGroup.setSelection(3); break; default: sharpenButtonGroup.setSelection(0); break; } compressionGroup.fillValues(meta.getJpegQuality(), meta.getWebpCompression()); } else if (index == CATEGORIES) { if (categories == null) categories = Utilities.cloneCategories(meta.getCategory()); catTreeViewer.setInput(categories); } else if (index == KEYWORDS) { if (meta.getVocabularies() != null) vocabularies.addAll(meta.getVocabularies()); vocabViewer.setInput(vocabularies); keywords = new HashSet<String>(meta.getKeywords()); keywordViewer.setInput(keywords); keywordViewer.expandAll(); addToKeywordsButton.setSelection(booleanValue(meta.getPersonsToKeywords())); } else if (index == INDEXING) { noIndexButton.setSelection(meta.getNoIndex()); for (Algorithm algo : Core.getCore().getDbFactory().getLireService(true) .getSupportedSimilarityAlgorithms()) if (cbirAlgorithms.contains(algo.getName())) simViewer.setChecked(algo, true); Set<String> indexedTextFields = CoreActivator.getDefault().getIndexedTextFields(); List<QueryField> fields = new ArrayList<QueryField>(indexedTextFields.size()); for (String field : indexedTextFields) { QueryField qf = QueryField.findQueryField(field); if (qf != null) { fields.add(qf); textIndexViewer.setChecked(qf, true); } } slideTitleButton.setSelection(indexedTextFields.contains(ILuceneService.INDEX_SLIDE_TITLE)); slideDescrButton.setSelection(indexedTextFields.contains(ILuceneService.INDEX_SLIDE_DESCR)); exhibitionTitleButton.setSelection(indexedTextFields.contains(ILuceneService.INDEX_EXH_TITLE)); exhibitionDescrButton.setSelection(indexedTextFields.contains(ILuceneService.INDEX_EXH_DESCR)); exhibitionCredButton.setSelection(indexedTextFields.contains(ILuceneService.INDEX_EXH_CREDITS)); webgalleryTitleButton.setSelection(indexedTextFields.contains(ILuceneService.INDEX_WEBGAL_TITLE)); webgalleryDescrButton.setSelection(indexedTextFields.contains(ILuceneService.INDEX_WEBGAL_DESCR)); webgalleryAltButton.setSelection(indexedTextFields.contains(ILuceneService.INDEX_WEBGAL_ALT)); personsButton.setSelection(indexedTextFields.contains(ILuceneService.INDEX_PERSON_SHOWN)); fileNameButton.setSelection(indexedTextFields.contains(ILuceneService.INDEX_FILENAME)); updateIndexingControls(); validateAlgorithms(); } else if (index == LOCATIONS) locationGroup.fillValues(); else if (index == ARTWORK) artworkGroup.fillValues(); else if (index == CONTACTS) contactsGroup.fillValues(); else if (index == STATISTICS) tabFolder.getDisplay().timerExec(100, () -> { if (!tabFolder.isDisposed()) computeStatistics(); }); else if (index == WATCHEDFOLDERS) { bgimportField.setSelection(meta.getCumulateImports()); watchedFolders.clear(); if (meta.getWatchedFolder() != null) { CoreActivator activator = CoreActivator.getDefault(); for (String id : meta.getWatchedFolder()) { WatchedFolder folder = activator.getObservedFolder(id); if (folder != null) watchedFolders.add(folder); } } autoWatchButton.setSelection(meta.getAutoWatch()); folderBackup = new ArrayList<WatchedFolder>(watchedFolders); // make new instances watchedFolders.clear(); for (WatchedFolder f : folderBackup) { WatchedFolderImpl newWatchedFolder = new WatchedFolderImpl(f.getUri(), f.getVolume(), f.getLastObservation(), f.getRecursive(), f.getFilters(), f.getTransfer(), f.getArtist(), f.getSkipDuplicates(), f.getSkipPolicy(), f.getTargetDir(), f.getSubfolderPolicy(), f.getSelectedTemplate(), f.getCue(), f.getFileSource(), f.getTethered()); try { newWatchedFolder.setStringId( Utilities.computeWatchedFolderId(new File(new URI(f.getUri())), f.getVolume())); } catch (URISyntaxException e) { // should never happen } newWatchedFolder.setMeta_parent(((MetaImpl) meta).getStringId()); watchedFolders.add(newWatchedFolder); } watchedFolderViewer.setInput(watchedFolders); int folderWatchLatency = meta.getFolderWatchLatency(); if (folderWatchLatency == 0) folderWatchLatency = 30; latencyField.setSelection(folderWatchLatency); pauseButton.setSelection(meta.getPauseFolderWatch()); updateFolderButtons(); } }
From source file:com.bdaum.zoom.ui.internal.dialogs.ExhibitionEditDialog.java
License:Open Source License
private void createFloorplan(Composite parent) { parent.setLayout(new GridLayout()); Composite comp = new Composite(parent, SWT.NONE); comp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); comp.setLayout(new GridLayout(2, false)); Composite detailGroup = new Composite(comp, SWT.NONE); detailGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); detailGroup.setLayout(new GridLayout(2, false)); itemViewer = new ComboViewer(detailGroup); itemViewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1)); itemViewer.setContentProvider(ArrayContentProvider.getInstance()); itemViewer.setLabelProvider(new LabelProvider() { @Override//from ww w. j av a 2s . co m public String getText(Object element) { if (element instanceof Exhibition) return Messages.ExhibitionEditDialog_entrance; if (element instanceof Wall) return ((Wall) element).getLocation(); return super.getText(element); } }); List<Object> items = new ArrayList<Object>(current.getWall().size() + 1); items.add(current); items.addAll(current.getWall()); itemViewer.setInput(items); Label xlabel = new Label(detailGroup, SWT.NONE); xlabel.setText(Messages.ExhibitionEditDialog_ground_xpos + captionUnitmft()); xspinner = new NumericControl(detailGroup, NumericControl.LOGARITHMIC); xspinner.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false)); xspinner.setMaximum(unit == 'i' ? 1500000 : 500000); xspinner.setIncrement(unit == 'i' ? 30 : 10); xspinner.setDigits(2); Listener listener = new Listener() { @Override public void handleEvent(Event event) { if (event.widget == xspinner) updateItems(toMm(xspinner.getSelection()), -1, Double.NaN); else if (event.widget == yspinner) updateItems(-1, toMm(yspinner.getSelection()), Double.NaN); else if (event.widget == aspinner) updateItems(-1, -1, aspinner.getSelection() / 10d); } }; xspinner.addListener(listener); Label ylabel = new Label(detailGroup, SWT.NONE); ylabel.setText(Messages.ExhibitionEditDialog_ground_ypos + captionUnitmft()); yspinner = new NumericControl(detailGroup, NumericControl.LOGARITHMIC); yspinner.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false)); yspinner.setMaximum(unit == 'i' ? 1500000 : 500000); yspinner.setIncrement(unit == 'i' ? 30 : 10); yspinner.setDigits(2); yspinner.addListener(listener); alabel = new Label(detailGroup, SWT.NONE); alabel.setText(Messages.ExhibitionEditDialog_ground_angle); aspinner = new NumericControl(detailGroup, SWT.NONE); aspinner.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false)); aspinner.setMaximum(3600); aspinner.setIncrement(10); aspinner.setDigits(1); aspinner.addListener(listener); floorplan = new Canvas(comp, SWT.DOUBLE_BUFFERED); GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.widthHint = 400; data.heightHint = 300; floorplan.setLayoutData(data); floorplan.addPaintListener(new PaintListener() { public void paintControl(PaintEvent e) { Rectangle area = floorplan.getClientArea(); GC gc = e.gc; gc.setBackground(e.display.getSystemColor(SWT.COLOR_WHITE)); gc.fillRectangle(area); int minx = Integer.MAX_VALUE; int miny = Integer.MAX_VALUE; int maxx = Integer.MIN_VALUE; int maxy = Integer.MIN_VALUE; int n = current.getWall().size(); wxs = new int[n]; wys = new int[n]; wx2s = new int[n]; wy2s = new int[n]; double[] wa = new double[n]; int i = 0; for (Wall wall : current.getWall()) { double angle = wall.getGAngle(); int gx = wall.getGX(); int gy = wall.getGY(); boolean match = false; for (int j = 0; j < i; j++) if (gx == wxs[j] && gy == wys[j] && angle == wa[j]) { match = true; break; } if (match) { wall.setGX(wx2s[i - 1]); gx = wx2s[i - 1]; wall.setGY(wy2s[i - 1]); gy = wy2s[i - 1]; double d = wa[i - 1]; if (d > 45 && d < 135) angle = ((i / 2) % 2 == 0) ? d - 90 : d + 90; else if (d > 135 && d < 225) angle = d - 90; else angle = d + 90; if (angle < 0) angle += 360; else if (angle >= 360) angle -= 360; wall.setGAngle(angle); updateFloorplanDetails(); } int width = wall.getWidth(); double r = Math.toRadians(angle); int gx2 = (int) (gx + Math.cos(r) * width + D05); int gy2 = (int) (gy + Math.sin(r) * width + D05); minx = Math.min(minx, Math.min(gx, gx2)); miny = Math.min(miny, Math.min(gy, gy2)); maxx = Math.max(maxx, Math.max(gx, gx2)); maxy = Math.max(maxy, Math.max(gy, gy2)); wxs[i] = gx; wys[i] = gy; wx2s[i] = gx2; wy2s[i] = gy2; wa[i] = angle; ++i; } int sx = current.getStartX(); int sy = current.getStartY(); minx = Math.min(minx, sx); miny = Math.min(miny, sy); maxx = Math.max(maxx, sx); maxy = Math.max(maxy, sy); double w = maxx - minx; double h = maxy - miny; scale = Math.min(area.width / w, area.height / h) / 2d; xoff = (int) (area.width / 4 - minx * scale); yoff = (int) (area.height / 4 - miny * scale); double d = -Math.floor(xoff / (D1000 * scale)) * D1000; while (true) { int x = xoff + (int) (d * scale + D05); if (x > area.width) break; gc.setForeground(e.display.getSystemColor(d == 0d ? SWT.COLOR_BLUE : SWT.COLOR_GRAY)); gc.drawLine(x, 0, x, area.height); d += D1000; } d = -Math.floor(yoff / (D1000 * scale)) * D1000; while (true) { int y = yoff + (int) (d * scale + D05); gc.setForeground(e.display.getSystemColor(d == 0d ? SWT.COLOR_BLUE : SWT.COLOR_GRAY)); if (y > area.height) break; gc.drawLine(0, y, area.width, y); d += D1000; } gc.setBackground(e.display.getSystemColor(SWT.COLOR_GRAY)); gc.fillRectangle(xoff - 3, yoff - 3, 6, 6); gc.setLineWidth(2); Wall doorWall = null; i = 0; for (Wall wall : current.getWall()) { gc.setForeground( e.display.getSystemColor(selectedItem == wall ? SWT.COLOR_RED : SWT.COLOR_DARK_GRAY)); int x1 = xoff + (int) (wxs[i] * scale + D05); int y1 = yoff + (int) (wys[i] * scale + D05); int x2 = xoff + (int) (wx2s[i] * scale + D05); int y2 = yoff + (int) (wy2s[i] * scale + D05); gc.drawLine(x1, y1, x2, y2); double aAngle = wall.getGAngle(); double r = Math.toRadians(aAngle); double sin = Math.sin(r); double cos = Math.cos(r); if (sx >= Math.min(wxs[i], wx2s[i]) - 50 && sx <= Math.max(wxs[i], wx2s[i]) + 50 && sy >= Math.min(wys[i], wy2s[i]) - 50 && sy <= Math.max(wys[i], wy2s[i]) + 50) { if (Math.abs(cos) > 0.01d) { if (Math.abs(wys[i] - sy + (sx - wxs[i]) * sin / cos) < 50) doorWall = wall; } else doorWall = wall; } int xa = (int) ((x1 + x2) * D05 - sin * 5); int ya = (int) ((y1 + y2) * D05 + cos * 5); aAngle += 135; r = Math.toRadians(aAngle); int x3 = (int) (xa + 6 * Math.cos(r) + D05); int y3 = (int) (ya + 6 * Math.sin(r) + D05); gc.drawLine(xa, ya, x3, y3); aAngle -= 270; r = Math.toRadians(aAngle); x3 = (int) (xa + 6 * Math.cos(r) + D05); y3 = (int) (ya + 6 * Math.sin(r) + D05); gc.drawLine(xa, ya, x3, y3); ++i; } if (doorWall != null) { int lineStyle = gc.getLineStyle(); gc.setLineStyle(SWT.LINE_DASH); double r = Math.toRadians(doorWall.getGAngle()); double sin = Math.sin(r); double cos = Math.cos(r); double dx = sx * scale - sin * 5; double dy = sy * scale + cos * 5; int dx1 = (int) (dx + DOORWIDTH / 2 * scale * cos + D05); int dy1 = (int) (dy - DOORWIDTH / 2 * scale * sin + D05); int dx2 = (int) (dx - (INFOWIDTH + DOORWIDTH / 2) * scale * cos + D05); int dy2 = (int) (dy + (INFOWIDTH + DOORWIDTH / 2) * scale * sin + D05); gc.drawLine(xoff + dx1, yoff + dy1, xoff + dx2, yoff + dy2); gc.setLineStyle(lineStyle); } gc.setForeground( e.display.getSystemColor(selectedItem == current ? SWT.COLOR_RED : SWT.COLOR_DARK_GREEN)); gc.drawOval(xoff + (int) (sx * scale + D05) - ENTRANCEDIAMETER / 2 - 1, yoff + (int) (sy * scale + D05) - ENTRANCEDIAMETER / 2 - 1, ENTRANCEDIAMETER, ENTRANCEDIAMETER); } }); floorplan.addMouseListener(new MouseAdapter() { @Override public void mouseDown(MouseEvent e) { if (hotObject != null) { dragStart = new Point(e.x, e.y); draggedObject = hotObject; dragHandle = hotIndex; hotObject = null; } } @Override public void mouseUp(MouseEvent e) { recentlyDraggedObject = draggedObject; draggedObject = null; Object sel = null; int x = e.x; int y = e.y; int sx = xoff + (int) (current.getStartX() * scale + D05); int sy = yoff + (int) (current.getStartY() * scale + D05); if (Math.sqrt((sx - x) * (sx - x) + (sy - y) * (sy - y)) <= ENTRANCEDIAMETER / 2 + 1) { sel = current; } else { int i = 0; for (Wall wall : current.getWall()) { int x1 = xoff + (int) (wxs[i] * scale + D05); int y1 = yoff + (int) (wys[i] * scale + D05); int x2 = xoff + (int) (wx2s[i] * scale + D05); int y2 = yoff + (int) (wy2s[i] * scale + D05); double d = Math.abs((x2 - x1) * (y1 - y) - (x1 - x) * (y2 - y1)) / Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); if (d < TOLERANCE && x <= Math.max(x1, x2) + TOLERANCE && x >= Math.min(x1, x2) - TOLERANCE && y <= Math.max(y1, y2) + TOLERANCE && y >= Math.min(y1, y2) - TOLERANCE) { sel = wall; break; } ++i; } } if (sel != null) itemViewer.setSelection(new StructuredSelection(sel)); } }); floorplan.addMouseMoveListener(new MouseMoveListener() { public void mouseMove(MouseEvent e) { if (draggedObject != null) { int dx = e.x - dragStart.x; int dy = e.y - dragStart.y; int x = origin.x + (int) (dx / scale + D05); int y = origin.y + (int) (dy / scale + D05); if (draggedObject == current) { current.setStartX(x); current.setStartY(y); } else if (draggedObject instanceof Wall) { Wall wall = (Wall) draggedObject; if (dragHandle == 1) { wall.setGX(x); wall.setGY(y); } else { double ddx = wall.getGX() - x; double ddy = wall.getGY() - y; double angle = ddx == 0 ? 90 : Math.toDegrees(Math.atan(ddy / ddx)); if (ddx > 0) { if (ddy < 0) angle += 180; else angle -= 180; } wall.setGAngle(angle); } } floorplan.redraw(); updateFloorplanDetails(); return; } IStructuredSelection selection = itemViewer.getStructuredSelection(); hotObject = null; hotIndex = -1; Object sel = selection.getFirstElement(); int x = e.x; int y = e.y; int sx = xoff + (int) (current.getStartX() * scale + D05); int sy = yoff + (int) (current.getStartY() * scale + D05); if (sel == current && Math.sqrt((sx - x) * (sx - x) + (sy - y) * (sy - y)) <= ENTRANCEDIAMETER / 2 + 1) { hotObject = current; origin.x = current.getStartX(); origin.y = current.getStartY(); } else { int i = 0; for (Wall wall : current.getWall()) { if (sel == wall) { int x1 = xoff + (int) (wxs[i] * scale + D05); int y1 = yoff + (int) (wys[i] * scale + D05); int x2 = xoff + (int) (wx2s[i] * scale + D05); int y2 = yoff + (int) (wy2s[i] * scale + D05); if (Math.sqrt((x1 - x) * (x1 - x) + (y1 - y) * (y1 - y)) <= TOLERANCE) { hotIndex = 1; hotObject = wall; origin.x = wxs[i]; origin.y = wys[i]; } else if (Math.sqrt((x2 - x) * (x2 - x) + (y2 - y) * (y2 - y)) <= TOLERANCE) { hotIndex = 2; hotObject = wall; origin.x = wx2s[i]; origin.y = wy2s[i]; } } ++i; } } if (hotObject != null) { if (hotIndex == 2) floorplan.setCursor(rotCursor); else floorplan.setCursor(getShell().getDisplay().getSystemCursor(SWT.CURSOR_SIZEALL)); } else floorplan.setCursor(getShell().getDisplay().getSystemCursor(SWT.CURSOR_ARROW)); } }); floorplan.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { if (recentlyDraggedObject != null) { int dx = 0; int dy = 0; switch (e.keyCode) { case SWT.ARROW_LEFT: dx = -10; break; case SWT.ARROW_RIGHT: dx = 10; break; case SWT.ARROW_UP: dy = -10; break; case SWT.ARROW_DOWN: dy = 10; break; case SWT.HOME: dx = -500; break; case SWT.END: dx = 500; break; case SWT.PAGE_UP: dy = -500; break; case SWT.PAGE_DOWN: dy = 500; break; default: return; } if (recentlyDraggedObject == current) { current.setStartX(current.getStartX() + dx); current.setStartY(current.getStartY() + dy); } else if (recentlyDraggedObject instanceof Wall) { Wall wall = (Wall) recentlyDraggedObject; int gx = wall.getGX(); int gy = wall.getGY(); if (dragHandle == 1) { wall.setGX(gx + dx); wall.setGY(gy + dy); } else { int width = wall.getWidth(); double r = Math.toRadians(wall.getGAngle()); int gx2 = (int) (gx + Math.cos(r) * width + D05); int gy2 = (int) (gy + Math.sin(r) * width + D05); double ddx = gx - gx2 - dx; double ddy = gy - gy2 - dy; double angle = ddx == 0 ? 90 : Math.toDegrees(Math.atan(ddy / ddx)); if (ddx > 0) angle = ddy < 0 ? 180 + angle : angle - 180; wall.setGAngle(angle); } } floorplan.redraw(); updateFloorplanDetails(); return; } } }); updateFloorplanDetails(); itemViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { selectedItem = ((IStructuredSelection) event.getSelection()).getFirstElement(); updateFloorplanDetails(); floorplan.redraw(); } }); itemViewer.setSelection(new StructuredSelection(current)); }