예제 #1
0
//Reads file and writes to bin(Low level open for output, low level write for output, high level read for input)
int main(){

	FILE * fin = openFile();

	int fd = open("myBinary.bin",O_CREAT|O_WRONLY,0777);

	if(fd < 0){
		printf("ERROR: CANNOT OPEN OUTPUT FILE!!!");
		exit(-1);
	}

	int input;
	int records = recordCount(fin);
	int result = 0;
	write(fd,&records,sizeof(records));//Write number of records from input file, as first line in output
	fscanf(fin,"%d",&input);
	while(!feof(fin)){
		if(result < 0){
			printf("ERROR: Problem Writing To File!!!");
			exit(-1);
		}
		write(fd,&input,sizeof(input));
		fscanf(fin,"%d",&input);
	}
	close(fd);
	fclose(fin);
	return 0;
}
예제 #2
0
int LS3Datastore::getRecordByUUID(const QString& uuid) const  {
    if (dbIsLoaded()) {
        int pos=-1;
        for (int i=0; i<recordCount(); i++) {
            if (getField(i, "uuid").toString()==uuid) {
                pos=i;
            }
        }
        return pos;
    }
    return -1;
}
예제 #3
0
bool KexiRecordNavigator::eventFilter(QObject *o, QEvent *e)
{
    if (o == d->navRecordNumber) {
        bool recordEntered = false;
        bool ret;
        if (e->type() == QEvent::KeyPress) {
            QKeyEvent *ke = static_cast<QKeyEvent*>(e);
            switch (ke->key()) {
            case Qt::Key_Escape: {
                ke->accept();
                d->navRecordNumber->undo();
                if (d->view)
                    d->view->setFocus();
                return true;
            }
            case Qt::Key_Enter:
            case Qt::Key_Return:
            case Qt::Key_Tab:
            case Qt::Key_Backtab: {
                recordEntered = true;
                ke->accept(); //to avoid pressing Enter later
                ret = true;
            }
            default:;
            }
        } else if (e->type() == QEvent::FocusOut) {
            if (static_cast<QFocusEvent*>(e)->reason() != Qt::TabFocusReason
                    && static_cast<QFocusEvent*>(e)->reason() != Qt::BacktabFocusReason
                    && static_cast<QFocusEvent*>(e)->reason() != Qt::OtherFocusReason)
            {
                recordEntered = true;
            }
            ret = false;
        }

        if (recordEntered) {
            bool ok = true;
            uint r = d->navRecordNumber->text().toUInt(&ok);
            if (!ok || r < 1)
                r = (recordCount() > 0) ? 1 : 0;
            if (d->view && (hasFocus() || e->type() == QEvent::KeyPress))
                d->view->setFocus();
            setCurrentRecordNumber(r);
            emit recordNumberEntered(r);
            if (d->handler)
                d->handler->moveToRecordRequested(r - 1);
            return ret;
        }
    }
    return false;
}
예제 #4
0
void KexiRecordNavigator::setCurrentRecordNumber(uint r)
{
    uint recCnt = recordCount();
    if (r > (recCnt + (d->isInsertingEnabled ? 1 : 0)))
        r = recCnt + (d->isInsertingEnabled ? 1 : 0);
    QString n;
    if (r > 0)
        n = QString::number(r);
    else
        n = " ";

    d->navRecordNumber->setText(n);
    updateButtons(recCnt);
}
예제 #5
0
void KexiRecordNavigator::showEditingIndicator(bool show)
{
    d->editingIndicatorVisible = show;
    updateButtons(recordCount()); //this will refresh 'next btn'
    if (!d->editingIndicatorEnabled)
        return;
    if (d->editingIndicatorVisible) {
        QPixmap pix( *KexiRecordMarker::penPixmap() );
        d->editingIndicatorLabel->setPixmap(pix);
        d->editingIndicatorLabel->setToolTip(i18n("Editing indicator"));
    } else {
        d->editingIndicatorLabel->setPixmap(QPixmap());
        d->editingIndicatorLabel->setToolTip(QString());
    }
}
예제 #6
0
QList<IoslotValueRecord> IoslotValueTable::median(const QDateTime &from, const QDateTime &to, int limit)
{
    int count = recordCount(from, to);

    qint64 w1 = from.toMSecsSinceEpoch() - to.toMSecsSinceEpoch();
    qint64 w2 = double(limit) / double(count) * w1;
    qint16 dw = (w1 - w2) / 2;

    QDateTime dt1 = from;
    QDateTime dt2 = to;
    if (dw > 0) {
        dt1 = QDateTime::fromMSecsSinceEpoch(dt1.toMSecsSinceEpoch() + dw);
        dt2 = QDateTime::fromMSecsSinceEpoch(dt2.toMSecsSinceEpoch() - dw);
    }

    return records(dt1, dt2, limit);
}
예제 #7
0
void KexiRecordNavigator::setRecordCount(uint count)
{
    const QString & n = QString::number(count);
    if (d->isInsertingEnabled && currentRecordNumber() == 0) {
        setCurrentRecordNumber(1);
    }
    if (d->navRecordCount->text().length() != n.length()) {//resize
        d->navRecordCount->setFixedWidth(d->nav1DigitWidth * (n.length() + 1));

        if (d->view && d->view->horizontalScrollBar()->isVisible()) {
            //+width of the delta
            resize(width() + (n.length() - d->navRecordCount->text().length())*d->nav1DigitWidth, height());
        }
    }
    //update row number widget's width
    const int w = d->nav1DigitWidth * qMax(qMax(n.length(), 2) + 1, d->navRecordNumber->text().length() + 1) + 2;
    if (d->navRecordNumber->width() != w) //resize
        d->navRecordNumber->setFixedWidth(w);

    d->navRecordCount->setText(n);
    if (d->view)
        d->view->updateScrollBars();
    updateButtons(recordCount());
}
예제 #8
0
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;
}
예제 #9
0
 QString LS3Datastore::createID(int record, LS3Datastore::IDType type) {
     LS3ElapsedAutoTimer timer("LS3Datastore::createID("+QString::number(record)+")");
    bool addLetterCode=true; // if this is false, no a, b, c,... letter code will be added

    // read and process information from database
    QString a=getField(record, "authors").toString();
    QStringList ag, af;
    parseAuthors(a, &ag, &af);
    QString e=getField(record, "editors").toString();
    QStringList eg, ef;
    parseAuthors(e, &eg, &ef);
    QString y=getField(record, "year").toString();

    // create base ID
    QString id="";
    if (type==AuthorYearDefaultCase) {
        if (af.size()>0) {
            id=cleanStringForFilename(af[0]);
        } else if (ef.size()>0) {
            id=cleanStringForFilename(ef[0]);
        }
        id=id+y;
    } else if (type==AuthorYearUpperCase) {
        if (af.size()>0) {
            id=cleanStringForFilename(af[0]);
        } else if (ef.size()>0) {
            id=cleanStringForFilename(ef[0]);
        }
        id=id.toUpper()+y;
    } else if (type==Author3YearUpperCase) {
        if (af.size()>0) {
            id=cleanStringForFilename(af[0]).left(3).toUpper();
        } else if (ef.size()>0) {
            id=cleanStringForFilename(ef[0]).left(3).toUpper();
        }
        id=id+y;
    } else if (type==Author6YearUpperCase) {
        if (af.size()>0) {
            id=cleanStringForFilename(af[0]).left(6).toUpper();
        } else if (ef.size()>0) {
            id=cleanStringForFilename(ef[0]).left(6).toUpper();
        }
        id=id+y;
    } else if (type==InitialsYear) {
        if (af.size()>0) {
            for (int i=0; i<af.size(); i++) {
                id=id+cleanStringForFilename(af[i]).left(1).toUpper();
            }
        } else if (ef.size()>0) {
            for (int i=0; i<ef.size(); i++) {
                id=id+cleanStringForFilename(ef[i]).left(1).toUpper();
            }
        }
        id=id+y;
    }

    // look whether ID is unique or whether something has to be added (a, b, c, ...)
    bool isOK=false;
    QString idd=id;
    if (addLetterCode) {
        int k=0;
        while (!isOK) {
            idd=id+intToLetterCode(k);
            int i=0;
            isOK=true;
            while(isOK && (i<recordCount())) {
                if (i!=record) {
                    if (getField(i, "id")==idd) {
                        isOK=false;
                    }
                }
                i++;
            }
            k++;
        }
    }


    return idd;
}
예제 #10
0
void LS3Datastore::dbLast() {
    LS3ElapsedAutoTimer timer("LS3Datastore::dbLast()");
    dbMove(recordCount()-1);
}