Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 9171917
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 17, 20262026-06-17T16:13:43+00:00 2026-06-17T16:13:43+00:00

I’m facing the problem, that a implemented CheckboxTreeViewer works perfect on Linux Debian, but

  • 0

I’m facing the problem, that a implemented CheckboxTreeViewer works perfect on Linux Debian, but under Windows doesn’t. First of all I don’t understand the concept of “setGrayed()”.. Is it to show, that only part of the children from a element are selected?

So the problem: When I check an item under Windows, it checks all other elements in the tree. Somehow the whole logic is ignored.

Here is my code from ICheckStateListener:

@Override
public void checkStateChanged(final CheckStateChangedEvent event) {
    // object checked
    final TreePath path = ((ITreeSelection) this.treeViewer.getSelection()).getPaths()[0];
    checkChildren(path, event.getChecked());
    checkParents(path.getParentPath());
    syncData();
}

public void checkParents(final TreePath path) {
    if (path == null) {
        return;
    }
    final IFieldElement<Object> treeElement = (IFieldElement<Object>) path.getLastSegment();
    if (treeElement != null) {
        boolean allChecked = true;
        boolean allUnchecked = true;
        for (final Object fieldElement : treeElement.getChildrenElements()) {
            allChecked = allChecked && this.treeViewer.getChecked(fieldElement);
            allUnchecked = allUnchecked && !this.treeViewer.getChecked(fieldElement);
        }
        if (allUnchecked) {
            this.treeViewer.setChecked(treeElement, false);
            this.treeViewer.setGrayed(treeElement, false);
        } else
        if (allChecked) {
            this.treeViewer.setChecked(treeElement, true);
            this.treeViewer.setGrayed(treeElement, false);
        } else
        if (!allUnchecked && !allChecked) {
            this.treeViewer.setChecked(treeElement, true);
            this.treeViewer.setGrayed(treeElement, true);
        }
    }
    checkParents(path.getParentPath());
}

public void checkChildren(final TreePath path, final boolean checked) {
    if (path == null) {
        return;
    }
    final Object element = path.getLastSegment();
    if (element != null) {
        this.treeViewer.setChecked(element, checked);
        this.treeViewer.setGrayed(element, false);
        this.treeViewer.setSubtreeChecked(element, checked);
        if (element instanceof EventMethod) {
            checkEventMethod(path, element, checked);
        }

    }
}

EDIT: I’m using Eclipse Indigo

Thanks in advance!

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-17T16:13:43+00:00Added an answer on June 17, 2026 at 4:13 pm

    The “grayed” state of a checkbox in a tree is just another state, in addition to checked and unchecked. How you use it is up to you, but generally it means a “partial checked” state. In common practice if an item has some children checked and others unchecked, the parent will show a checked+grayed state. How exactly this is rendered depends on the OS and its version. In some implementations a user can only check or uncheck a tree item, and cannot explicitly set grayed state on an item through mouse clicks. It happens automatically depending on the checked children. Sometimes however there are applications that also allow you to click on the checkbox to make it checked to grayed to unchecked. A grayed state in such cases often means “default” state. Anyhow this is implementation dependent.

    I am not exactly sure what the problem is that you are facing but if I have to guess I will say that widgets are behaving differently in Debian vs Windows when it comes throwing events. Since in your implementation whenever an item is checked, you check all its parents and also all its children, so it could be that calling treeViewer.setChecked() on parents in Windows starts throwing events also and your listener gets called that checks all the children of all the parents hence everything gets enabled. Test it out and see if this is the problem. To avoid this create a flag that you set when you first receive an event before modifying anything. And while modifying ignore all checkStateChanged() event calls as long as that flag is set so that your change to an element is not recursively applied to the entire tree. Once your operation is complete for one item checked/unchecked action reset the flag so user events can be handled again.

    private boolean ignoreCheckEvent = false;
    
    @Override
    public void checkStateChanged(final CheckStateChangedEvent event) {
        if (ignoreCheckEvent)
            return;
    
        ignoreCheckEvent = true;
    
        try {
            // object checked
            final TreePath path = ((ITreeSelection) this.treeViewer.getSelection()).getPaths()[0];
            checkChildren(path, event.getChecked());
            checkParents(path.getParentPath());
            syncData();
        }
        finally {
            ignoreCheckEvent = false;
        }
    }
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have a French site that I want to parse, but am running into
I'm parsing an RSS feed that has an &#8217; in it. SimpleXML turns this
link Im having trouble converting the html entites into html characters, (&# 8217;) i
That's pretty much it. I'm using Nokogiri to scrape a web page what has
I want to count how many characters a certain string has in PHP, but
I've got a string that has curly quotes in it. I'd like to replace
I have a small JavaScript validation script that validates inputs based on Regex. I
I am doing a simple coin flipping experiment for class that involves flipping a
We're building an app, our first using Rails 3, and we're having to build
This could be a duplicate question, but I have no idea what search terms

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.