Hi Peter, 

the fastest way to solve your problem is to use core CSS. But the table does 
not really support you with that capability, so at the beginning we have to 
extend the table row renderer:

qx.Class.define("RowRenderer",
{
  extend : qx.ui.table.rowrenderer.Default,
  
  members : 
  {
    getRowClass : function(rowInfo) {
      return rowInfo.selected ? "qx-table-row selected" : "qx-table-row";
    },
    
    updateDataRowElement : function(rowInfo, rowElem)
    {
      this.base(arguments, rowInfo, rowElem);
      
      if (rowInfo.selected) {
        qx.bom.element.Class.addClasses(rowElem, ["selected"]);
      }
      
      else {
        qx.bom.element.Class.removeClasses(rowElem, ["selected"]);
      }
    }
  }
});

Then we need a custom cell renderer which includes a ordinary div as a 
placeholder for the image. Furthermore the renderer instance creates new style 
rules, which sets default values. If the "selected" class of the row was added, 
it will just change background to red:

qx.Class.define("CellRenderer",
{
  extend : qx.ui.table.cellrenderer.Default,
  
  construct : function()
  {
    this.base(arguments);
     
    qx.ui.style.Stylesheet.getInstance().addRule(".qx-table-row .qx-cell-icon", 
"width:16px;height:16px;background: transparent no-repeat 
url(resource/qx/icon/Tango/16/apps/office-calendar.png);");
    qx.ui.style.Stylesheet.getInstance().addRule(".qx-table-row.selected 
.qx-cell-icon", "background: red no-repeat 
url(resource/qx/icon/Tango/16/apps/office-calendar.png);");
  },

  /*
  *****************************************************************************
     MEMBERS
  *****************************************************************************
  */

  members :
  {
    // overridden
    _getContentHtml : function(cellInfo) {
      return "<div class='qx-cell-icon'></div>";
    }
  }
});

Don't forget to set row renderer after creation on the table:

var table = new qx.ui.table.Table(tableModel);

table.setDataRowRenderer(new RowRenderer());

Here is the complete playground example:

http://tinyurl.com/kvtjtbh

If you find that solution useful, feel free to open an enhancement bug, to 
suggest us to implement the row css class logic inside the framework.

Gruß
Mustafa Sak

Applications & Integration

1&1 Internet AG
Ernst-Frey-Straße 10
DE-76135 Karlsruhe

-----Ursprüngliche Nachricht-----
Von: Peter Schneider [mailto:p.schnei...@tis-gmbh.de] 
Gesendet: Donnerstag, 27. März 2014 10:46
An: qooxdoo Development
Betreff: [qooxdoo-devel] Update Table Cell Content

Hi there,

I am currently facing a 'theming' problem:

I have a Table containing one column which displays Symbols 
(qx.ui.table.cellrenderer.Image derived).

These Symbols are 'dark' and when one selects a row in the table, the 'dark'
background color ("table-row-background-selected") makes it hard to see.
Which can be seen at 1st attached image.
The 2nd attached image shows what it *should* look like.


So my question is: How to 'theme' or program an Image CellRenderer that can 
react on 'select'?


The "dirty" approach is something like this:

// ------------------------------------------------------------------
<code>
// ------------------------------------------------------------------
qx.Class.define("app.ui.table.cellrenderer.FooIconRenderer",
{
  extend : qx.ui.table.cellrenderer.Image,

  members :
  {
    _identifyImage : function (cellInfo)
    {
      var imageHints = {
        imageWidth : 11,
        imageHeight: 11,
        url        : this.__valueToUrl(cellInfo.value) // {String|null}
      };

      // URL set to something like "app/icon-3" or <null>...
      if (imageHints.url) {
        if (cellInfo.selected) {
          imageHints.url += "-invert"; // inverted icon (light toned)
        }
        imageHints.url += ".png";
        imageHints.tooltip = this.__valueToTip(cellInfo.value);
      }
      return imageHints;
    }
  }
});
// ------------------------------------------------------------------
</code>
// ------------------------------------------------------------------

Which *only* *works* if the Table, that makes use of this cell renderer has set 
the 'alwaysUpdateCells' flag to <true>! But this slows down the update of the 
table, which is _not_really_ an option!


So, is there any theming that I can do? i could only find selection handling 
for row-renderer. And the stylesheet of tables seems to be way different than 
'regular' Widget styling :(



Regards,
  Peter


-- 


** Unsere Veranstaltungen: 

T-Matik in Greven, 20.05.2014
Post-Expo in Stockholm, Halle A - Stand A10.05, 23.-25.09.2014 TIS-Hausmesse in 
Bocholt, 16.10.2014 transfairlog in Hamburg, 04.-06.11.2014

------------------------------------------------------------------------------
_______________________________________________
qooxdoo-devel mailing list
qooxdoo-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel

Reply via email to