Example usage for org.eclipse.jface.viewers StructuredSelection StructuredSelection

List of usage examples for org.eclipse.jface.viewers StructuredSelection StructuredSelection

Introduction

In this page you can find the example usage for org.eclipse.jface.viewers StructuredSelection StructuredSelection.

Prototype

public StructuredSelection(List elements) 

Source Link

Document

Creates a structured selection from the given List.

Usage

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));

}