All Downloads are FREE. Search and download functionalities are using the official Maven repository.

at.spardat.xma.mdl.table.TableWMClient Maven / Gradle / Ivy

The newest version!
/*******************************************************************************
 * Copyright (c) 2003, 2007 s IT Solutions AT Spardat GmbH .
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     s IT Solutions AT Spardat GmbH - initial API and implementation
 *******************************************************************************/

// @(#) $Id: TableWMClient.java 9890 2012-09-04 13:30:14Z hoenninger $
package at.spardat.xma.mdl.table;

import org.eclipse.swt.widgets.TableItem;

import at.spardat.enterprise.fmt.IFmt;
import at.spardat.xma.mdl.ModelChangeEvent;
import at.spardat.xma.mdl.NewModelEvent;
import at.spardat.xma.mdl.Notification;
import at.spardat.xma.mdl.UIDelegateClient;
import at.spardat.xma.mdl.UIDelegateFactoryClient;
import at.spardat.xma.mdl.WModel;
import at.spardat.xma.mdl.list.ListWMClient;
import at.spardat.xma.mdl.table.TableUIDelegateClient.RowComparator;
import at.spardat.xma.page.Page;
import at.spardat.xma.page.PageClient;

/**
 * The implementation of a TableWM widget model implementation at the client
 * side.
 *
 * @author YSD, 27.04.2003 16:19:23
 */
public class TableWMClient extends TableWM implements ITableWMClient {

    /**
     * Specifies column information.
     */
    protected XMATableColumn []                 columns_;

    private TableUIDelegateClient               ui_;

    TableWM2UIListenerClient                    wm2UIlistener_;

    private PageClient                         pageClient_;

    /**
     * An optionally attached Formatter.
     */
    private IFmt                            fmt_;

