void CACollectionView::reloadViewSizeData() { clearData(); m_nSections = m_pCollectionViewDataSource->numberOfSections(this); m_nRowsInSections.resize(m_nSections); for (unsigned int i=0; i<m_nSections; i++) { unsigned int rowsInSection = m_pCollectionViewDataSource->numberOfRowsInSection(this, i); m_nRowsInSections[i] = rowsInSection; } m_nSectionHeaderHeights.resize(m_nSections); for (unsigned int i=0; i<m_nSections; i++) { unsigned int sectionHeaderHeight = m_pCollectionViewDataSource->collectionViewHeightForHeaderInSection(this, i); m_nSectionHeaderHeights[i] = sectionHeaderHeight; } m_nSectionFooterHeights.resize(m_nSections); for (unsigned int i=0; i<m_nSections; i++) { unsigned int sectionFooterHeight = m_pCollectionViewDataSource->collectionViewHeightForFooterInSection(this, i); m_nSectionFooterHeights[i] = sectionFooterHeight; } m_nRowHeightss.resize(m_nSections); for (unsigned int i=0; i<m_nSections; i++) { std::vector<unsigned int> rowHeights(m_nRowsInSections.at(i)); for (unsigned int j=0; j<m_nRowsInSections.at(i); j++) { unsigned int rowHeight = m_pCollectionViewDataSource->collectionViewHeightForRowAtIndexPath(this, i, j); rowHeights[j] = rowHeight; } m_nRowHeightss[i] = rowHeights; } unsigned int viewHeight = 0; m_nSectionHeights.resize(m_nSections); for (unsigned int i=0; i<m_nSections; i++) { unsigned int sectionHeight = 0; sectionHeight += m_nSectionHeaderHeights.at(i); sectionHeight += m_nSectionFooterHeights.at(i); sectionHeight += m_nVertInterval; for (unsigned int j=0; j<m_nRowHeightss.at(i).size(); j++) { sectionHeight += m_nRowHeightss.at(i).at(j); sectionHeight += m_nVertInterval; } m_nSectionHeights[i] = sectionHeight; viewHeight += sectionHeight; } viewHeight += m_nCollectionHeaderHeight; viewHeight += m_nCollectionFooterHeight; DSize size = this->getBounds().size; size.height = viewHeight; this->setViewSize(size); }
void OXMLi_ListenerState_Table::startElement (OXMLi_StartElementRequest * rqst) { if (nameMatches(rqst->pName, NS_W_KEY, "tbl")) { OXML_Element_Table* pTable = new OXML_Element_Table(""); m_tableStack.push(pTable); OXML_SharedElement table(pTable); rqst->stck->push(table); rqst->handled = true; pTable->setCurrentRowNumber(-1); pTable->setCurrentColNumber(-1); } else if(nameMatches(rqst->pName, NS_W_KEY, "tr")) { if(m_tableStack.empty()) { rqst->handled = false; rqst->valid = false; return; } OXML_Element_Table* table = m_tableStack.top(); OXML_Element_Row* pRow = new OXML_Element_Row("", table); m_rowStack.push(pRow); OXML_SharedElement row(pRow); rqst->stck->push(row); rqst->handled = true; table->incrementCurrentRowNumber(); table->setCurrentColNumber(0); pRow->setRowNumber(table->getCurrentRowNumber()); } else if(nameMatches(rqst->pName, NS_W_KEY, "tc")) { if(m_tableStack.empty() || m_rowStack.empty()) { rqst->handled = false; rqst->valid = false; return; } OXML_Element_Table* table = m_tableStack.top(); OXML_Element_Row* row = m_rowStack.top(); OXML_Element_Cell* pCell = new OXML_Element_Cell("", table, row, table->getCurrentColNumber(), table->getCurrentColNumber()+1, //left right table->getCurrentRowNumber(), table->getCurrentRowNumber()+1); //top,bottom m_cellStack.push(pCell); OXML_SharedElement cell(pCell); rqst->stck->push(cell); rqst->handled = true; table->incrementCurrentColNumber(); } else if(nameMatches(rqst->pName, NS_W_KEY, "gridSpan")) { if(m_tableStack.empty() || m_cellStack.empty()) { rqst->handled = false; rqst->valid = false; return; } OXML_Element_Table* table = m_tableStack.top(); const gchar* val = attrMatches(NS_W_KEY, "val", rqst->ppAtts); if(val) { int span = atoi(val); int left = table->getCurrentColNumber()-1; int right = left + span; //change current cell's right index OXML_Element_Cell* cell = m_cellStack.top(); cell->setRight(right); //update column index of current table table->setCurrentColNumber(right); } rqst->handled = true; } else if(nameMatches(rqst->pName, NS_W_KEY, "vMerge")) { if(m_cellStack.empty()) { rqst->handled = false; rqst->valid = false; return; } OXML_Element_Cell* cell = m_cellStack.top(); cell->setVerticalMergeStart(false); //default to continue if the attribute is missing const gchar* val = attrMatches(NS_W_KEY, "val", rqst->ppAtts); if(val && !strcmp(val, "restart")) { cell->setVerticalMergeStart(true); } rqst->handled = true; } else if(nameMatches(rqst->pName, NS_W_KEY, "hMerge")) { if(m_cellStack.empty()) { rqst->handled = false; rqst->valid = false; return; } OXML_Element_Cell* cell = m_cellStack.top(); cell->setHorizontalMergeStart(false); //default to continue if the attribute is missing const gchar* val = attrMatches(NS_W_KEY, "val", rqst->ppAtts); if(val && !strcmp(val, "restart")) { cell->setHorizontalMergeStart(true); } rqst->handled = true; } //Table Properties else if(nameMatches(rqst->pName, NS_W_KEY, "gridCol") && contextMatches(rqst->context->back(), NS_W_KEY, "tblGrid")) { if(m_tableStack.empty()) { rqst->handled = false; rqst->valid = false; return; } OXML_Element_Table* table = m_tableStack.top(); const gchar* w = attrMatches(NS_W_KEY, "w", rqst->ppAtts); if(w) { //append this width to table-column-props property const gchar* tableColumnProps = NULL; UT_Error ret = table->getProperty("table-column-props", tableColumnProps); if((ret != UT_OK) || !tableColumnProps) tableColumnProps = ""; std::string cols(tableColumnProps); cols += _TwipsToPoints(w); cols += "pt/"; ret = table->setProperty("table-column-props", cols); if(ret != UT_OK) { UT_DEBUGMSG(("FRT:OpenXML importer can't set table-column-props:%s\n", cols.c_str())); } } rqst->handled = true; } else if(nameMatches(rqst->pName, NS_W_KEY, "trHeight") && contextMatches(rqst->context->back(), NS_W_KEY, "trPr")) { if(m_tableStack.empty()) { rqst->handled = false; rqst->valid = false; return; } OXML_Element_Table* table = m_tableStack.top(); const gchar* val = attrMatches(NS_W_KEY, "val", rqst->ppAtts); if(val) { const gchar* tableRowHeights = NULL; UT_Error ret = table->getProperty("table-row-heights", tableRowHeights); if((ret != UT_OK) || !tableRowHeights) tableRowHeights = ""; std::string rowHeights(tableRowHeights); rowHeights += _TwipsToPoints(val); rowHeights += "pt/"; ret = table->setProperty("table-row-heights", rowHeights); if(ret != UT_OK) { UT_DEBUGMSG(("FRT:OpenXML importer can't set table-row-heights:%s\n", rowHeights.c_str())); } } rqst->handled = true; } else if(nameMatches(rqst->pName, NS_W_KEY, "left") || nameMatches(rqst->pName, NS_W_KEY, "right") || nameMatches(rqst->pName, NS_W_KEY, "top") || nameMatches(rqst->pName, NS_W_KEY, "bottom")) { rqst->handled = true; const gchar* color = attrMatches(NS_W_KEY, "color", rqst->ppAtts); const gchar* sz = attrMatches(NS_W_KEY, "sz", rqst->ppAtts); const gchar* val = attrMatches(NS_W_KEY, "val", rqst->ppAtts); UT_Error ret = UT_OK; std::string borderName(rqst->pName); borderName = borderName.substr(strlen(NS_W_KEY)+1); if(!borderName.compare("bottom")) borderName = "bot"; std::string borderStyle = borderName + "-style"; std::string borderColor = borderName + "-color"; std::string borderThickness = borderName + "-thickness"; OXML_Element* element = NULL; if(rqst->context->empty()) { rqst->handled = false; rqst->valid = false; return; } if(contextMatches(rqst->context->back(), NS_W_KEY, "tcBorders")) element = m_cellStack.empty() ? NULL : m_cellStack.top(); else if(contextMatches(rqst->context->back(), NS_W_KEY, "tblBorders")) element = m_tableStack.empty() ? NULL : m_tableStack.top(); if(!element) { rqst->handled = false; rqst->valid = false; return; } if(color && strcmp(color, "auto")) { ret = element->setProperty(borderColor, color); if(ret != UT_OK) { UT_DEBUGMSG(("FRT:OpenXML importer can't set %s:%s\n", borderColor.c_str(), color)); } } if(sz) { std::string szVal(_EighthPointsToPoints(sz)); szVal += "pt"; ret = element->setProperty(borderThickness, szVal); if(ret != UT_OK) { UT_DEBUGMSG(("FRT:OpenXML importer can't set %s:%s\n", borderThickness.c_str(), color)); } } std::string styleValue = "1"; //single line border by default if(val) { if(!strcmp(val, "dashed")) styleValue = "0"; } ret = element->setProperty(borderStyle, styleValue); if(ret != UT_OK) { UT_DEBUGMSG(("FRT:OpenXML importer can't set %s:0\n", borderStyle.c_str())); } } else if(nameMatches(rqst->pName, NS_W_KEY, "shd")) { const gchar* fill = attrMatches(NS_W_KEY, "fill", rqst->ppAtts); UT_Error ret = UT_OK; OXML_Element* element = NULL; if(rqst->context->empty()) { rqst->handled = false; rqst->valid = false; return; } if(contextMatches(rqst->context->back(), NS_W_KEY, "tcPr")) element = m_cellStack.empty() ? NULL : m_cellStack.top(); else if(contextMatches(rqst->context->back(), NS_W_KEY, "tblPr")) element = m_tableStack.empty() ? NULL : m_tableStack.top(); if(!element) { rqst->handled = false; rqst->valid = false; return; } if(fill && strcmp(fill, "auto")) { ret = element->setProperty("background-color", fill); if(ret != UT_OK) { UT_DEBUGMSG(("FRT:OpenXML importer can't set background-color:%s\n", fill)); } } rqst->handled = true; } else if(nameMatches(rqst->pName, NS_W_KEY, "tblStyle")) { if(m_tableStack.empty()) { rqst->handled = false; rqst->valid = false; return; } OXML_Element_Table* table = m_tableStack.top(); const gchar* val = attrMatches(NS_W_KEY, "val", rqst->ppAtts); if(val && table) { std::string styleName(val); OXML_Document* doc = OXML_Document::getInstance(); if(doc) table->applyStyle(doc->getStyleById(styleName)); } rqst->handled = true; } else if(nameMatches(rqst->pName, NS_W_KEY, "tblPr")) { if(m_tableStack.empty()) { //we must be in tblStyle in styles, so let's push the table instance to m_tableStack OXML_Element_Table* tbl = static_cast<OXML_Element_Table*>(get_pointer(rqst->stck->top())); m_tableStack.push(tbl); } rqst->handled = true; } else if(nameMatches(rqst->pName, NS_W_KEY, "trPr")) { if(m_rowStack.empty()) { //we must be in styles, so let's push the row instance to m_rowStack OXML_Element_Row* row = static_cast<OXML_Element_Row*>(get_pointer(rqst->stck->top())); m_rowStack.push(row); } rqst->handled = true; } else if(nameMatches(rqst->pName, NS_W_KEY, "tcPr")) { if(m_cellStack.empty()) { //we must be in styles, so let's push the cell instance to m_cellStack OXML_Element_Cell* cell = static_cast<OXML_Element_Cell*>(get_pointer(rqst->stck->top())); m_cellStack.push(cell); } rqst->handled = true; } //TODO: more coming here }
UT_Error OXML_Element_Table::serializeProperties(IE_Exp_OpenXML* exporter) { UT_Error err = UT_OK; const gchar* szValue = NULL; if(getProperty("table-column-props", szValue) == UT_OK) { err = exporter->startTableGrid(TARGET_DOCUMENT); if(err != UT_OK) return err; std::string col(szValue); std::string token(""); std::string::size_type prev = -1; std::string::size_type pos = col.find_first_of("/"); while (pos != std::string::npos) { token = col.substr(prev+1, pos-prev-1); columnWidth.push_back(token); err = exporter->setGridCol(TARGET_DOCUMENT, token.c_str()); if(err != UT_OK) return err; prev = pos; pos = col.find_first_of("/", pos + 1); } err = exporter->finishTableGrid(TARGET_DOCUMENT); if(err != UT_OK) return err; } if(getProperty("table-row-heights", szValue) == UT_OK) { std::string rowHeights(szValue); std::string token(""); std::string::size_type prev = -1; std::string::size_type pos = rowHeights.find_first_of("/"); while (pos != std::string::npos) { token = rowHeights.substr(prev+1, pos-prev-1); rowHeight.push_back(token); prev = pos; pos = rowHeights.find_first_of("/", pos + 1); } } err = exporter->startTableProperties(TARGET_DOCUMENT); if(err != UT_OK) return err; if(getProperty("background-color", szValue) == UT_OK) { err = exporter->setBackgroundColor(TARGET_DOCUMENT, szValue); if(err != UT_OK) return err; } err = exporter->startTableBorderProperties(TARGET_DOCUMENT); if(err != UT_OK) return err; const gchar* borderType = NULL; const gchar* color = NULL; const gchar* size = NULL; //left border borderType = "single"; if(getProperty("left-style", szValue) == UT_OK) { if(strcmp(szValue, "1") != 0) { borderType = "dashed"; } } color = NULL; if(getProperty("left-color", szValue) == UT_OK) { color = szValue; } size = NULL; if(getProperty("left-thickness", szValue) == UT_OK) { size = szValue; } err = exporter->setTableBorder(TARGET_DOCUMENT, "left", borderType, color, size); if(err != UT_OK) return err; //right border borderType = "single"; if(getProperty("right-style", szValue) == UT_OK) { if(strcmp(szValue, "1") != 0) { borderType = "dashed"; } } color = NULL; if(getProperty("right-color", szValue) == UT_OK) { color = szValue; } size = NULL; if(getProperty("right-thickness", szValue) == UT_OK) { size = szValue; } err = exporter->setTableBorder(TARGET_DOCUMENT, "right", borderType, color, size); if(err != UT_OK) return err; //top border borderType = "single"; if(getProperty("top-style", szValue) == UT_OK) { if(strcmp(szValue, "1") != 0) { borderType = "dashed"; } } color = NULL; if(getProperty("top-color", szValue) == UT_OK) { color = szValue; } size = NULL; if(getProperty("top-thickness", szValue) == UT_OK) { size = szValue; } err = exporter->setTableBorder(TARGET_DOCUMENT, "top", borderType, color, size); if(err != UT_OK) return err; //bottom border borderType = "single"; if(getProperty("bot-style", szValue) == UT_OK) { if(strcmp(szValue, "1") != 0) { borderType = "dashed"; } } color = NULL; if(getProperty("bot-color", szValue) == UT_OK) { color = szValue; } size = NULL; if(getProperty("bot-thickness", szValue) == UT_OK) { size = szValue; } err = exporter->setTableBorder(TARGET_DOCUMENT, "bottom", borderType, color, size); if(err != UT_OK) return err; err = exporter->finishTableBorderProperties(TARGET_DOCUMENT); if(err != UT_OK) return err; return exporter->finishTableProperties(TARGET_DOCUMENT); }
void CATableView::reloadViewSizeData() { this->clearData(); unsigned int sectionCount = m_pTableViewDataSource->numberOfSections(this); m_nRowsInSections.resize(sectionCount); for (unsigned int i=0; i<sectionCount; i++) { unsigned int rowsInSection = m_pTableViewDataSource->numberOfRowsInSection(this, i); m_nRowsInSections[i] = rowsInSection; } m_nSectionHeaderHeights.resize(sectionCount); for (unsigned int i=0; i<sectionCount; i++) { unsigned int sectionHeaderHeight = m_pTableViewDataSource->tableViewHeightForHeaderInSection(this, i); m_nSectionHeaderHeights[i] = sectionHeaderHeight; } m_nSectionFooterHeights.resize(sectionCount); for (unsigned int i=0; i<sectionCount; i++) { unsigned int sectionFooterHeight = m_pTableViewDataSource->tableViewHeightForFooterInSection(this, i); m_nSectionFooterHeights[i] = sectionFooterHeight; } m_nRowHeightss.resize(sectionCount); for (unsigned int i=0; i<sectionCount; i++) { std::vector<unsigned int> rowHeights(m_nRowsInSections.at(i)); for (unsigned int j=0; j<m_nRowsInSections.at(i); j++) { unsigned int rowHeight = m_pTableViewDataSource->tableViewHeightForRowAtIndexPath(this, i, j); rowHeights[j] = rowHeight; } m_nRowHeightss[i] = rowHeights; } unsigned int viewHeight = 0; m_nSectionHeights.resize(sectionCount); for (unsigned int i=0; i<sectionCount; i++) { unsigned int sectionHeight = 0; sectionHeight += m_nSectionHeaderHeights.at(i); sectionHeight += m_nSectionFooterHeights.at(i); for (unsigned int j=0; j<m_nRowHeightss.at(i).size(); j++) { sectionHeight += m_nRowHeightss.at(i).at(j); sectionHeight += 1; } sectionHeight -= 1; m_nSectionHeights[i] = sectionHeight; viewHeight += sectionHeight; } viewHeight += m_nTableHeaderHeight; viewHeight += m_nTableFooterHeight; CCSize size = this->getContentSize(); size.height = viewHeight; this->setViewSize(size); }