/** * \brief Load the column from XML */ bool Column::load(XmlStreamReader* reader) { if(reader->isStartElement() && reader->name() == "column") { if (!readBasicAttributes(reader)) return false; QString attributeWarning = i18n("Attribute '%1' missing or empty, default value is used"); QXmlStreamAttributes attribs = reader->attributes(); QString str = attribs.value("mode").toString(); if(str.isEmpty()) reader->raiseWarning(attributeWarning.arg("'mode'")); else setColumnMode( AbstractColumn::ColumnMode(str.toInt()) ); str = attribs.value("width").toString(); if(str.isEmpty()) reader->raiseWarning(attributeWarning.arg("'width'")); else setWidth(str.toInt()); // read child elements while (!reader->atEnd()) { reader->readNext(); if (reader->isEndElement()) break; if (reader->isStartElement()) { bool ret_val = true; if (reader->name() == "comment") ret_val = readCommentElement(reader); else if(reader->name() == "input_filter") ret_val = XmlReadInputFilter(reader); else if(reader->name() == "output_filter") ret_val = XmlReadOutputFilter(reader); else if(reader->name() == "mask") ret_val = XmlReadMask(reader); else if(reader->name() == "formula") ret_val = XmlReadFormula(reader); else if(reader->name() == "row") ret_val = XmlReadRow(reader); else // unknown element { reader->raiseWarning(i18n("unknown element '%1'", reader->name().toString())); if (!reader->skipToEndElement()) return false; } if(!ret_val) return false; } QString content = reader->text().toString().trimmed(); if (!content.isEmpty() && columnMode() == AbstractColumn::Numeric) { DecodeColumnTask* task = new DecodeColumnTask(m_column_private, content); QThreadPool::globalInstance()->start(task); } } } else // no column element reader->raiseError(i18n("no column element found")); return !reader->error(); }
/** * \brief Copies a part of another column of the same type * * This function will return false if the data type * of 'other' is not the same as the type of 'this'. * \param other pointer to the column to copy * \param src_start first row to copy in the column to copy * \param dest_start first row to copy in * \param num_rows the number of rows to copy */ bool Column::copy(const AbstractColumn * source, int source_start, int dest_start, int num_rows) { Q_CHECK_PTR(source); if(source->columnMode() != columnMode()) return false; exec(new ColumnPartialCopyCmd(m_column_private, source, source_start, dest_start, num_rows)); return true; }
/** * \brief Copy another column of the same type * * This function will return false if the data type * of 'other' is not the same as the type of 'this'. * Use a filter to convert a column to another type. */ bool Column::copy(const AbstractColumn * other) { Q_CHECK_PTR(other); if(other->columnMode() != columnMode()) return false; exec(new ColumnFullCopyCmd(m_column_private, other)); return true; }
/** * \brief Return an icon to be used for decorating the views and spreadsheet column headers */ QIcon Column::icon() const { switch(columnMode()) { case AbstractColumn::Numeric: return KIcon("x-shape-text"); case AbstractColumn::Text: return KIcon("draw-text"); case AbstractColumn::DateTime: case AbstractColumn::Month: case AbstractColumn::Day: return KIcon("chronometer"); } return KIcon("x-shape-text"); }
void Column::handleFormatChange() { if (columnMode() == AbstractColumn::DateTime) { String2DateTimeFilter *input_filter = static_cast<String2DateTimeFilter*>(m_column_private->inputFilter()); DateTime2StringFilter *output_filter = static_cast<DateTime2StringFilter*>(m_column_private->outputFilter()); input_filter->setFormat(output_filter->format()); } emit aspectDescriptionChanged(this); // the icon for the type changed if (!m_suppressDataChangedSignal) emit dataChanged(this); // all cells must be repainted setStatisticsAvailable(false); }
/** * \brief Read XML row element */ bool Column::XmlReadRow(XmlStreamReader * reader) { Q_ASSERT(reader->isStartElement() && reader->name() == "row"); QString str; QXmlStreamAttributes attribs = reader->attributes(); bool ok; int index = reader->readAttributeInt("index", &ok); if(!ok) { reader->raiseError(i18n("invalid or missing row index")); return false; } str = reader->readElementText(); switch(columnMode()) { case AbstractColumn::Numeric: { double value = str.toDouble(&ok); if(!ok) { reader->raiseError(i18n("invalid row value")); return false; } setValueAt(index, value); break; } case AbstractColumn::Text: setTextAt(index, str); break; case AbstractColumn::DateTime: case AbstractColumn::Month: case AbstractColumn::Day: QDateTime date_time = QDateTime::fromString(str,"yyyy-dd-MM hh:mm:ss:zzz"); setDateTimeAt(index, date_time); break; } return true; }
/** * \brief Set the column mode * * This sets the column mode and, if * necessary, converts it to another datatype. */ void Column::setColumnMode(AbstractColumn::ColumnMode mode) { if(mode == columnMode()) return; beginMacro(i18n("%1: change column type", name())); AbstractSimpleFilter * old_input_filter = m_column_private->inputFilter(); AbstractSimpleFilter * old_output_filter = m_column_private->outputFilter(); exec(new ColumnSetModeCmd(m_column_private, mode)); if (m_column_private->inputFilter() != old_input_filter) { removeChild(old_input_filter); addChild(m_column_private->inputFilter()); m_column_private->inputFilter()->input(0,m_string_io); } if (m_column_private->outputFilter() != old_output_filter) { removeChild(old_output_filter); addChild(m_column_private->outputFilter()); m_column_private->outputFilter()->input(0, this); } endMacro(); }
/** * \brief Save the column as XML */ void Column::save(QXmlStreamWriter* writer) const { writer->writeStartElement("column"); writeBasicAttributes(writer); writer->writeAttribute("mode", QString::number(columnMode())); writer->writeAttribute("width", QString::number(width())); //save the formula used to generate column values, if available if (!formula().isEmpty() ) { writer->writeStartElement("formula"); writer->writeTextElement("text", formula()); writer->writeStartElement("variableNames"); for (int i=0; i<formulaVariableNames().size(); ++i) { writer->writeTextElement("name", formulaVariableNames().at(i)); } writer->writeEndElement(); writer->writeStartElement("columnPathes"); for (int i=0; i<formulaVariableColumnPathes().size(); ++i) { writer->writeTextElement("path", formulaVariableColumnPathes().at(i)); } writer->writeEndElement(); writer->writeEndElement(); } writeCommentElement(writer); writer->writeStartElement("input_filter"); m_column_private->inputFilter()->save(writer); writer->writeEndElement(); writer->writeStartElement("output_filter"); m_column_private->outputFilter()->save(writer); writer->writeEndElement(); //TODO: formula in cells is not implemented yet // XmlWriteMask(writer); // QList< Interval<int> > formulas = formulaIntervals(); // foreach(const Interval<int>& interval, formulas) { // writer->writeStartElement("formula"); // writer->writeAttribute("start_row", QString::number(interval.start())); // writer->writeAttribute("end_row", QString::number(interval.end())); // writer->writeCharacters(formula(interval.start())); // writer->writeEndElement(); // } int i; switch(columnMode()) { case AbstractColumn::Numeric: { const char* data = reinterpret_cast<const char*>( static_cast< QVector<double>* >(m_column_private->dataPointer())->constData()); int size = m_column_private->rowCount()*sizeof(double); writer->writeCharacters(QByteArray::fromRawData(data,size).toBase64()); break; } case AbstractColumn::Text: for(i=0; i<rowCount(); ++i) { writer->writeStartElement("row"); writer->writeAttribute("index", QString::number(i)); writer->writeCharacters(textAt(i)); writer->writeEndElement(); } break; case AbstractColumn::DateTime: case AbstractColumn::Month: case AbstractColumn::Day: for(i=0; i<rowCount(); ++i) { writer->writeStartElement("row"); writer->writeAttribute("index", QString::number(i)); writer->writeCharacters(dateTimeAt(i).toString("yyyy-dd-MM hh:mm:ss:zzz")); writer->writeEndElement(); } break; } writer->writeEndElement(); // "column" }
int Q3ListBox::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = Q3ScrollView::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: highlighted((*reinterpret_cast< int(*)>(_a[1]))); break; case 1: selected((*reinterpret_cast< int(*)>(_a[1]))); break; case 2: highlighted((*reinterpret_cast< const QString(*)>(_a[1]))); break; case 3: selected((*reinterpret_cast< const QString(*)>(_a[1]))); break; case 4: highlighted((*reinterpret_cast< Q3ListBoxItem*(*)>(_a[1]))); break; case 5: selected((*reinterpret_cast< Q3ListBoxItem*(*)>(_a[1]))); break; case 6: selectionChanged(); break; case 7: selectionChanged((*reinterpret_cast< Q3ListBoxItem*(*)>(_a[1]))); break; case 8: currentChanged((*reinterpret_cast< Q3ListBoxItem*(*)>(_a[1]))); break; case 9: clicked((*reinterpret_cast< Q3ListBoxItem*(*)>(_a[1]))); break; case 10: clicked((*reinterpret_cast< Q3ListBoxItem*(*)>(_a[1])),(*reinterpret_cast< const QPoint(*)>(_a[2]))); break; case 11: pressed((*reinterpret_cast< Q3ListBoxItem*(*)>(_a[1]))); break; case 12: pressed((*reinterpret_cast< Q3ListBoxItem*(*)>(_a[1])),(*reinterpret_cast< const QPoint(*)>(_a[2]))); break; case 13: doubleClicked((*reinterpret_cast< Q3ListBoxItem*(*)>(_a[1]))); break; case 14: returnPressed((*reinterpret_cast< Q3ListBoxItem*(*)>(_a[1]))); break; case 15: rightButtonClicked((*reinterpret_cast< Q3ListBoxItem*(*)>(_a[1])),(*reinterpret_cast< const QPoint(*)>(_a[2]))); break; case 16: rightButtonPressed((*reinterpret_cast< Q3ListBoxItem*(*)>(_a[1])),(*reinterpret_cast< const QPoint(*)>(_a[2]))); break; case 17: mouseButtonPressed((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< Q3ListBoxItem*(*)>(_a[2])),(*reinterpret_cast< const QPoint(*)>(_a[3]))); break; case 18: mouseButtonClicked((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< Q3ListBoxItem*(*)>(_a[2])),(*reinterpret_cast< const QPoint(*)>(_a[3]))); break; case 19: contextMenuRequested((*reinterpret_cast< Q3ListBoxItem*(*)>(_a[1])),(*reinterpret_cast< const QPoint(*)>(_a[2]))); break; case 20: onItem((*reinterpret_cast< Q3ListBoxItem*(*)>(_a[1]))); break; case 21: onViewport(); break; case 22: clear(); break; case 23: ensureCurrentVisible(); break; case 24: clearSelection(); break; case 25: selectAll((*reinterpret_cast< bool(*)>(_a[1]))); break; case 26: invertSelection(); break; case 27: clearInputString(); break; case 28: refreshSlot(); break; case 29: doAutoScroll(); break; case 30: adjustItems(); break; } _id -= 31; } #ifndef QT_NO_PROPERTIES else if (_c == QMetaObject::ReadProperty) { void *_v = _a[0]; switch (_id) { case 0: *reinterpret_cast< uint*>(_v) = count(); break; case 1: *reinterpret_cast< int*>(_v) = numItemsVisible(); break; case 2: *reinterpret_cast< int*>(_v) = currentItem(); break; case 3: *reinterpret_cast< QString*>(_v) = currentText(); break; case 4: *reinterpret_cast< int*>(_v) = topItem(); break; case 5: *reinterpret_cast< SelectionMode*>(_v) = selectionMode(); break; case 6: *reinterpret_cast< bool*>(_v) = isMultiSelection(); break; case 7: *reinterpret_cast< LayoutMode*>(_v) = columnMode(); break; case 8: *reinterpret_cast< LayoutMode*>(_v) = rowMode(); break; case 9: *reinterpret_cast< int*>(_v) = numColumns(); break; case 10: *reinterpret_cast< int*>(_v) = numRows(); break; case 11: *reinterpret_cast< bool*>(_v) = variableWidth(); break; case 12: *reinterpret_cast< bool*>(_v) = variableHeight(); break; } _id -= 13; } else if (_c == QMetaObject::WriteProperty) { void *_v = _a[0]; switch (_id) { case 2: setCurrentItem(*reinterpret_cast< int*>(_v)); break; case 4: setTopItem(*reinterpret_cast< int*>(_v)); break; case 5: setSelectionMode(*reinterpret_cast< SelectionMode*>(_v)); break; case 6: setMultiSelection(*reinterpret_cast< bool*>(_v)); break; case 7: setColumnMode(*reinterpret_cast< LayoutMode*>(_v)); break; case 8: setRowMode(*reinterpret_cast< LayoutMode*>(_v)); break; case 11: setVariableWidth(*reinterpret_cast< bool*>(_v)); break; case 12: setVariableHeight(*reinterpret_cast< bool*>(_v)); break; } _id -= 13; } else if (_c == QMetaObject::ResetProperty) { _id -= 13; } else if (_c == QMetaObject::QueryPropertyDesignable) { _id -= 13; } else if (_c == QMetaObject::QueryPropertyScriptable) { _id -= 13; } else if (_c == QMetaObject::QueryPropertyStored) { _id -= 13; } else if (_c == QMetaObject::QueryPropertyEditable) { _id -= 13; } else if (_c == QMetaObject::QueryPropertyUser) { _id -= 13; } #endif // QT_NO_PROPERTIES return _id; }