Example usage for org.eclipse.jface.resource JFaceResources getHeaderFont

List of usage examples for org.eclipse.jface.resource JFaceResources getHeaderFont

Introduction

In this page you can find the example usage for org.eclipse.jface.resource JFaceResources getHeaderFont.

Prototype

public static Font getHeaderFont() 

Source Link

Document

Returns the JFace's header font.

Usage

From source file:com.amazonaws.eclipse.explorer.sns.TopicEditor.java

License:Apache License

private void createSubscriptionsComposite(FormToolkit toolkit, Composite parent) {
    Composite subscriptionsComposite = toolkit.createComposite(parent);
    subscriptionsComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    subscriptionsComposite.setLayout(new GridLayout());

    Label label = toolkit.createLabel(subscriptionsComposite, "Subscriptions");
    label.setFont(JFaceResources.getHeaderFont());
    label.setForeground(toolkit.getColors().getColor(IFormColors.TITLE));
    label.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false));

    Composite composite = toolkit.createComposite(subscriptionsComposite);
    composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    TreeColumnLayout tableColumnLayout = new TreeColumnLayout();
    composite.setLayout(tableColumnLayout);

    SubscriptionContentProvider contentProvider = new SubscriptionContentProvider();
    SubscriptionLabelProvider labelProvider = new SubscriptionLabelProvider();

    viewer = new TreeViewer(composite, SWT.BORDER | SWT.MULTI);
    viewer.getTree().setLinesVisible(true);
    viewer.getTree().setHeaderVisible(true);
    viewer.setLabelProvider(labelProvider);
    viewer.setContentProvider(contentProvider);

    createColumns(tableColumnLayout, viewer.getTree());
    viewer.setInput(new Object());

    final IRefreshable refreshable = this;
    MenuManager menuManager = new MenuManager();
    menuManager.setRemoveAllWhenShown(true);
    menuManager.addMenuListener(new IMenuListener() {
        public void menuAboutToShow(IMenuManager manager) {
            manager.add(new NewSubscriptionAction(getClient(), topicEditorInput.getTopic(), refreshable));
            manager.add(new UnsubscribeAction());
        }/*from   w  w  w . ja v a 2  s .  c  o m*/
    });

    Menu menu = menuManager.createContextMenu(viewer.getTree());
    viewer.getTree().setMenu(menu);
    getSite().registerContextMenu(menuManager, viewer);

    refreshData();
}

From source file:com.amazonaws.eclipse.explorer.sqs.QueueEditor.java

License:Apache License

@Override
public void createPartControl(Composite parent) {
    FormToolkit toolkit = new FormToolkit(Display.getDefault());
    ScrolledForm form = new ScrolledForm(parent, SWT.V_SCROLL);
    form.setExpandHorizontal(true);/* w  ww . j ava 2 s  . co m*/
    form.setExpandVertical(true);
    form.setBackground(toolkit.getColors().getBackground());
    form.setForeground(toolkit.getColors().getColor(IFormColors.TITLE));
    form.setFont(JFaceResources.getHeaderFont());

    form.setText(queueEditorInput.getName());
    toolkit.decorateFormHeading(form.getForm());
    form.setImage(AwsToolkitCore.getDefault().getImageRegistry().get(AwsToolkitCore.IMAGE_QUEUE));
    form.getBody().setLayout(new GridLayout());

    createQueueSummaryInfoSection(form, toolkit);
    createMessageList(form, toolkit);

    form.getToolBarManager().add(new RefreshAction());
    form.getToolBarManager().add(new Separator());
    form.getToolBarManager().add(new AddMessageAction(getClient(), queueEditorInput.getQueueUrl(), this));

    form.getToolBarManager().update(true);
}

From source file:com.amazonaws.eclipse.explorer.sqs.QueueEditor.java

License:Apache License

