/*----------------------------------------------------------------------------*/ void MeasureWindow::onOptions() { OptionsDialog dlg; if(dlg.exec() == QDialog::Accepted) { ui->retranslateUi(this); disconnect(database, SIGNAL(dbError(QString))); connect(database, SIGNAL(dbError(QString)), this, SLOT(onDatabaseError())); onProfileChanged(ui->profileCombo->currentIndex()); onStatusChanged(controller->status()); } }
/*----------------------------------------------------------------------------*/ MeasureWindow::MeasureWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MeasureWindow) { m_created = false; ui->setupUi(this); ui->profileCombo->addItems(config->profileList()); ui->profileCombo->setCurrentIndex(config->profileIndex()); m_created = true; m_newMeasure = true; onProfileChanged(config->profileIndex()); connect(database, SIGNAL(dbError(QString)), this, SLOT(onDatabaseError())); connect(controller, SIGNAL(cmdSendError()), this, SLOT(onCmdSendError())); connect(controller, SIGNAL(cmdSendOk()), this, SLOT(onCmdSendOk())); connect(controller, SIGNAL(currentStretch(double)), this, SLOT(onCurrentStretch(double))); connect(controller, SIGNAL(endOfMeasuring()), this, SLOT(onEndOfMeasuring())); connect(controller, SIGNAL(measure(double,double,int)), this, SLOT(onMeasure(double,double,int))); connect(controller, SIGNAL(nextCasseteRequest()), this, SLOT(onNextCasseteRequest())); connect(controller, SIGNAL(noParticle()), this, SLOT(onNoParticle())); connect(controller, SIGNAL(serialReceived(QString)), this, SLOT(onSerialReceived(QString))); connect(controller, SIGNAL(statusChanged(int)), this, SLOT(onStatusChanged(int))); connect(controller, SIGNAL(sizeReceived(double)), this, SLOT(onSizeReceived(double))); connect(session, SIGNAL(sessionChanged()), this, SLOT(onSessionChanged())); connect(session, SIGNAL(measureListChanged()), this, SLOT(onMeasureListChanged())); ui->sessionBox->setSession(session); measureModel = new MeasureModel(this); ui->measureTable->setModel(measureModel); //connect(session, SIGNAL(measureListChanged()), measureModel, SLOT(update())); histogrammPlotter = new HistogrammPlotter(); // ui->currentHPlotWidget->setPlotter(histogrammPlotter); curvePlotter = new CurvePlotter(); curvePlotter->x.setShowValues(false); curvePlotter->x.setText(tr("[s]")); curvePlotter->x.setDecimals(0); curvePlotter->x.setSteps(3); curvePlotter->x.setMax(3000); curvePlotter->y.setShowValues(true); curvePlotter->y.setText(tr("[N]")); curvePlotter->y.setDecimals(1); curvePlotter->setFiled(false); curvePlotter->setPointSize(4); curvePlotter->setStyle(AxisPlotter::StrokeStyle); ui->currentValuePlotWidget->setPlotter(curvePlotter); intervalCount = 6; controller->start(); }
bool LS3DatastoreXML::dbLoad(const QString &fileName, QProgressBar* progress) { LS3ElapsedAutoTimer timer("LS3DatastoreXML::dbLoad"); // if a database is opened: close it! dbClose(); QDomDocument doc("mydocument"); QFile file(fileName); QString errorMessage; int errorLine; int errorColumn; if (!file.open(QIODevice::ReadOnly)) { emit dbError(tr("Error opening databse '%1': File could not be opened.").arg(fileName)); return m_databaseLoaded=false; } if (!doc.setContent(&file, &errorMessage, &errorLine, &errorColumn)) { file.close(); //file.close(); emit dbError(tr("Error parsing databse '%1': %2 (line %3, column %4).").arg(fileName).arg(errorMessage).arg(errorLine).arg(errorColumn)); return m_databaseLoaded=false; } file.close(); QDomElement docElem = doc.documentElement(); if (docElem.tagName()!="litsoz3database") { emit dbError(tr("Error in databse '%1': This is not a LitSoz 3 databse file (root element is <%2>, but should be <litsoz3database>.").arg(fileName).arg(docElem.tagName())); return m_databaseLoaded=false; } QDomElement n = docElem.firstChildElement("records"); data->loadFromXML(n, progress); timer.showMessage("XML loaded"); //if (keywordsdata) delete keywordsdata //keywordsdata = new QStringListModel(this); // create a stringlist model for the keywords and read its contents from the keywords field in the metadata table // the (possibly changed) model will be written back in the closeDB() method QDomElement metadata = docElem.firstChildElement("metadata"); if (!metadata.isNull()) { n = metadata.firstChildElement("item"); while(!n.isNull()) { QString type=n.attribute("type").toLower(); if (type=="keywords") { QString sdata=n.text().replace("\r\n", "\n"); sdata=sdata.replace("\n\r", "\n"); sdata=sdata.replace("\n\n", "\n"); sdata=sdata.replace("\n\n", "\n"); sdata=sdata.replace("\r\r", ""); QStringList sl=sdata.split("\n", QString::SkipEmptyParts); sl.removeDuplicates(); sl.sort(); keywordsdata->setStringList(sl); } if (type=="topics") { QString sdata=n.text().replace("\r\n", "\n"); sdata=sdata.replace("\n\r", "\n"); sdata=sdata.replace("\n\n", "\n"); sdata=sdata.replace("\n\n", "\n"); sdata=sdata.replace("\r\r", ""); QStringList sl=sdata.split("\n", QString::SkipEmptyParts); sl.removeDuplicates(); sl.sort(); topicsdata->setStringList(sl); } n=n.nextSiblingElement("item"); } } timer.showMessage("METADATA read"); // read the list of selected records QDomElement selectedNode = docElem.firstChildElement("selection_list"); clearSelection(); if (!selectedNode.isNull()) { n = selectedNode.firstChildElement("item"); while(!n.isNull()) { QString uuid=n.attribute("uuid"); select(uuid); n=n.nextSiblingElement("item"); } } timer.showMessage("SELECTION read"); // read the reference tree QDomElement reftreeNode = docElem.firstChildElement("litsoz3_reference_tree"); getReferencTreeModel()->readFromXML(reftreeNode); timer.showMessage("REFTREE read"); // read the authorsdata completer list from a file in config dir //if (authorsdata) delete authorsdata; //authorsdata = new QStringListModel(this); QFile f(settings->GetConfigDirectory()+"/completers/authors.lst"); if (f.open(QIODevice::ReadOnly|QIODevice::Text)) { //std::cout<<"OK\n"; QString s=QString::fromUtf8(f.readAll()); authorsdata->setStringList(s.split('\n', QString::SkipEmptyParts)); } updateCompleters(0, recordCount()-1, false); timer.showMessage("AUTHORS_COMPLETER read"); m_currentFile=fileName; emit filenameChanged(m_currentFile); emit connectWidgets(); timer.showMessage("CONNECTED_WIDGETS"); dbFirst(); timer.showMessage("MOVED FIRST"); emit databaseLoaded(true); emit databaseClosed(false); emit massiveSelectionChange(); timer.showMessage("EMITED SIGNALS"); return m_databaseLoaded=true; }
bool LS3DatastoreXML::dbSave(const QString &fileName, QProgressBar* progress) { LS3ElapsedAutoTimer timer("LS3DatastoreXML::dbSave"); QFile file(fileName); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { emit dbError(tr("Error when writing database '%1': Could not open file!").arg(fileName)); return false; } QXmlStreamWriter writer(&file); writer.writeStartDocument(); writer.writeStartElement("litsoz3database"); writer.writeStartElement("metadata"); writer.writeStartElement("item"); writer.writeAttribute("type", "keywords"); writer.writeCDATA(keywordsdata->stringList().join("\n")); writer.writeEndElement(); writer.writeStartElement("item"); writer.writeAttribute("type", "topics"); writer.writeCDATA(topicsdata->stringList().join("\n")); writer.writeEndElement(); writer.writeEndElement(); writer.writeStartElement("records"); data->saveToXML(&writer, progress); writer.writeEndElement(); // write the list of selected records writer.writeStartElement("selection_list"); for (int i=0; i<selectionCount(); i++) { writer.writeStartElement("item"); writer.writeAttribute("uuid", getSelectedUUID(i)); writer.writeEndElement(); } writer.writeEndElement(); writer.writeStartElement("litsoz3_reference_tree"); getReferencTreeModel()->writeToXML(writer); writer.writeEndElement(); writer.writeEndElement(); writer.writeEndDocument(); file.close(); QFile f(settings->GetConfigDirectory()+"/completers/authors.lst"); if (f.open(QIODevice::WriteOnly|QIODevice::Text)) { //std::cout<<"OK\n"; QStringList sl=authorsdata->stringList(); QFile f1(f.fileName()); if (f1.open(QIODevice::ReadOnly|QIODevice::Text)) { //std::cout<<"OK\n"; QString s=QString::fromUtf8(f1.readAll()); sl.append(s.split('\n', QString::SkipEmptyParts)); } //else std::cout<<"ERROR\n"; sl.removeDuplicates(); sl.sort(); for (int i=0; i<sl.size(); i++) { f.write(QString(sl[i]+"\n").toUtf8()); //std::cout<<" writing "<<itemText(i).toStdString()<<std::endl; } } if (m_currentFile!=fileName) emit filenameChanged(fileName); m_currentFile=fileName; return true; }