[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Newsgroup Home]
[news.eclipse.platform.swt] Re: TableEditor Question/Proglem

Thank you very much for the response. By keeping track of the StyledText and TableEditor objects I created and clearing (disposing) of them myself, the problem I reported is corrected. Ofcourse I did expect that the removeAll would remove all including any attached items, maybe that can be an future enhancement...


Veronika Irvine wrote:
When you call Table.removeAll(), it disposes all the TableItems but it does not dispose any of the StyledText widgets created for the TableEditors. The StyledText widgets are created as children of the Table and will only get disposed "for free" when you dispose the Table (or a parent of the Table e.g. on shell closing). Therefore, when you do removeAll() you should also dispose of all the StyledText and TableEditor objects. The Table.clearAll() only has an effect if the Table is created with the style SWT.VIRTUAL and the Table.redraw() is not required and will only cause flashing.

Also, you should add a modify listener to the StyledText widget and probably update the associated TableItem when the text changes.

See the following snippet:
http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet88.java?rev=HEAD&content-type=text/vnd.viewcvs-markup


"Michael Kilgore" <mfkilgore@xxxxxxxxx> wrote in message news:41F15439.9030409@xxxxxxxxxxxx


Okay attached is a small example that has a table with two buttons.  One
button clears and adds data, the other clears.  There are two columns
one standard text one StyledText.  Pressing the clear button should
clear the table and does underneath.  Following a clear click the
horizontal scroll bar to redraw.

I even have a table.redraw() in both places to try and force it...

Thanks for your help.



Steve Northover wrote:

Part 1: Wow. Need a small stand alone snippet that shows then problem.
Just setting the data into the items should redraw it.
Part 2: The selection of the parent table cannot overwrite a child in the
table.


"Michael Kilgore" <mfkilgore@xxxxxxxxx> wrote in message
news:csqt12$inv$1@xxxxxxxxxxxxxxxxxx


I am using StyledText in a TableEditor to display a column of text that
has "fancy" formats in it.  Everything works exactly as I expect until I
need to refdraw the table (clear the old data, draw new).  The table is
redrawn by I do not see the the changes, they are in fact there, until I
hit the scrollbar (any direction) on the table itself.  This causes the
current data to be displayed.

To redraw I am doing the following (tried various combinations):
tableResult.clearAll();
tableResult.removeAll();

// load new data for display

tableResult.redraw();



My second question relates to selection bar.  This is probably the way
it works, given my limited understanding of TableEditor...  I have
selected to have the selection bar extend across the table.  It does not
extend across my StyledText which happens to be the largest column.  The
result looks a bit odd to the user.

I am on Windows, Eclipse 3.1M4

Thanks in advance.






--------------------------------------------------------------------------------



import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyleRange;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.custom.TableEditor;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;

/*
* Created on Jan 21, 2005
*
* TODO To change the template for this generated file go to Window - Preferences - Java - Code
* Style - Code Templates
*/


/**
* @author mfkilgore
*
* TODO To change the template for this generated type comment go to Window - Preferences - Java -
* Code Style - Code Templates
*/
public class TestTableDraw
{


  private Table table;

  protected Shell shell;

  public static void main(String[] args)
  {
      try
      {
          TestTableDraw window = new TestTableDraw();
          window.open();
      }
      catch (Exception e)
      {
          e.printStackTrace();
      }
  }

  public void open()
  {
      final Display display = Display.getDefault();
      createContents();
      shell.layout();
      shell.open();
      while (!shell.isDisposed())
      {
          if (!display.readAndDispatch())
              display.sleep();
      }
  }

  protected void createContents()
  {
      shell = new Shell();
      shell.setLayout(new FormLayout());
      shell.setSize(835, 686);
      shell.setText("SWT Application");

      table = new Table(shell, SWT.BORDER);
      final FormData formData = new FormData();
      formData.bottom = new FormAttachment(0, 565);
      formData.right = new FormAttachment(0, 795);
      formData.top = new FormAttachment(0, 50);
      formData.left = new FormAttachment(0, 15);
      table.setLayoutData(formData);
      table.setLinesVisible(true);
      table.setHeaderVisible(true);

      final TableColumn tableColumn = new TableColumn(table, SWT.NONE);
      tableColumn.setWidth(100);
      tableColumn.setText("New column");

      final TableColumn tableColumn_1 = new TableColumn(table, SWT.NONE);
      tableColumn_1.setWidth(520);
      tableColumn_1.setText("New column");

      final TableColumn tableColumn_2 = new TableColumn(table, SWT.NONE);
      tableColumn_2.setWidth(179);
      tableColumn_2.setText("New column");

      final Button buttonNew = new Button(shell, SWT.NONE);
      buttonNew.addSelectionListener(new SelectionAdapter()
      {
          public void widgetSelected(SelectionEvent e)
          {
              table.removeAll();
              table.clearAll();
              table.redraw();

for (int i = 0; i < 20; ++i)
{
StyledText widget = new StyledText(table, SWT.NONE);
widget.setText("This is a line of the table it is some number of characters long - " + i);


                  StyleRange styleRange = new StyleRange();
                  styleRange.start = 0 + i;
                  styleRange.length = 5;
                  styleRange.fontStyle = SWT.BOLD;
                  widget.setStyleRange(styleRange);

                  TableItem item = new TableItem(table, SWT.NONE);
                  item.setText(0, "fixed");

                  TableEditor editor = new TableEditor(table);
                  editor.grabHorizontal = true;
                  editor.grabVertical = true;
                  editor.setEditor(widget, item, 1);
              }

          }
      });
      final FormData formData_1 = new FormData();
      formData_1.bottom = new FormAttachment(0, 625);
      formData_1.right = new FormAttachment(0, 190);
      formData_1.top = new FormAttachment(0, 585);
      formData_1.left = new FormAttachment(0, 40);
      buttonNew.setLayoutData(formData_1);
      buttonNew.setText("New Data");

      final Button buttonClear = new Button(shell, SWT.NONE);
      buttonClear.addSelectionListener(new SelectionAdapter()
      {
          public void widgetSelected(SelectionEvent e)
          {
              table.removeAll();
              table.clearAll();
              table.redraw();
          }
      });
      final FormData formData_2 = new FormData();
      formData_2.bottom = new FormAttachment(buttonNew, 0, SWT.BOTTOM);
      formData_2.right = new FormAttachment(0, 370);
      formData_2.top = new FormAttachment(buttonNew, 0, SWT.TOP);
      formData_2.left = new FormAttachment(0, 240);
      buttonClear.setLayoutData(formData_2);
      buttonClear.setText("Clear Data");
  }
}