private void createMessageList(final ScrolledForm form, final FormToolkit toolkit) {
    Composite parent = toolkit.createComposite(form.getBody());
    parent.setLayout(new GridLayout());
    parent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    Label label = toolkit.createLabel(parent, "Message Sampling");
    label.setFont(JFaceResources.getHeaderFont());
    label.setForeground(toolkit.getColors().getColor(IFormColors.TITLE));
    label.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false));

    Composite composite = toolkit.createComposite(parent);
    composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    TreeColumnLayout tableColumnLayout = new TreeColumnLayout();
    composite.setLayout(tableColumnLayout);

    MessageContentProvider contentProvider = new MessageContentProvider();
    MessageLabelProvider labelProvider = new MessageLabelProvider();

    viewer = new TreeViewer(composite, SWT.BORDER | SWT.MULTI);
    viewer.getTree().setLinesVisible(true);
    viewer.getTree().setHeaderVisible(true);
    viewer.setLabelProvider(labelProvider);
    viewer.setContentProvider(contentProvider);

    createColumns(tableColumnLayout, viewer.getTree());
    viewer.setInput(new Object());

    MenuManager menuManager = new MenuManager();
    menuManager.setRemoveAllWhenShown(true);
    menuManager.addMenuListener(new IMenuListener() {
        public void menuAboutToShow(IMenuManager manager) {
            manager.add(new DeleteMessageAction());
        }/*from w w w  .ja v a2s. c o m*/
    });

    Menu menu = menuManager.createContextMenu(viewer.getTree());
    viewer.getTree().setMenu(menu);
    getSite().registerContextMenu(menuManager, viewer);

    new LoadMessagesThread().start();
}

From source file:com.amazonaws.eclipse.identitymanagement.group.GroupEditor.java

License:Apache License

@Override
public void createPartControl(Composite parent) {
    FormToolkit toolkit = new FormToolkit(Display.getDefault());
    ScrolledForm form = new ScrolledForm(parent, SWT.V_SCROLL);
    form.setExpandHorizontal(true);// w w  w. j a  v a 2s .  c o m
    form.setExpandVertical(true);
    form.setBackground(toolkit.getColors().getBackground());
    form.setForeground(toolkit.getColors().getColor(IFormColors.TITLE));
    form.setFont(JFaceResources.getHeaderFont());

    form.setText(getFormTitle());
    toolkit.decorateFormHeading(form.getForm());
    form.setImage(AwsToolkitCore.getDefault().getImageRegistry().get(AwsToolkitCore.IMAGE_GROUP));
    form.getBody().setLayout(new GridLayout());

    SashForm sash = new SashForm(form.getBody(), SWT.VERTICAL);
    sash.setLayoutData(new GridData(GridData.FILL_BOTH));
    sash.setLayout(new GridLayout());

    createTableSection(sash, toolkit);
    createTabsSection(sash, toolkit);

    form.getToolBarManager().add(new RefreshAction());
    form.getToolBarManager().add(new CreateGroupAction(iam, this));
    form.getToolBarManager().update(true);
    groupTable.setGroupSummary(groupSummary);
    groupTable.setUsersInGroup(usersInGroup);
    groupTable.setGroupPermissions(groupPermissions);

}

From source file:com.amazonaws.eclipse.identitymanagement.role.RoleEditor.java

License:Apache License

@Override
public void createPartControl(Composite parent) {

    FormToolkit toolkit = new FormToolkit(Display.getDefault());
    ScrolledForm form = new ScrolledForm(parent, SWT.V_SCROLL);
    form.setExpandHorizontal(true);//from  ww  w  .ja v  a 2s .  c om
    form.setExpandVertical(true);
    form.setBackground(toolkit.getColors().getBackground());
    form.setForeground(toolkit.getColors().getColor(IFormColors.TITLE));
    form.setFont(JFaceResources.getHeaderFont());

    form.setText(getFormTitle());
    toolkit.decorateFormHeading(form.getForm());
    form.setImage(AwsToolkitCore.getDefault().getImageRegistry().get(AwsToolkitCore.IMAGE_ROLE));
    form.getBody().setLayout(new GridLayout());

    SashForm sash = new SashForm(form.getBody(), SWT.VERTICAL);
    sash.setLayoutData(new GridData(GridData.FILL_BOTH));
    sash.setLayout(new GridLayout());
    createTablesSection(sash, toolkit);
    createTabsSection(sash, toolkit);
    form.getToolBarManager().add(new RefreshAction());
    form.getToolBarManager().add(new CreateRoleAction(iam, this));
    form.getToolBarManager().update(true);
    roleTable.setRoleSummary(roleSummary);
    roleTable.setRolePermissions(rolePermissions);
    roleTable.setRoleTrustRelationships(roleTrustRelationships);
}

From source file:com.astra.ses.spell.gui.model.FontInfo.java

