File indexing completed on 2023-03-17 11:01:31
0001
0002 #include <cassert>
0003 #include "TGClient.h"
0004 #include "Fireworks/Core/interface/FWTriggerTableViewTableManager.h"
0005 #include "Fireworks/Core/interface/FWTriggerTableView.h"
0006 #include "Fireworks/Core/interface/FWColorManager.h"
0007 #include "Fireworks/TableWidget/interface/FWTableWidget.h"
0008
0009 FWTriggerTableViewTableManager::FWTriggerTableViewTableManager(const FWTriggerTableView* view)
0010 : m_view(view), m_graphicsContext(nullptr), m_renderer(nullptr) {
0011 GCValues_t gc = *(m_view->m_tableWidget->GetWhiteGC().GetAttributes());
0012 m_graphicsContext = gClient->GetResourcePool()->GetGCPool()->GetGC(&gc, kTRUE);
0013 m_renderer = new FWTextTableCellRenderer(m_graphicsContext, m_graphicsContext);
0014 }
0015
0016 FWTriggerTableViewTableManager::~FWTriggerTableViewTableManager() { delete m_renderer; }
0017
0018 int FWTriggerTableViewTableManager::numberOfRows() const {
0019 if (!m_view->m_columns.empty())
0020 return m_view->m_columns.front().values.size();
0021 else
0022 return 0;
0023 }
0024
0025 int FWTriggerTableViewTableManager::numberOfColumns() const { return m_view->m_columns.size(); }
0026
0027 std::vector<std::string> FWTriggerTableViewTableManager::getTitles() const {
0028 unsigned int n = numberOfColumns();
0029 std::vector<std::string> ret;
0030 ret.reserve(n);
0031 for (unsigned int i = 0; i < n; ++i) {
0032 ret.push_back(m_view->m_columns.at(i).title);
0033 }
0034 return ret;
0035 }
0036
0037 int FWTriggerTableViewTableManager::unsortedRowNumber(int iSortedRowNumber) const {
0038 if (iSortedRowNumber >= (int)m_sortedToUnsortedIndices.size())
0039 return 0;
0040 return m_sortedToUnsortedIndices[iSortedRowNumber];
0041 }
0042
0043 FWTableCellRendererBase* FWTriggerTableViewTableManager::cellRenderer(int iSortedRowNumber, int iCol) const {
0044 const int realRowNumber = unsortedRowNumber(iSortedRowNumber);
0045 const int acceptColumn = 1;
0046 if (!m_view->m_columns.empty() && int(m_view->m_columns.size()) > iCol &&
0047 int(m_view->m_columns.front().values.size()) > realRowNumber) {
0048 bool accepted = std::string(m_view->m_columns.at(acceptColumn).values.at(realRowNumber)) == "1";
0049 if ((m_view->backgroundColor() == kBlack) == accepted)
0050 m_graphicsContext->SetForeground(0xe0e0e0);
0051 else
0052 m_graphicsContext->SetForeground(0x404040);
0053 m_renderer->setData(m_view->m_columns.at(iCol).values.at(realRowNumber), false);
0054 } else {
0055 m_renderer->setData("invalid", false);
0056 }
0057 return m_renderer;
0058 }
0059
0060 void FWTriggerTableViewTableManager::dataChanged() {
0061 m_sortedToUnsortedIndices.clear();
0062 for (int i = 0; i < numberOfRows(); ++i)
0063 m_sortedToUnsortedIndices.push_back(i);
0064 FWTableManagerBase::dataChanged();
0065 }
0066
0067 namespace {
0068 template <typename TMap>
0069 void doSort(int col,
0070 const std::vector<FWTriggerTableView::Column>& iData,
0071 TMap& iOrdered,
0072 std::vector<int>& oRowToIndex) {
0073 unsigned int index = 0;
0074 for (std::vector<std::string>::const_iterator it = iData.at(col).values.begin(), itEnd = iData.at(col).values.end();
0075 it != itEnd;
0076 ++it, ++index) {
0077 iOrdered.insert(std::make_pair(*it, index));
0078 }
0079 unsigned int row = 0;
0080 for (typename TMap::iterator it = iOrdered.begin(), itEnd = iOrdered.end(); it != itEnd; ++it, ++row) {
0081 oRowToIndex[row] = it->second;
0082 }
0083 }
0084 }
0085
0086 void FWTriggerTableViewTableManager::implSort(int col, bool sortOrder) {
0087 if (sortOrder) {
0088 std::multimap<std::string, int, std::greater<std::string> > ordered;
0089 doSort(col, m_view->m_columns, ordered, m_sortedToUnsortedIndices);
0090 } else {
0091 std::multimap<std::string, int> ordered;
0092 doSort(col, m_view->m_columns, ordered, m_sortedToUnsortedIndices);
0093 }
0094 }