OSSP CVS Repository

ossp - ossp-pkg/as/as-gui/as_dataop.cpp 1.9
Not logged in
[Honeypot]  [Browse]  [Directory]  [Home]  [Login
[Reports]  [Search]  [Ticket]  [Timeline
  [Raw

ossp-pkg/as/as-gui/as_dataop.cpp 1.9
//
//  OSSP asgui - Accounting system graphical user interface
//  Copyright (c) 2002-2003 The OSSP Project (http://www.ossp.org/)
//  Copyright (c) 2002-2003 Cable & Wireless Deutschland (http://www.cw.com/de/)
//  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com>
//  Copyright (c) 2002-2003 Michael Schloh von Bennewitz <michael@schloh.com>
//
//  This file is part of OSSP asgui, an accounting system graphical user
//  interface which can be found at http://www.ossp.org/pkg/tool/asgui/.
//
//  Permission to use, copy, modify, and distribute this software for
//  any purpose with or without fee is hereby granted, provided that
//  the above copyright notice and this permission notice appear in all
//  copies.
//
//  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
//  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
//  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
//  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
//  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
//  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
//  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
//  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
//  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
//  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
//  SUCH DAMAGE.
//
//  tidatops.cpp: ISO C++ implementation
//

#include <qregexp.h>    // Portable regular expressions

#include "titraq.h"     // Main classes
#include "titrex.h"     // Exception classes
#include "titabitem.h"  // For class RtTableItem


//
// Convenience method to load accounting data from a file
//
void Titraqform::loadData(QFile &Fileobj)
{
    if (Fileobj.isOpen()) {             // Check state of file
        Fileobj.flush();                // Begin processing file cleanly
        QTextStream Asentry(&Fileobj);  // Convert data to stream
        this->loadData(Asentry);        // Pass off to do the real work
    }
    else {
        if (!Fileobj.open(IO_ReadOnly)) // Try to open file
            throw Genexcept("Could not read open accounting file.");
        QTextStream Asentry(&Fileobj);  // Convert data to stream
        this->loadData(Asentry);        // Pass off to do the real work
        Fileobj.close();                // Finish fileop by closing
    }
}

//
// Load accounting data from a stream
//
void Titraqform::loadData(QTextStream &Tstream)
{
    bool bValid = true; // Used to warn on invalid accounting data
    int nIter = 0;      // Iterator used in loop and also as a count

    // Optimize viewing by repainting cells only once after processing
    m_pMaintable->setUpdatesEnabled(false);

    // Set the table text by linewise reading from the input stream
    // and parsing date, time, account, and other columns out of it
    while (!Tstream.atEnd()) {
        QString Date, Account, Amount, Remark;      // Fields of a valid AS file

        QString Temp;                               // Used for linewise editing
        while (Temp.isEmpty() && !Tstream.atEnd())  // Strip out extra line feed
            Temp = Tstream.readLine();
        QTextStream Asline(&Temp, IO_ReadOnly);     // Convert a single line now

        if (nIter % g_knBlocks == 0) // Add blocks of rows to optimize loading
            m_pMaintable->setNumRows(m_pMaintable->numRows() + g_knBlocks);

        Asline >> Date; // Copy the date field
        if (Date != NULL)
            m_pMaintable->setText(nIter, 0, Date);
        else
            bValid = false;

        Asline >> Account;  // Copy to the bit bucket
        Asline >> Account;  // Copy the account field
        if (Account != NULL) {
            m_pMaintable->setItem(nIter, 4, new RtTableItem(m_pMaintable, QTableItem::WhenCurrent, Account));
        }
        else
            bValid = false;

        Asline >> Amount;   // Copy the amount field
        if (Amount != NULL)
            m_pMaintable->setText(nIter, 3, Amount);
        else
            bValid = false;

        Remark = Asline.read(); // Copy the remark field
        if (Remark != NULL)
            m_pMaintable->setText(nIter, 5, Remark);

        nIter++; // The big increment
    }

    m_pMaintable->setUpdatesEnabled(true);      // Update and repaint
    m_pMaintable->setNumRows(nIter - 1);        // Trim excess rows
    m_pMaintable->setCurrentCell(nIter - 1, 0); // Move focus to last row

    if (!bValid)
        throw Genexcept("Warning, invalid accounting data.");
}

//
// Convenience method to save accounting data to a file
//
void Titraqform::saveData(QFile &Fileobj)
{
    if (Fileobj.isOpen()) {             // Check state of file
        Fileobj.flush();                // Begin processing file cleanly
        QTextStream Asentry(&Fileobj);  // Convert data to stream
        this->saveData(Asentry);        // Pass off to do the real work
    }
    else {
        if (!Fileobj.open(IO_WriteOnly)) // Try to open file
            throw Genexcept("Could not write open accounting file.");
        QTextStream Asentry(&Fileobj);  // Convert data to stream
        this->saveData(Asentry);        // Pass off to do the real work
        Fileobj.close();                // Finish fileop by closing
    }
}

//
// Save accounting data to a stream
//
void Titraqform::saveData(QTextStream &Tstream)
{
    const int nRows = m_pMaintable->numRows();      // Max rows used in loop
    QString Tempfield;                              // Current field string
    bool bValid = true;                             // Warn on invalid data

    // Linewise save from the main table date, time, account, and others
    for (int nIter = 0; nIter <= nRows; nIter++) {
        Tempfield = m_pMaintable->text(nIter, 0);   // Load date field text
        if (Tempfield != NULL)
            Tstream << Tempfield;                   // Save date field text
        else
            bValid = false;

        Tstream << trUtf8(" ") << trUtf8("user");   // Save user field text

        Tempfield = m_pMaintable->text(nIter, 1);   // Load start field text
        if (Tempfield != NULL)
            Tstream << trUtf8(" ") << Tempfield;    // Save start field text
//        else
//            bValid = false;

        Tempfield = m_pMaintable->text(nIter, 2);   // Load end field text
        if (Tempfield != NULL)
            Tstream << trUtf8(" ") << Tempfield;    // Save end field text
//        else
//            bValid = false;

        Tempfield = m_pMaintable->text(nIter, 4);   // Load amount field text
        if (Tempfield != NULL)
            Tstream << trUtf8(" ") << Tempfield;    // Save amount field text
        else
            bValid = false;

        Tempfield = m_pMaintable->text(nIter, 3);   // Load acct field text
        if (Tempfield != NULL)
            Tstream << trUtf8(" ") << Tempfield;    // Save acct field text
        else
            bValid = false;

        Tempfield = m_pMaintable->text(nIter, 5);   // Load remark field text
        if (Tempfield != NULL)
            Tstream << trUtf8(" ") << Tempfield;    // Save remark field text
        else
            bValid = false;

        Tstream << endl;                            // Append a newline
    }
}

CVSTrac 2.0.1