License:Open Source License

/***************************************************************************
 * Constructor/*from   w w w  .j  av a2 s  .c om*/
 *  
 * @param xmlElement The XML config file element for a font definition
 * 
 **************************************************************************/
public FontInfo(Element xmlElement) {
    if (xmlElement.getNodeType() == Node.ELEMENT_NODE) {
        m_id = xmlElement.getAttribute("id");
        m_face = xmlElement.getAttribute("face");
        String fontSize = xmlElement.getAttribute("size");
        m_size = Integer.parseInt(fontSize);
        String fontStyle = xmlElement.getAttribute("style");
        if (fontStyle.equals("bold")) {
            m_style = SWT.BOLD;
        } else if (fontStyle.equals("italic")) {
            m_style = SWT.ITALIC;
        } else {
            m_style = SWT.NORMAL;
        }
        if (m_face.equals("header")) {
            m_font = JFaceResources.getHeaderFont();
        } else if (m_face.equals("dialog")) {
            if (m_style == SWT.BOLD) {
                m_font = JFaceResources.getFontRegistry().getBold(JFaceResources.DIALOG_FONT);
            } else if (m_style == SWT.ITALIC) {
                m_font = JFaceResources.getFontRegistry().getItalic(JFaceResources.DIALOG_FONT);
            } else {
                m_font = JFaceResources.getFontRegistry().get(JFaceResources.DIALOG_FONT);
            }
        } else {
            m_font = new Font(Display.getCurrent(), new FontData[] { new FontData(m_face, m_size, m_style) });
        }
    }
}

From source file:com.astra.ses.spell.gui.preferences.initializer.elements.FontInfo.java

License:Open Source License

/***************************************************************************
 * Constructor/* ww w  .j  a v a 2s.  c o m*/
 * 
 * @param xmlElement
 *            The XML config file element for a font definition
 * 
 **************************************************************************/
public FontInfo(Element xmlElement) {
    if (xmlElement.getNodeType() == Node.ELEMENT_NODE) {
        id = xmlElement.getAttribute("id");
        face = xmlElement.getAttribute("face");
        String fontSize = xmlElement.getAttribute("size");
        size = Integer.parseInt(fontSize);
        String fontStyle = xmlElement.getAttribute("style");
        if (fontStyle.equals("bold")) {
            style = SWT.BOLD;
        } else if (fontStyle.equals("italic")) {
            style = SWT.ITALIC;
        } else if (fontStyle.equals("bold-italic")) {
            style = SWT.BOLD | SWT.ITALIC;
        } else if (fontStyle.equals("norm")) {
            style = SWT.NORMAL;
        } else {
            Logger.error("Bad font style definition: " + fontStyle + ". Using norm", Level.CONFIG, this);
            style = SWT.NORMAL;
        }

        if (face.equals("header")) {
            face = JFaceResources.getHeaderFont().getFontData()[0].getName();
        } else if (face.equals("dialog")) {
            face = JFaceResources.getDialogFont().getFontData()[0].getName();
        }
    }
}

From source file:com.bdaum.zoom.net.communities.ui.AuthDialog.java

License:Open Source License

@Override
protected Control createDialogArea(Composite parent) {
    Composite area = (Composite) super.createDialogArea(parent);
    Composite composite = new Composite(area, SWT.NONE);
    composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    composite.setLayout(new GridLayout(2, false));
    browser = new Browser(composite, SWT.NONE);
    GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1);
    layoutData.widthHint = width;/*from   ww w.ja va  2s.c  om*/
    layoutData.heightHint = height;
    browser.setLayoutData(layoutData);
    if (respond) {
        codeLabel = new Label(composite, SWT.NONE);
        codeLabel.setFont(JFaceResources.getHeaderFont());
        codeLabel.setText(Messages.AuthDialog_enter_code_here);
        codeField = new Text(composite, SWT.SINGLE | SWT.LEAD | SWT.BORDER);
        codeField.setFont(JFaceResources.getHeaderFont());
        codeField.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
        codeLabel.setVisible(false);
        codeField.setVisible(false);
        browser.addLocationListener(new LocationListener() {
            public void changing(LocationEvent event) {
                // do nothing
            }

            public void changed(LocationEvent event) {
                if (event.location.indexOf(AUTHORIZE) > 0) {
                    codeLabel.setVisible(true);
                    codeField.setVisible(true);
                }
            }
        });
    }
    browser.setUrl(authLink);
    return area;
}

