package pbsplugin.fixedTable.veiw;

import com.ulcjava.base.client.UITable;
import com.ulcjava.base.client.UIScrollPane;
import com.ulcjava.base.shared.internal.Anything;
import com.ulcjava.environment.applet.application.ULCAppletPane;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.table.*;
import com.ulcjava.base.application.*;
import com.ulcjava.base.application.table.*;
import com.ulcjava.base.application.util.Color;
import com.ulcjava.base.client.UITable;
import com.ulcjava.base.client.UIScrollPane;
import com.ulcjava.base.application.table.AbstractTableModel;
import com.ulcjava.base.development.DevelopmentRunner;
import com.ulcjava.base.shared.internal.Anything;
import pbsplugin.sortedAndFixedTable.model.SortedTableModel;
import pbsplugin.sortedAndFixedTable.control.SortedAction;


public class MyFixedColumnTableExample extends AbstractApplication {
  public MyFixedColumnTableExample() {
  }
  public void start() {
    FixedTableModel tm=new FixedTableModel();
    ULCFixedColumnsTable fixedTable=new ULCFixedColumnsTable(tm);
    for (int i = 0; i < 3; i++) {
      fixedTable.addFixedColumn(new ULCTableColumn(i, 150));
    }
    for (int i = 3; i < tm.getColumnCount(); i++) {
      fixedTable.addColumn(new ULCTableColumn(i, 150));
    }
    ULCFrame frame = new ULCFrame("Fixed Column Example");
    frame.setSize(new com.ulcjava.base.application.util.Dimension(850,600));

    frame.getContentPane().add(fixedTable);
    frame.setVisible(true);

  }
  private class FixedTableModel extends AbstractTableModel {
        String data[] = {"", "a", "b", "c", "d", "e"};
        String headers[] = {"Row #", "Column 1", "Column 2", "Column 3",
                            "Column 4", "Column 5"};
        public int getColumnCount( ) { return data.length; }
        public int getRowCount( ) { return 1000; }
        public String getColumnName(int col) { return headers[col]; }

        public Object getValueAt(int row, int col) {
          return data[col] + row;
        }

  }

  private class ULCFixedColumnsTable extends ULCScrollPane {
    private ULCTable fRowHeader;
    private ULCTable fContentTable;
    private ITableModel fTableModel;
    public ULCFixedColumnsTable() {
      this(null);
    }

    public ULCFixedColumnsTable(ITableModel model) {
      fContentTable = new ULCTable();
      fContentTable.setAutoResizeMode(ULCTable.AUTO_RESIZE_OFF);
      fContentTable.setAutoCreateColumnsFromModel(false);


      fRowHeader = new ULCTable(null, null, fContentTable.getSelectionModel());
      fRowHeader.setAutoCreateColumnsFromModel(false);
      fRowHeader.setAutoResizeMode(ULCTable.AUTO_RESIZE_OFF);
      if (model != null) {
        fTableModel = model;
        fContentTable.setModel(fTableModel);
        fRowHeader.setModel(fTableModel);
      }
    }

    public void setModel(ITableModel model) {
      fTableModel = model;
      if (fContentTable != null) {
        fContentTable.setModel(fTableModel);
      }
      if (fRowHeader != null) {
        fRowHeader.setModel(fTableModel);
      }
    }


    public void addFixedColumn(ULCTableColumn fixedColumn) {
      fRowHeader.addColumn(fixedColumn);
    }

    public void addColumn(ULCTableColumn unFixedColumn) {
       fContentTable.addColumn(unFixedColumn);
    }

    public void removeFixedColumn(ULCTableColumn fixedColumn) {
       fRowHeader.removeColumn(fixedColumn);
    }

    public ULCTableColumnModel getFixedColumnModel() {
        return fRowHeader.getColumnModel();
    }

    protected void saveState(Anything a) {
      super.saveState(a);
      saveState(a, "rowHeader", fRowHeader);
      saveState(a, "contentTable", fContentTable);
    }

    protected String typeString() {
      return "pbsplugin.fixedTable.veiw.UIFixedColumnsTable";
    }

    public ULCTable getFixedTable() {
       return fRowHeader;
    }

    public ULCTable getUnFixedTable() {
      return fContentTable;
    }


    public ITableModel getTableModel() {
      return fTableModel;
    }


    }


  public static void main(String[] args) {
      DevelopmentRunner.setApplicationClass(MyFixedColumnTableExample.class);
      DevelopmentRunner.run();
  }


}