Class TableCellSWTBase

java.lang.Object
com.biglybt.ui.swt.views.table.impl.TableCellSWTBase
All Implemented Interfaces:
TableCell, TableCellCore, TableCellSWT, Comparable
Direct Known Subclasses:
TableCellPainted

public abstract class TableCellSWTBase extends Object implements TableCellSWT
  • Field Details

    • LOGID

      private static final LogIDs LOGID
    • this_mon

      private static AEMonitor this_mon
    • FLAG_VALID

      protected static final int FLAG_VALID
      Plugins read this to see if their datasource has changed. invalidate() will clear this flag, causing the cell to set its ui again
      See Also:
    • FLAG_SORTVALUEISTEXT

      protected static final int FLAG_SORTVALUEISTEXT
      Indicates if the sort value is also the text displayed. We can optimize.
      See Also:
    • FLAG_TOOLTIPISAUTO

      protected static final int FLAG_TOOLTIPISAUTO
      Indicates if the tooltip is autogenerated
      See Also:
    • FLAG_UPTODATE

      protected static final int FLAG_UPTODATE
      For refreshing, this flag manages whether the row is actually up to date. We don't update any visuals while the row isn't visible. But, validility does get set to true so that the cell isn't forced to refresh every cycle when not visible. (We can't just never call refresh when the row is not visible, as refresh also sets the sort value) When the row does become visible, we have to invalidate the row so that the row will set its visuals again (this time, actually updating a viewable object).
      See Also:
    • FLAG_DISPOSED

      protected static final int FLAG_DISPOSED
      See Also:
    • FLAG_MUSTREFRESH

      protected static final int FLAG_MUSTREFRESH
      Cell has been invalidated, it must refresh on next cycle
      See Also:
    • FLAG_VISUALLY_CHANGED_SINCE_REFRESH

      public static final int FLAG_VISUALLY_CHANGED_SINCE_REFRESH
      If any visuals change between 2 refreshes, this flag gets set
      See Also:
    • DEBUGONLYZERO

      private static final boolean DEBUGONLYZERO
      See Also:
    • DEBUG_FLAGS

      private static final boolean DEBUG_FLAGS
      See Also:
    • flags

      private int flags
    • tableRowSWT

      protected TableRowSWTBase tableRowSWT
    • tableColumnSWT

      protected TableColumnSWTBase tableColumnSWT
    • tableColumnCore

      protected TableColumnCore tableColumnCore
    • tooltipErrLoopCount

      private byte tooltipErrLoopCount
    • bDebug

      public boolean bDebug
    • refreshListeners

      protected ArrayList<TableCellRefreshListener> refreshListeners
    • disposeListeners

      private ArrayList<TableCellDisposeListener> disposeListeners
    • tooltipListeners

      private ArrayList<TableCellToolTipListener> tooltipListeners
    • cellMouseListeners

      private ArrayList<TableCellMouseListener> cellMouseListeners
    • cellMenuListeners

      private ArrayList<TableCellMenuListener> cellMenuListeners
    • cellMouseMoveListeners

      private ArrayList<TableCellMouseMoveListener> cellMouseMoveListeners
    • cellVisibilityListeners

      private ArrayList<TableCellVisibilityListener> cellVisibilityListeners
    • cellSWTPaintListeners

      protected ArrayList<TableCellSWTPaintListener> cellSWTPaintListeners
    • cellClipboardListeners

      private ArrayList<TableCellClipboardListener> cellClipboardListeners
    • sortValue

      protected Comparable sortValue
    • textEquiv

      private String textEquiv
    • numericValue

      private double numericValue
    • restartRefresh

      private byte restartRefresh
    • bInRefreshAsync

      private boolean bInRefreshAsync
    • refreshErrLoopCount

      private byte refreshErrLoopCount
    • loopFactor

      private byte loopFactor
    • MAX_REFRESHES

      protected static int MAX_REFRESHES
    • MAX_REFRESHES_WITHIN_MS

      private static int MAX_REFRESHES_WITHIN_MS
    • bInRefresh

      private boolean bInRefresh
    • lastRefresh

      private long lastRefresh
    • numFastRefreshes

      protected int numFastRefreshes
    • oToolTip

      private Object oToolTip
    • defaultToolTip

      private Object defaultToolTip
    • textAlpha

      private int textAlpha
    • doFillCell

      private boolean doFillCell
    • iCursorID

      private int iCursorID
    • mouseOver

      private boolean mouseOver
    • icon

      private org.eclipse.swt.graphics.Image icon
    • graphic

      private Graphic graphic
    • userData

      private Map<Object,Object> userData
  • Constructor Details

  • Method Details

    • constructionComplete

      protected void constructionComplete()
    • constructionCompleter

      protected abstract void constructionCompleter()
    • addRefreshListener

      public void addRefreshListener(TableCellRefreshListener listener)
      Description copied from interface: TableCell
      Adds a listener that triggers when the TableCell needs refreshing
      Specified by:
      addRefreshListener in interface TableCell
      Parameters:
      listener - Listener Object to be called when refresh is needed.
    • removeRefreshListener

      public void removeRefreshListener(TableCellRefreshListener listener)
      Description copied from interface: TableCell
      Remove a previously added TableCellRefreshListener
      Specified by:
      removeRefreshListener in interface TableCell
      Parameters:
      listener - Previously added listener
    • addDisposeListener

      public void addDisposeListener(TableCellDisposeListener listener)
      Description copied from interface: TableCell
      Adds a listener that triggers when the TableCell has been disposed
      Specified by:
      addDisposeListener in interface TableCell
      Parameters:
      listener - listener object to be called
    • removeDisposeListener

      public void removeDisposeListener(TableCellDisposeListener listener)
      Description copied from interface: TableCell
      Remove a previously added TableCellDisposeListener
      Specified by:
      removeDisposeListener in interface TableCell
      Parameters:
      listener - Previously added listener
    • addToolTipListener

      public void addToolTipListener(TableCellToolTipListener listener)
      Description copied from interface: TableCell
      Adds a listener related to tooltip actions
      Specified by:
      addToolTipListener in interface TableCell
      Parameters:
      listener - listener object to be called
    • removeToolTipListener

      public void removeToolTipListener(TableCellToolTipListener listener)
      Description copied from interface: TableCell
      Remove a previously added TableCellToolTipListener
      Specified by:
      removeToolTipListener in interface TableCell
      Parameters:
      listener - Previously added listener
    • addMouseListener

      public void addMouseListener(TableCellMouseListener listener)
      Description copied from interface: TableCell
      Adds a listener that triggers when a TableCell that belongs to this column has a mouse event.
      Specified by:
      addMouseListener in interface TableCell
      Parameters:
      listener -
    • removeMouseListener

      public void removeMouseListener(TableCellMouseListener listener)
      Description copied from interface: TableCell
      Remove a previously added TableCellMouseListener
      Specified by:
      removeMouseListener in interface TableCell
      Parameters:
      listener - Previously added listener
    • addMenuListener

      public void addMenuListener(TableCellMenuListener listener)
      Specified by:
      addMenuListener in interface TableCell
    • removeMenuListener

      public void removeMenuListener(TableCellMenuListener listener)
      Specified by:
      removeMenuListener in interface TableCell
    • addMouseMoveListener

      public void addMouseMoveListener(TableCellMouseMoveListener listener)
    • removeMouseMoveListener

      public void removeMouseMoveListener(TableCellMouseMoveListener listener)
    • addVisibilityListener

      public void addVisibilityListener(TableCellVisibilityListener listener)
    • removeVisibilityListener

      public void removeVisibilityListener(TableCellVisibilityListener listener)
    • addSWTPaintListener

      private void addSWTPaintListener(TableCellSWTPaintListener listener)
      Parameters:
      listenerObject -
      Since:
      3.1.1.1
    • invokeSWTPaintListeners

      public void invokeSWTPaintListeners(org.eclipse.swt.graphics.GC gc)
    • addCellClipboardListener

      private void addCellClipboardListener(TableCellClipboardListener listener)
    • getClipboardText

      public String getClipboardText()
      Description copied from interface: TableCell
      Returns text that's meant for the clipboard
      Specified by:
      getClipboardText in interface TableCell
    • addListeners

      public void addListeners(Object listenerObject)
      Description copied from interface: TableCell
      A listener is added for every type of cell listener the supplied object implements
      Specified by:
      addListeners in interface TableCell
      Parameters:
      listenerObject - Object implementing some cell listeners
    • invokeToolTipListeners

      public void invokeToolTipListeners(int type)
      Description copied from interface: TableCellCore
      Trigger all the tooltip listeners that have been added to this cell
      Specified by:
      invokeToolTipListeners in interface TableCellCore
      Parameters:
      type - TableCellCore.TOOLTIPLISTENER_HOVER, TableCellCore.TOOLTIPLISTENER_HOVERCOMPLETE
    • invokeMouseListeners

      public void invokeMouseListeners(TableCellMouseEvent event)
      Description copied from interface: TableCellCore
      Trigger all the mouse listeners that have been addded to this cell
      Specified by:
      invokeMouseListeners in interface TableCellCore
      Parameters:
      event - event to trigger
    • invokeMenuListeners

      public void invokeMenuListeners(TableCellMenuEvent event)
      Specified by:
      invokeMenuListeners in interface TableCellCore
    • invokeVisibilityListeners

      public void invokeVisibilityListeners(int visibility, boolean invokeColumnListeners)
      Description copied from interface: TableCellCore
      Trigger all the visibility listeners that have been added to this cell.
      Specified by:
      invokeVisibilityListeners in interface TableCellCore
      Parameters:
      visibility - See TableCellVisibilityListener.VISIBILITY_* constants
    • dispose

      public void dispose()
      Description copied from interface: TableCellCore
      dispose of the cell
      Specified by:
      dispose in interface TableCellCore
    • debug

      public void debug(String s)
    • pluginError

      protected void pluginError(Throwable e)
    • pluginError

      protected void pluginError(String s)
    • refresh

      public boolean refresh()
      Description copied from interface: TableCellCore
      Refresh the cell, including graphic types
      Specified by:
      refresh in interface TableCellCore
    • refresh

      public boolean refresh(boolean bDoGraphics)
      Description copied from interface: TableCellCore
      Refresh the cell
      Specified by:
      refresh in interface TableCellCore
      Parameters:
      bDoGraphics - Whether to update graphic cells
    • refresh

      public boolean refresh(boolean bDoGraphics, boolean bRowVisible)
      Description copied from interface: TableCellCore
      Refresh the cell. This method override takes a bRowVisible parameter in order to reduce the number of calls to TableRow.isVisible() in cases where multiple cells on the same row are being refreshed.
      Specified by:
      refresh in interface TableCellCore
      Parameters:
      bDoGraphics - Whether to update graphic cells
      bRowVisible - Visibility state of row
    • refresh

      public boolean refresh(boolean bDoGraphics, boolean bRowVisible, boolean bCellVisible)
      Description copied from interface: TableCellCore
      Refresh the cell. This method overide takes a bRowVisible paramater and a bCellVisible parameter in order to reduce the number of calls to TableRow.isVisible() and calculations of cell visibility.
      Specified by:
      refresh in interface TableCellCore
      Parameters:
      bDoGraphics - Whether to update graphic cells
      bRowVisible - Assumed visibility state of row
      bCellVisible - Assumed visibility state of the cell
    • setSortValue

      public boolean setSortValue(Comparable valueToSort)
      Description copied from interface: TableCell
      Sets a Comparable object that column sorting will act on. If you never call setSortValue, your column will be sorted by the cell's text.
      Specified by:
      setSortValue in interface TableCell
      Parameters:
      valueToSort - the object that will be used when the column cell's are compared to each other
      Returns:
      True - Sort Value changed.
      False - Sort Value was already set to object supplied.
    • _setSortValue

      private boolean _setSortValue(Comparable valueToSort)
    • setSortValue

      public boolean setSortValue(long valueToSort)
      Description copied from interface: TableCell
      Sets a long value that the column sorting will act on.
      Specified by:
      setSortValue in interface TableCell
      Parameters:
      valueToSort - sorting value.
      Returns:
      True - Sort Value changed.
      False - Sort Value was already set to value supplied.
    • setSortValue

      public boolean setSortValue(float valueToSort)
      Description copied from interface: TableCell
      Sets a float value that the column sorting will act upon.
      Specified by:
      setSortValue in interface TableCell
      Parameters:
      valueToSort - float sort value
      Returns:
      true if sort value changed, or false if sort value already set to value supplied
    • getSortValue

      public Comparable getSortValue()
      Description copied from interface: TableCell
      Retrieves the sorting value
      Specified by:
      getSortValue in interface TableCell
      Returns:
      Object that will be sorted on
    • getTextEquivalent

      public String getTextEquivalent()
      Description copied from interface: TableCell
      For image based cells should return a textual equivalent. This is useful for filtering, for example.
      Specified by:
      getTextEquivalent in interface TableCell
      Returns:
      the text value to be used or null if it should be ignored
    • setTextEquivalent

      public void setTextEquivalent(String str)
      Specified by:
      setTextEquivalent in interface TableCell
    • getNumeric

      public double getNumeric()
      Specified by:
      getNumeric in interface TableCell
      Returns:
      numeric value of the cell or Double.NaN if undefined
    • setNumeric

      public void setNumeric(double d)
      Description copied from interface: TableCell
      Set the numeric value of the cell. This is not used for formating, sort order, display, it is purely to allow the numeric value of a cell be set and retrieved
      Specified by:
      setNumeric in interface TableCell
      Parameters:
      d -
    • isValid

      public boolean isValid()
      Description copied from interface: TableCell
      Validility of the cell's text.
      Specified by:
      isValid in interface TableCell
      Returns:
      True - Text is the same as last call. You do not need to update unless you have new text to display.
      False - Cell-to-Datasource link has changed, and the text is definitely not valid.
    • isDisposed

      public boolean isDisposed()
      Description copied from interface: TableCell
      Retrieve whether the cell has been disposed. This will return true after the TableCellDisposeListener is triggered.
      Specified by:
      isDisposed in interface TableCell
      Returns:
      disposal state
    • hasFlag

      public boolean hasFlag(int flag)
    • setFlag

      public void setFlag(int flag)
    • clearFlag

      public void clearFlag(int flag)
    • invalidate

      public void invalidate()
      If a plugin in trying to invalidate a cell, then clear the sort value too.
      Specified by:
      invalidate in interface TableCell
    • invalidate

      public void invalidate(boolean bMustRefresh)
      Specified by:
      invalidate in interface TableCellCore
    • refreshAsync

      public void refreshAsync()
      Specified by:
      refreshAsync in interface TableCellCore
    • setUpToDate

      public void setUpToDate(boolean upToDate)
      Description copied from interface: TableCellCore
      Sets whether the cell will need updating when it's visible again
      Specified by:
      setUpToDate in interface TableCellCore
      Parameters:
      upToDate -
    • isUpToDate

      public boolean isUpToDate()
      Description copied from interface: TableCellCore
      Returns whether the cell will need updating when it's visible again
      Specified by:
      isUpToDate in interface TableCellCore
      Returns:
    • getVisuallyChangedSinceRefresh

      public boolean getVisuallyChangedSinceRefresh()
      Description copied from interface: TableCellCore
      Returns whether the cell has visually changed since the last refresh call. Could be used to prevent a refresh, or refresh early.
      Specified by:
      getVisuallyChangedSinceRefresh in interface TableCellCore
      Returns:
      visually changed since refresh state
    • clearVisuallyChangedSinceRefresh

      public void clearVisuallyChangedSinceRefresh()
    • compareTo

      public int compareTo(Object o)
      Compare our sortValue to the specified object. Assumes the object is TableCellSWTBase (safe assumption)
      Specified by:
      compareTo in interface Comparable
    • needsPainting

      public boolean needsPainting()
      Description copied from interface: TableCellCore
      Retrieve whether the cell need any paint calls (graphic)
      Specified by:
      needsPainting in interface TableCellCore
      Returns:
      whether the cell needs painting
    • setText

      public boolean setText(StringInterner.StringSupplier textSupplier)
      Specified by:
      setText in interface TableCell
    • setText

      public boolean setText(String text)
      Description copied from interface: TableCell
      This method is called to set the cell's text. Caching is done, so that if same text is used several times, there won't be any 'flickering' effect. Ie the text is only updated if it's different from current value.

      This function must be called from the same thread that the GUI is running under. Listeners like TableCellAddedListener do not always get called on the GUI thread.

      If you wish to set the text and not worry about changing to the GUI thread, use TableCell.invalidate(), and set the text in the TableCellRefreshListener

      Specified by:
      setText in interface TableCell
      Parameters:
      text - the text to be set
      Returns:
      True - the text was updated.
      False - the text was the same and not modified.
    • setToolTip

      public void setToolTip(Object tooltip)
      Description copied from interface: TableCell
      Set the cell's tooltip display.
      Specified by:
      setToolTip in interface TableCell
      Parameters:
      tooltip - Object to display. Currently, only String is supported
      See Also:
    • getToolTip

      public Object getToolTip()
      Description copied from interface: TableCell
      Retrieve the tooltip object assigned to this cell
      Specified by:
      getToolTip in interface TableCell
      Returns:
      tooltip object
      See Also:
    • getDefaultToolTip

      public Object getDefaultToolTip()
      Specified by:
      getDefaultToolTip in interface TableCellCore
    • setDefaultToolTip

      public void setDefaultToolTip(Object tt)
      Description copied from interface: TableCellCore
      Sets tooltip to be shown in absence of an explicit one
      Specified by:
      setDefaultToolTip in interface TableCellCore
    • uiSetText

      public abstract boolean uiSetText(StringInterner.StringSupplier text)
    • doPaint

      public void doPaint(org.eclipse.swt.graphics.GC gc)
      Description copied from interface: TableCellSWT
      Paint the cell (for graphics)
      Specified by:
      doPaint in interface TableCellSWT
      Parameters:
      gc - GC object to be used for painting
    • getTextAlpha

      public int getTextAlpha()
      Specified by:
      getTextAlpha in interface TableCellSWT
      Returns:
    • setTextAlpha

      public void setTextAlpha(int textOpacity)
      Specified by:
      setTextAlpha in interface TableCellSWT
      Parameters:
      textOpacity -
    • getTableRowSWT

      public TableRowSWT getTableRowSWT()
      Specified by:
      getTableRowSWT in interface TableCellSWT
      Returns:
    • getTableRowCore

      public TableRowCore getTableRowCore()
      Description copied from interface: TableCellCore
      Retrieve the row that this cell belongs to
      Specified by:
      getTableRowCore in interface TableCellCore
      Returns:
      the row that this cell belongs to
    • getTableColumnSWT

      public TableColumnSWT getTableColumnSWT()
    • flagToText

      private String flagToText(int flag, boolean onlySet)
    • getWidthRaw

      public abstract int getWidthRaw()
    • setFillCell

      public void setFillCell(boolean doFillCell)
      Description copied from interface: TableCell
      Sets whether the graphic fills the whole cell for TableColumn objects of TYPE_GRAPHIC only. This may effect how often a refresh of the cell is needed, and effects alignment.
      Specified by:
      setFillCell in interface TableCell
      Parameters:
      doFillCell - true - the whole cell is filled by the graphic
    • getFillCell

      public boolean getFillCell()
    • getTableColumnCore

      public TableColumnCore getTableColumnCore()
      Specified by:
      getTableColumnCore in interface TableCellCore
    • setCursorID

      public boolean setCursorID(int cursorID)
      Description copied from interface: TableCellCore
      Set the cursor ID that should be used for the cell
      Specified by:
      setCursorID in interface TableCellCore
      Returns:
      changed
    • getCursorID

      public int getCursorID()
      Description copied from interface: TableCellCore
      Get the cursor ID we are currently using XXX Should NOT be SWT.CURSOR_ constants!
      Specified by:
      getCursorID in interface TableCellCore
      Returns:
    • setMouseOver

      public void setMouseOver(boolean b)
      Specified by:
      setMouseOver in interface TableCellSWT
    • isMouseOver

      public boolean isMouseOver()
      Specified by:
      isMouseOver in interface TableCellCore
    • setIcon

      public boolean setIcon(org.eclipse.swt.graphics.Image img)
      Description copied from interface: TableCellSWT
      Set the cell's icon
      Specified by:
      setIcon in interface TableCellSWT
      Parameters:
      img - Cell's new icon
      Returns:
      true if the icon will be used
    • getIcon

      public org.eclipse.swt.graphics.Image getIcon()
      Specified by:
      getIcon in interface TableCellSWT
      Returns:
    • setGraphic

      public boolean setGraphic(org.eclipse.swt.graphics.Image img)
      Specified by:
      setGraphic in interface TableCellSWT
    • setGraphic

      public boolean setGraphic(Graphic img)
      Description copied from interface: TableCell
      Sets the image to be drawn.

      From 3.0.1.1, setting the graphic to the same Graphic object will not redraw the image. You need to TableCell.invalidate() the cell if you know the image bits have changed (or you could pass a new Graphic object in each time a new image is generated)

      Previously, setting the graphic to the same object resulted in a repaint. Plugins were naughty and would do this on every refresh, causing horrible repaint slowdowns.

      Specified by:
      setGraphic in interface TableCell
      Parameters:
      img - image to be stored invalid input: '&' drawn
      Returns:
      true - image was changed.
      false = image was the same
    • getGraphic

      public Graphic getGraphic()
      Description copied from interface: TableCell
      Retrieve the SWT graphic related to this table item for TableColumn objects of TYPE_GRAPHIC only.
      Specified by:
      getGraphic in interface TableCell
      Returns:
      the Image that is draw in the cell, or null if there is none.
    • getGraphicSWT

      public org.eclipse.swt.graphics.Image getGraphicSWT()
      Specified by:
      getGraphicSWT in interface TableCellSWT
    • isInvisibleAndCanRefresh

      public boolean isInvisibleAndCanRefresh()
    • getBackground

      public int[] getBackground()
      Description copied from interface: TableCell
      Get the background color of the cell
      Specified by:
      getBackground in interface TableCell
      Returns:
      array containing red, green, and blue color. Might be null
    • getForeground

      public int[] getForeground()
      Description copied from interface: TableCell
      Get the foreground color of the cell
      Specified by:
      getForeground in interface TableCell
      Returns:
      array containing red, green, and blue color
    • setForeground

      public boolean setForeground(int red, int green, int blue)
      Description copied from interface: TableCell
      Change the cell's foreground color.

      pass -1 to return color back to default

      Specified by:
      setForeground in interface TableCell
      Parameters:
      red - red value (0 - 255)
      green - green value (0 - 255)
      blue - blue value (0 - 255)
      Returns:
      True - Color changed.
      False - Color was already set.
    • setForeground

      private boolean setForeground(org.eclipse.swt.graphics.RGB rgb)
    • setForeground

      public boolean setForeground(int[] rgb)
      Description copied from interface: TableCell
      Change the cell's foreground color
      Specified by:
      setForeground in interface TableCell
      Parameters:
      rgb - int array containing red, green, and blue values, respectively. null to return color back to default
      Returns:
    • setForegroundToErrorColor

      public boolean setForegroundToErrorColor()
      Description copied from interface: TableCell
      Change the cell's foreground color to the user's defined "error" color.
      Specified by:
      setForegroundToErrorColor in interface TableCell
      Returns:
      True - Color changed.
      False - Color was already set.
    • getMouseOffset

      public int[] getMouseOffset()
      Description copied from interface: TableCell
      Return the position of the mouse relative to the cell.
      Specified by:
      getMouseOffset in interface TableCell
      Returns:
      array of 2 containing x and y position position relative to cell. null if cell doesn't have mouse.
    • getObfuscatedText

      public String getObfuscatedText()
      Description copied from interface: TableCellCore
      Return the text used when generating diagnostics
      Specified by:
      getObfuscatedText in interface TableCellCore
      Returns:
    • useSimpleSortValue

      public boolean useSimpleSortValue()
      Description copied from interface: TableCell
      When true, cell is part of a multi-column sort, and you should set the cell's sort value based solely on your column's data.

      Common scenario:
      User sorts just by your column, you may want to sort by the main value, and subsort by several secondary values. When user sorts by multiple columns (including yours), your secondary values can prevent other sort columns from being applied.

      Example:
      When sorted by itself, the "unopened" column would look better if sorted by last opened date. However, if useSimpleSortValue is not taken into account, and the user sorts by unopened + name, the order would not necessarily change. The end result would be a sort by unopened, last opened, and then 'bytes downloaded'.

      Specified by:
      useSimpleSortValue in interface TableCell
    • getData

      public Object getData(Object key)
      Specified by:
      getData in interface TableCell
    • setData

      public void setData(Object key, Object data)
      Specified by:
      setData in interface TableCell