From source file:com.bdaum.zoom.ui.internal.dialogs.CategorizeDialog.java

License:Open Source License

@SuppressWarnings("unused")
protected void createProposalArea() {
    Composite proposalArea = new Composite(comp, SWT.NONE);
    proposalArea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    proposalArea.setLayout(new GridLayout(1, false));
    proposalTitle = new Label(proposalArea, SWT.NONE);
    proposalTitle.setFont(JFaceResources.getHeaderFont());
    proposalTitle.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
    setProposalTitel();//  w  w  w  .  j  av  a  2 s  .co m
    stack = new Composite(proposalArea, SWT.BORDER);
    stack.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    stackLayout = new StackLayout();
    stack.setLayout(stackLayout);
    PairLabelProvider pairLabelProvider = new PairLabelProvider();
    CategoryLabelProvider catLabelProvider = new CategoryLabelProvider(getVocabManager());
    ISelectionChangedListener selectionChangedListener = new ISelectionChangedListener() {
        @Override
        public void selectionChanged(SelectionChangedEvent event) {
            updateButtons();
        }
    };
    // Unsplit version
    propComp = new Composite(stack, SWT.NONE);
    propComp.setLayout(new GridLayout(2, false));
    Label label = new Label(propComp, SWT.NONE);
    label.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false, 2, 1));
    label.setText(Messages.CategorizeDialog_mark_keywords);

    proposalViewer = CheckboxTableViewer.newCheckList(propComp, SWT.V_SCROLL);
    GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
    layoutData.widthHint = 200;
    proposalViewer.getTable().setLayoutData(layoutData);
    TableViewerColumn col1 = new TableViewerColumn(proposalViewer, SWT.NONE);
    col1.getColumn().setWidth(150);
    col1.setLabelProvider(catLabelProvider);
    TableViewerColumn col2 = new TableViewerColumn(proposalViewer, SWT.NONE);
    col2.getColumn().setWidth(70);

    col2.setLabelProvider(pairLabelProvider);
    proposalViewer.setContentProvider(ArrayContentProvider.getInstance());
    proposalViewer.addDragSupport(DND.DROP_MOVE | DND.DROP_COPY, new Transfer[] { selectionTransfer },
            new ProposalDragSourceListener(proposalViewer));
    proposalViewer.addSelectionChangedListener(selectionChangedListener);
    ZColumnViewerToolTipSupport.enableFor(proposalViewer);

    Composite buttonArea = new Composite(propComp, SWT.NONE);
    buttonArea.setLayoutData(new GridData(SWT.END, SWT.BEGINNING, false, false));
    buttonArea.setLayout(new GridLayout(1, false));
    new AllNoneGroup(buttonArea, new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            proposalViewer.setAllChecked(e.widget.getData() == AllNoneGroup.ALL);
            updateButtons();
        }
    });
    Button button = new Button(buttonArea, SWT.PUSH);
    button.setText(Messages.CategorizeDialog_select_unpaired);
    button.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            Token[] tokens = (Token[]) proposalViewer.getInput();
            for (Token tok : tokens) {
                proposalViewer.setChecked(tok, tok.getMatch() == UNCHECKED);
            }
        }
    });
    // Split version
    splitComp = new Composite(stack, SWT.NONE);
    splitComp.setLayout(new GridLayout(2, false));
    Label catLabel = new Label(splitComp, SWT.NONE);
    catLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false, 2, 1));
    catLabel.setFont(JFaceResources.getBannerFont());
    catLabel.setText(Messages.CategorizeDialog_proposed_as_categories);
    Label catLabel2 = new Label(splitComp, SWT.NONE);
    catLabel2.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false, 2, 1));
    catLabel2.setText(Messages.CategorizeDialog_can_be_marked_as_keywords);
    proposalViewer1 = CheckboxTableViewer.newCheckList(splitComp, SWT.V_SCROLL);
    layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
    layoutData.widthHint = 200;
    layoutData.heightHint = 100;
    proposalViewer1.getTable().setLayoutData(layoutData);
    col1 = new TableViewerColumn(proposalViewer1, SWT.NONE);
    col1.getColumn().setWidth(150);
    col1.setLabelProvider(catLabelProvider);
    col2 = new TableViewerColumn(proposalViewer1, SWT.NONE);
    col2.getColumn().setWidth(70);

    col2.setLabelProvider(pairLabelProvider);
    proposalViewer1.setContentProvider(ArrayContentProvider.getInstance());
    proposalViewer1.addDragSupport(DND.DROP_MOVE | DND.DROP_COPY, new Transfer[] { selectionTransfer },
            new ProposalDragSourceListener(proposalViewer1));
    proposalViewer1.addSelectionChangedListener(selectionChangedListener);
    ColumnViewerToolTipSupport.enableFor(proposalViewer1);

    Composite buttonArea1 = new Composite(splitComp, SWT.NONE);
    buttonArea1.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false));
    buttonArea1.setLayout(new GridLayout(1, false));
    new AllNoneGroup(buttonArea1, new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            proposalViewer1.setAllChecked(e.widget.getData() == AllNoneGroup.ALL);
            updateButtons();
        }
    });
    button = new Button(buttonArea1, SWT.PUSH);
    button.setText(Messages.CategorizeDialog_select_unpaired);
    button.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            Token[] tokens = (Token[]) proposalViewer1.getInput();
            for (Token tok : tokens)
                proposalViewer1.setChecked(tok, tok.getMatch() == UNCHECKED);
        }
    });
    Label keyLabel = new Label(splitComp, SWT.NONE);
    keyLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, true, true, 2, 1));
    keyLabel.setFont(JFaceResources.getBannerFont());
    keyLabel.setText(Messages.CategorizeDialog_proposed_as_keywords);
    proposalViewer2 = CheckboxTableViewer.newCheckList(splitComp, SWT.V_SCROLL);
    layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
    layoutData.widthHint = 200;
    layoutData.heightHint = 300;
    proposalViewer2.getTable().setLayoutData(layoutData);
    proposalViewer2.setLabelProvider(new ColumnLabelProvider());
    proposalViewer2.setContentProvider(ArrayContentProvider.getInstance());
    proposalViewer2.addSelectionChangedListener(selectionChangedListener);

    Composite buttonArea2 = new Composite(splitComp, SWT.NONE);
    buttonArea2.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false));
    buttonArea2.setLayout(new GridLayout(1, false));
    new AllNoneGroup(buttonArea2, new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            proposalViewer2.setAllChecked(e.widget.getData() == AllNoneGroup.ALL);
            updateButtons();
        }
    });
    // Messages
    msgComp = new Composite(stack, SWT.NONE);
    msgComp.setLayout(new GridLayout(1, false));
    msgLabel = new Label(msgComp, SWT.CENTER | SWT.WRAP);
    GridData ldata = new GridData(SWT.FILL, SWT.CENTER, true, true);
    ldata.heightHint = 30;
    msgLabel.setLayoutData(ldata);

    CLink aiLink = new CLink(proposalArea, SWT.NONE);
    aiLink.setText(Messages.CategorizeDialog_configure);
    aiLink.setToolTipText(Messages.CategorizeDialog_user_preferences);
    aiLink.addListener(new Listener() {
        @Override
        public void handleEvent(Event event) {
            if (aiService != null) {
                boolean wasEnabled = aiService.isEnabled();
                if (wasEnabled)
                    Job.getJobManager().cancel(this);
                if (aiService.configure(getShell())) {
                    boolean enabled = aiService.isEnabled();
                    setProposalTitel();
                    List<Asset> reordered;
                    int p = assets.indexOf(currentAsset);
                    reordered = p > 0 ? assets.subList(p, assets.size()) : assets;
                    for (Asset asset : reordered)
                        predictions.remove(asset.getStringId());
                    fillValues(false);
                    // TODO could be improved when language can be
                    // controlled through API
                    if (enabled)
                        startPredictionJob(reordered);
                }
            }
        }
    });
}

From source file:com.bdaum.zoom.ui.internal.dialogs.CategorizeDialog.java

License:Open Source License

@SuppressWarnings("unused")
protected void createCategoryArea() {
    Composite catArea = new Composite(comp, SWT.NONE);
    catArea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    catArea.setLayout(new GridLayout(1, false));
    Label catLabel = new Label(catArea, SWT.NONE);
    catLabel.setFont(JFaceResources.getHeaderFont());
    catLabel.setText(Messages.CategorizeDialog_categories);
    textLayout = new TextLayout(getShell().getDisplay());
    textLayout.setAlignment(SWT.CENTER);
    catCanvas = new Canvas(catArea, SWT.BORDER);
    GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
    layoutData.widthHint = Math.min(800, depth * 200);
    layoutData.heightHint = Math.min(600, width * 20);
    catCanvas.setLayoutData(layoutData);
    catCanvas.addPaintListener(new PaintListener() {
        @Override/*from ww  w.ja  v  a  2s.  co  m*/
        public void paintControl(PaintEvent e) {
            Rectangle clientArea = catCanvas.getClientArea();
            e.gc.fillRectangle(clientArea);
            root.draw(e.gc, MARGINS, MARGINS, Math.max(20, (clientArea.width - 2 * MARGINS) / (depth + 1)),
                    Math.max(15, (clientArea.height - 2 * MARGINS) / (width + 1)));
        }
    });
    catCanvas.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseDown(MouseEvent e) {
            boolean alt = (e.stateMask & SWT.ALT) == SWT.ALT;
            Node found = findObject(e);
            if (found != null) {
                int check = found.getChecked();
                switch (check) {
                case CHECKED:
                    found.setChecked(alt ? SUPPLEMENTAL : UNCHECKED, false);
                    break;
                case SUPPLEMENTAL:
                case PROPOSED:
                    if (alt)
                        found.setChecked(UNCHECKED, false);
                    else {
                        root.degrade(PROPOSED, SUPPROPOSED);
                        root.degrade(CHECKED, SUPPLEMENTAL);
                        found.setChecked(CHECKED, false);
                    }
                    break;
                case SUPPROPOSED:
                    found.setChecked(alt ? UNCHECKED : SUPPLEMENTAL, false);
                    break;
                default:
                    if (alt || forcePrimary) {
                        root.degrade(PROPOSED, SUPPROPOSED);
                        root.degrade(CHECKED, SUPPLEMENTAL);
                        found.setChecked(CHECKED, false);
                    } else
                        found.setChecked(SUPPLEMENTAL, false);
                    break;
                }
                drawCat();
                forcePrimary = false;
            }
        }
    });
    catCanvas.addKeyListener(this);
    new ProposalDropTargetListener(catCanvas, DND.DROP_MOVE | DND.DROP_COPY);

    Composite linkArea = new Composite(catArea, SWT.NONE);
    linkArea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
    GridLayout layout = new GridLayout(2, false);
    layout.marginHeight = 0;
    linkArea.setLayout(layout);

    CLink catLink = new CLink(linkArea, SWT.NONE);
    catLink.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, true, false));
    catLink.setText(Messages.CategorizeDialog_configure);
    catLink.setToolTipText(Messages.CategorizeDialog_configure_tooltip);
    catLink.addListener(new Listener() {

        @Override
        public void handleEvent(Event event) {
            final Shell shell = getShell();
            BusyIndicator.showWhile(shell.getDisplay(), () -> {
                IWorkbenchWindow activeWorkbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
                if (activeWorkbenchWindow != null) {
                    IWorkbenchPage activePage = activeWorkbenchWindow.getActivePage();
                    if (activePage != null) {
                        EditMetaDialog mdialog = new EditMetaDialog(shell, activePage,
                                Core.getCore().getDbManager(), false, null);
                        mdialog.setInitialPage(EditMetaDialog.CATEGORIES);
                        if (catBackup != null)
                            mdialog.setCategories(catBackup);
                        if (mdialog.open() == EditMetaDialog.OK) {
                            categories = mdialog.getCategories();
                            catBackup = null;
                            Node oldRoot = root;
                            constructTree(categories);
                            oldRoot.transferTo(root);
                            drawCat();
                            updateButtons();
                        }
                    }
                }
            });
        }
    });
    acceptLink = new CLink(linkArea, SWT.NONE);
    acceptLink.setLayoutData(new GridData(SWT.END, SWT.CENTER, true, false));
    acceptLink.setText(Messages.CategorizeDialog_accept_proposals);
    acceptLink.setToolTipText(Messages.CategorizeDialog_accept_proposals_tooltip);
    acceptLink.addListener(new Listener() {
        @Override
        public void handleEvent(Event event) {
            root.acceptProposals(root.has(CHECKED));
            drawCat();
            updateButtons();
        }
    });
}