protected Section createContents()

in CasViewerEclipsePlugin/uimaj-ep-casviewer-core/src/main/java/org/apache/uima/casviewer/ui/internal/style/DefaultColorTreeSectionPart.java [220:467]


    protected Section createContents () 
    {
        FormToolkit toolkit = managedForm.getToolkit();
        Section section = getSection();
        section.addControlListener(new ControlAdapter() {
            public void controlResized(ControlEvent e) {
                // section.layout(true);
                managedForm.reflow(true);
            }
        });
        // Expand | Collapse
        section.addExpansionListener(new ExpansionAdapter() {
            public void expansionStateChanged(ExpansionEvent e) {
                // System.out.println("form.reflow");
                // managedForm.getForm().layout(true);
                // Point pt = __parent.getSize();
                // System.err.println("parent x: " + pt.x + " ; parent y: " + pt.y);
                //  pt = getSection().getSize();
                // System.err.println(" Section  x: " + pt.x + " ; y: " + pt.y);
//                if ( e.getState() ) {
//                    // Expand
//                    TableWrapData td = (TableWrapData) section.getLayoutData();
//                    td.maxHeight = 400;
//                }
//                __parent.layout(true);
                
//                ((Composite) getSection().getClient()).layout(true);
//                if (tree == null) {
//                    tree.layout(true);
//                }
//                __managedForm.getForm().layout(true);
                managedForm.reflow(true);
                // pt = getSection().getSize();
                // System.err.println(" Section  x: " + pt.x + " ; y: " + pt.y);
            }
        });        
        section.setExpanded(false);
        
        ///////////////////////////////////////////////////////////////////////
        
        // Create ToolBar
//        Composite sectionToolbarComposite = FormSection.createGridLayoutContainer (toolkit, section,
//                4, 0, 0);
//        section.setTextClient(sectionToolbarComposite);
        
        ///////////////////////////////////////////////////////////////////////
        
        // toolkit.createCompositeSeparator(section);
        
        // Create Composite
        Composite client = FormSection.createGridLayoutContainer (toolkit, section,
                1, 10, 10);        
        GridData gd = new GridData(GridData.FILL_BOTH|GridData.VERTICAL_ALIGN_BEGINNING);
        gd.grabExcessVerticalSpace   = true;
        gd.grabExcessHorizontalSpace = true;
        client.setLayoutData(gd);
        
        toolkit.paintBordersFor(client);        
        section.setClient(client);   
        
        /*********************************************************************/        
        
        // Create Tree for Type System
        tree = toolkit.createTree(client, SWT.FULL_SELECTION);
        // final TableTree tree = new TableTree (client, SWT.NULL);
        gd = new GridData(GridData.FILL_BOTH|GridData.VERTICAL_ALIGN_BEGINNING);
        gd.grabExcessVerticalSpace   = true;
        gd.grabExcessHorizontalSpace = true;
        gd.heightHint = 160;
        tree.setLayoutData(gd);
        // tree.setVisible(false);
        tree.addSelectionListener(this);
//        tree.addListener (SWT.Selection, new Listener () {
//            public void handleEvent (Event event) {
//                String string = event.detail == SWT.CHECK ? "Checked" : "Selected";
//                System.out.println (tree.getSelection()[0] + " " + string);
//                if ( ! ((TreeItem)event.item).getGrayed() ) {
//                    ((TreeItem)event.item).setGrayed(true);
//                }
//                event.doit = false;
//                ((TreeItem)event.item).setChecked(false);
//            }
//        });
        /*
         * NOTE: MeasureItem, PaintItem and EraseItem are called repeatedly.
         * Therefore, it is critical for performance that these methods be
         * as efficient as possible.
         */
/*
        tree.addListener(SWT.EraseItem, new Listener() {
            public void handleEvent(Event event) {          
                if ((event.detail & SWT.SELECTED) != 0) {
                    GC gc = event.gc;
                    Rectangle area = tree.getClientArea();
                    
                     * If you wish to paint the selection beyond the end of
                     * last column, you must change the clipping region.
                     
                    int columnCount = tree.getColumnCount();
                    if (event.index == columnCount - 1 || columnCount == 0) {
                        int width = area.x + area.width - event.x;
                        if (width > 0) {
                            Region region = new Region();
                            gc.getClipping(region);
                            region.add(event.x, event.y, width, event.height); 
                            gc.setClipping(region);
                            region.dispose();
                        }
                    }
                    gc.setAdvanced(true);
                    if (gc.getAdvanced()) gc.setAlpha(127);                             
                    Rectangle rect = event.getBounds();
                    Color foreground = gc.getForeground();
                    Color background = gc.getBackground();
                    gc.setForeground(tree.getDisplay().getSystemColor(SWT.COLOR_RED));
                    // gc.setBackground(tree.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
                    gc.drawRectangle(rect);
                    // gc.fillGradientRectangle(0, rect.y, 500, rect.height, false);
                    // restore colors for subsequent drawing
                    gc.setForeground(foreground);
                    // gc.setBackground(background);
                    event.detail &= ~SWT.SELECTED;                  
                }                       
            }
        });     
        
*/        
        tree.addListener (SWT.MouseUp, new Listener () {
            public void handleEvent (Event event) {
                Point point = new Point (event.x, event.y);
                // System.out.println("Click at x=" + event.x + " y=" + event.y);
                currentSelectedTreeItem = tree.getItem (point);
                if (currentSelectedTreeItem != null) {
                    // Find what column is clicked
                    TreeColumn[] columns = tree.getColumns();
                    int x = 0; 
                    int w = 0;
                    int i = 0;
                    currentSelectedColumn = 0;
                    for (i=0; i<columns.length; ++i) {
                        w = columns[i].getWidth();
                        if (x < event.x && event.x < (x+w)) {
                            // System.out.println("Found column:" + i);
                            currentSelectedColumn = i;
                            break;
                        }
                        x += w;
                    }
                    // System.out.println ("Mouse up at column " + i + " of " + currentSelectedTreeItem.getText());
                }
            }
        });

/*
        
    table.addListener (SWT.MouseDown, new Listener () {
        public void handleEvent (Event event) {
            Rectangle clientArea = table.getClientArea ();
            Point pt = new Point (event.x, event.y);
            int index = table.getTopIndex ();
            while (index < table.getItemCount ()) {
                boolean visible = false;
                TableItem item = table.getItem (index);
                for (int i=0; i < columnCount; i++) {
                    Rectangle rect = item.getBounds (i);
                    if (rect.contains (pt)) {
                        System.out.println ("Item " + index + "-" + i);
                    }
                    if (!visible && rect.intersects (clientArea)) {
                        visible = true;
                    }
                }
                if (!visible) return;
                index++;
            }
        }
    });
        
*/        
        // Create Viewer for Tree
        treeViewer = new TreeViewer(tree);
        treeViewer.setUseHashlookup(true);
        treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
            public void selectionChanged(SelectionChangedEvent event) {
                // Trace.trace();
                if (_fireTreeSelection) {
                    setSelectedTreeNode (event);
                    managedForm.fireSelectionChanged(_instance, event.getSelection());
                }
            }
        });
        
        // For Table Tree Viewer
        tree.setLinesVisible(true);
        tree.setHeaderVisible(true);
        String headers[] = { "RGB Values", "", "FG", "", "BG", "Selected", "Hidden" };
        final TreeColumn columns[] = new TreeColumn[headers.length];
        for (int i = 0; i < headers.length; i++) {
             TreeColumn tc = new TreeColumn(tree, SWT.NONE, i);
            tc.setResizable(true);
            tc.setText(headers[i]);
            if (i==0) {
                tc.setWidth(250);
            } else if (i==1 || i==3) {
                tc.setWidth(4);
            } else if (i==2 || i==4) {
                tc.setWidth(40);
            } else {
                tc.setWidth(60);
            }
            columns[i] = tc;
        }
        // tree.pack(true);
        
        contentProvider = new ColoredTypeTreeContentProvider(false);
        treeViewer.setContentProvider(contentProvider);
        treeViewer.setLabelProvider(new DefaultColorTreeLabelProvider(treeViewer, false));                      
//        _typeTreeViewer.addFilter(_typeTreeViewerFiler = new TypeSystemViewerFilter());
        treeViewer.setSorter(new ViewerSorter());
        
//        TypeSystemToolTips treeListener = new TypeSystemToolTips (tree);
//        tree.addListener (SWT.Dispose, treeListener);
//        tree.addListener (SWT.KeyDown, treeListener);
//        tree.addListener (SWT.MouseMove, treeListener);
//        tree.addListener (SWT.MouseHover, treeListener);
        
        // createSectionToolbar (toolkit, section, sectionToolbarComposite, treeViewer);
        
        /*********************************************************************/
//        DnDTreeViewer dnd = new DnDTreeViewer (this);
//        dnd.initDragAndDrop (_typeTreeViewer);
        
        /*********************************************************************/
        /*                      Set Selection Provider                       */
        /*********************************************************************/
/*        if (__workbenchPartSite != null) {
            __workbenchPartSite.setSelectionProvider(_typeTreeViewer);
        }
*/        
        createContextMenu(treeViewer.getControl());
        section.setExpanded(true);
        
        if (inputObject != null) {
            setInput (inputObject, "???");
        }
        // Trace.trace();
        return section;
    } // createContents