    /**
     * Constructor. Dont forget to call setFormatter if the table
     * does not merley contain Strings.
     *
     * @param id uniquely identifies the model within its page
     * @param pm the enclosing page model this widget model belongs to.
     * @param columnCount the number of columns this table has
     * @param style bit or combination of the style constants S_* of this class and its superclass.
     */
    public TableWMClient (short id, Page pm, int columnCount, int style) {
        super (id, pm, columnCount, style);
        columns_ = new XMATableColumn[columnCount];
        for (int i=0; icolumnIndex.
     *
     * @param columnIndex the zero based index of the column
     * @param formatter the IFmt object determining the string layout of a column cell.
     * @exception ArrayIndexOutOfBoundsException if columnIndex not valid.
     */
    public void setFormatter (int columnIndex, IFmt formatter) {
        columns_[columnIndex].setFormatter (formatter);
    }

    /**
     * Sets the property if the column at index columnIndex may be sorted
     * by the user or not. If this method is not called for a particular column,
     * the value defaults to true.
     *
     * @param columnIndex the zero based index of the column
     * @param what false if sorting of the column should be supressed, true otherwise.
     */
    public void setSortable (int columnIndex, boolean what) {
        columns_[columnIndex].setSortable (what);
    }

    /**
     * Returns true if the column at index columnIndex may be sorted.
     */
    public boolean isSortable (int columnIndex) {
        return columns_[columnIndex].isSortable();
    }

    /**
     * Sorts the table contents on the UI using a particular column as sort order column. Note
     * that this method does not sort the widget model. The model stays completely unchanged.
     * It merely changes the permutation of rows on the UI. If you are working with zero based
     * indexes on the table model, this indexes may no longer correspond with the rows rank you
     * see in the UI table. E.g., selecting the first row in the table model will not select
     * the first row in the UI table.

* * The table won't be sorted if any of the following is true: *

    *
  • The UI is not created yet. *
  • The provided column is not sortable. *
  • The cells in the provided column are not all of the same type. *
      * * The sort algorithm is stable. Therefore sorting along columns c1 and c2 * in succession result in a sort order where rows are primarely sorted along c2. * Within rows with the same c2 value, sort order is defined by c1. * * @param columnIndex the index of the column to be sorted. */ public void sort (int columnIndex) { if (columnIndex < 0 || columnIndex >= columnCount_) throw new IllegalArgumentException(); ui_.sort(columnIndex); } /** * Returns the formatter set for the column at index columnIndex or null * if none has been set. */ public IFmt getFormatter (int columnIndex) { return columns_[columnIndex].getFormatter(); } /** * Sets the property whether the column at index columnIndex is * visible or not. This property defaults to true, i.e., if this * method is never called, the column is visible on the UI. * * @param columnIndex zero based index of the column * @param what true indicates that the column should be visible. */ public void setVisible (int columnIndex, boolean what) { columns_[columnIndex].setVisible(what); } /** * Returns the visibility state of a particular column. * * @param columnIndex zero based index of the column * @return true if visible, false otherwise */ public boolean isVisible (int columnIndex) { return columns_[columnIndex].isVisible(); } /** * @see at.spardat.xma.mdl.IWModelClient#getUIDelegate() */ public UIDelegateClient getUIDelegate() { return ui_; } /** * @see at.spardat.xma.mdl.WModel#handle(at.spardat.xma.mdl.ModelChangeEvent) */ public boolean handle (ModelChangeEvent event) { boolean success = super.handle(event); if (success && !event.isFromUI()) { // notify the UIDelegate of the modification ui_.handleModelChangeEvent(event); } return success; } /** * Returns the column at the provided zero based index. * * @param i zero based index indentifying a column * @return a TableColumn object describing the column * @exception ArrayIndexOutOfBounds if i greater equal getColumnCount or * less than zero. */ public XMATableColumn getColumn (int i) { return columns_[i]; } /** * @see at.spardat.xma.mdl.table.ITableWMClient#selectByUIIndex(int) */ public void selectByUIIndex (int index) { if (index < 0 || index >= size()) return; if (ui_ == null) return; int modelIndex = ui_.swtIndex2ModelIndex(index); if (modelIndex >= 0 && modelIndex < size()) selectByModelIndex(modelIndex); } /** * @see at.spardat.xma.mdl.IWModelClient#isEditable() */ public boolean isEditable() { return ui_.isEditable(); } /** * @see at.spardat.xma.mdl.IWModelClient#isEnabled() */ public boolean isEnabled() { return ui_.isEnabled(); } /** * @see at.spardat.xma.mdl.IWModelClient#setEditable(boolean) */ public void setEditable(boolean what) { ui_.setEditable(what); } /** * @see at.spardat.xma.mdl.IWModelClient#setEnabled(boolean) */ public void setEnabled(boolean what) { ui_.setEnabled(what); } /** * @see at.spardat.xma.mdl.table.ITableWMClient#sortNatural() */ public void sortNatural() { ui_.sortNatural(); } /** * @see at.spardat.xma.mdl.table.ITableWMClient#getSortingColumn() * @since version_number * @author S3460 */ public int getSortingColumn(){ return ui_.getSortingColumn(); } /** * @see at.spardat.xma.mdl.table.ITableWMClient#isSortingColumnAscending() * @since version_number * @author S3460 */ public boolean isSortingColumnAscending(){ return ui_.isSortingColumnAscending(); } /** * @see at.spardat.xma.mdl.table.ITableWMClient#hasSortIndicator() */ public boolean hasSortIndicator() { return ui_.hasSortIndicator(); } /** * @see at.spardat.xma.mdl.table.ITableWMClient#setSortIndicator(boolean) */ public void setSortIndicator(boolean showSortIndicator) { ui_.setSortIndicator(showSortIndicator); } /** * @see at.spardat.xma.mdl.table.ITableWMClient#setExternalSorter(TableExternalSorterClient) */ public void setExternalSorter(TableExternalSorterClient externalSorter) { ui_.setExternalSorter(externalSorter); } /** * @see at.spardat.xma.mdl.table.ITableWMClient#setRowComparator(RowComparator rowComparator) */ public void setRowComparator(RowComparator rowComparator) { ui_.setRowComparator(rowComparator); } /** * Returns the model's TableRow to the given TableItem. It returns the XMA TableRow * that corresponds to the tree item of the underlying UI library. In the case of SWT, * the argument must be an instance of class TableItem.

      * * @param uiTableItem SWT-TableItem if SWT is the UI-library you are using. Must not be null. * The SWT-TableItem must not be disposed. * @return TableRow for the given TableItem */ public static TableRow getTableRowFor (Object uiTableItem) { if (uiTableItem == null) throw new IllegalArgumentException (); return TableUIDelegateClient.row2Item((TableItem)uiTableItem); } /** * Sets a TableWM2UIListenerClient which is called for every model cell to TableItem event. * @param listener * @see ITableWMClient#setTableWM2UIListener(TableWM2UIListenerClient) * @since 2.0.4 * @author s3460 */ public void setTableWM2UIListener(TableWM2UIListenerClient listener) { wm2UIlistener_ = listener; } /** * Converts a model column index to its corresponding UI index. * @since 2.1.1 */ public int modelColumnIndexToUIColumnIndex(int index) { return ui_.modelColumnIndex2SwtColumnIndex(index); } /** * Converts a UI column index to its corresponding model column index. * @since 2.2.0 */ public int uiColumnIndexToModelColumnIndex(int uiIndex) { return ui_.swtColumnIndex2modelColumnIndex(uiIndex); } /** * Converts a model row index to its corresponding UI index. * @since 2.2.0 */ public int modelIndexToUIIndex(int modelIndex) { return ui_.modelIndex2SwtIndex(modelIndex); } /** * Converts a UI row index to its corresponding model row index. * @since 2.2.0 */ public int uiIndex2ModelIndex(int uiIndex) { return ui_.swtIndex2ModelIndex(uiIndex); } /** * Event class used to notify the dynamic registration of a new TableWMClient. * @author gub * @since 2.1.0 * @see Page#addWModel(WModel) */ public static class NewTableWMClientEvent extends NewTableWMEvent { /** empty constructor for deserialization */ public NewTableWMClientEvent() {} /** * constructor which initializes the modelType * @param columnCount number of columns this table has * @param style bit or combination of the style constants S_*. */ public NewTableWMClientEvent(int columnCount, int style, byte[] columnTypes) { super(columnCount,style,columnTypes); } // see at.spardat.xma.mdl.NewModelEvent.createModel() public WModel createModel(short id,Page page) { return new TableWMClient(id,page,columns,style); } } // see at.sparda.xma.mdl.WModel.createNewModelEvent() public NewModelEvent createNewModelEvent() { int style = S_NULL; if(isMultiSelect()) style|=S_MULTI_SELECT; if(isOneWay()) style|=S_ONE_WAY; return new NewTableWMClientEvent(getColumnCount(),style,columnTypes); } /** * @see at.spardat.xma.mdl.table.TableWMClient#isMandatory() */ public boolean isMandatory () { return fmt_.isMandatory(); } /** * @see at.spardat.xma.mdl.table.TableWMClient#setMandatory(boolean) */ public void setMandatory (boolean what) { boolean changed = (what != fmt_.isMandatory()); fmt_.setMandatory(what); if (changed) ui_.updateErrorState(); } /** * Returns the PageClient this WidgetModelC belongs to. * * @return PageClient, never null. */ public PageClient getPageModelC () { return pageClient_; } /* * @see at.spardat.xma.mdl.list.ITableWMClient#getFmt() */ public IFmt getFmt() { return fmt_; } /* * @see at.spardat.xma.mdl.list.ITableWMClient#setFmt(at.spardat.enterprise.fmt.IFmt) */ public void setFmt (IFmt formatter) { fmt_ = formatter; handle (new FormatterChangedEvent()); } /** * Indicates that the formatter has been changed programmatically */ class FormatterChangedEvent extends Notification { public FormatterChangedEvent () { super (TableWMClient.this, false); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy