summaryrefslogtreecommitdiffstats
path: root/kmymoney2/mymoney/storage/mymoneystoragexml.h
blob: b74626dc64afbf626eeb77658befb49cf31e7684 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/***************************************************************************
                          mymoneystoragexml.h  -  description
                             -------------------
    begin                : Thu Oct 24 2002
    copyright            : (C) 2002 by Kevin Tambascio
                           (C) 2004 by Thomas Baumgart
    email                : Thomas Baumgart <ipwizard@users.sourceforge.net>
                           Kevin Tambascio <ktambascio@users.sourceforge.net>
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

#ifndef MYMONEYSTORAGEXML_H
#define MYMONEYSTORAGEXML_H

// ----------------------------------------------------------------------------
// QT Includes

#include <tqdom.h>
#include <tqdatastream.h>
class TQIODevice;

// ----------------------------------------------------------------------------
// Project Includes

#include "imymoneyserialize.h"
#include "imymoneystorageformat.h"
class MyMoneyXmlContentHandler;

/**
  *@author Kevin Tambascio (ktambascio@users.sourceforge.net)
  */

#define VERSION_0_60_XML  0x10000010    // Version 0.5 file version info
#define VERSION_0_61_XML  0x10000011    // use 8 bytes for MyMoneyMoney objects

class MyMoneyStorageXML : public IMyMoneyStorageFormat
{
  friend class MyMoneyXmlContentHandler;
public:
  MyMoneyStorageXML();
  virtual ~MyMoneyStorageXML();

  enum fileVersionDirectionType {
    Reading = 0,          /**< version of file to be read */
    Writing = 1           /**< version to be used when writing a file */
  };

protected:
   void          setProgressCallback(void(*callback)(int, int, const TQString&));
   void          signalProgress(int current, int total, const TQString& = "");

  /**
    * This method returns the version of the underlying file. It
    * is used by the MyMoney objects contained in a MyMoneyStorageBin object (e.g.
    * MyMoneyAccount, MyMoneyInstitution, MyMoneyTransaction, etc.) to
    * determine the tqlayout used when reading/writing a persistant file.
    * A parameter is used to determine the direction.
    *
    * @param dir information about the direction (reading/writing). The
    *            default is reading.
    *
    * @return version TQString of file's version
    *
    * @see m_fileVersionRead, m_fileVersionWrite
    */
  static unsigned int fileVersion(fileVersionDirectionType dir = Reading);

  TQValueList<TQDomElement> readElements(TQString groupTag, TQString itemTag = TQString());

  bool readFileInformation(const TQDomElement& fileInfo);
  virtual void writeFileInformation(TQDomElement& fileInfo);

  virtual void writeUserInformation(TQDomElement& userInfo);

  virtual void writeInstitution(TQDomElement& institutions, const MyMoneyInstitution& i);
  virtual void writeInstitutions(TQDomElement& institutions);

  virtual void writePrices(TQDomElement& prices);
  virtual void writePricePair(TQDomElement& price, const MyMoneyPriceEntries& p);
  virtual void writePrice(TQDomElement& prices, const MyMoneyPrice& p);

  virtual void writePayees(TQDomElement& payees);
  virtual void writePayee(TQDomElement& payees, const MyMoneyPayee& p);

  virtual void writeAccounts(TQDomElement& accounts);
  virtual void writeAccount(TQDomElement& accounts, const MyMoneyAccount& p);

  virtual void writeTransactions(TQDomElement& transactions);
  virtual void writeTransaction(TQDomElement& transactions, const MyMoneyTransaction& tx);

  virtual void writeSchedules(TQDomElement& scheduled);
  virtual void writeSchedule(TQDomElement& scheduledTx, const MyMoneySchedule& tx);

  virtual void writeReports(TQDomElement& e);
  virtual void writeBudgets(TQDomElement& e);
  virtual void writeBudget(TQDomElement& budget, const MyMoneyBudget& b);

  virtual void writeSecurities(TQDomElement& securities);
  virtual void writeSecurity(TQDomElement& securityElement, const MyMoneySecurity& security);

  virtual void writeCurrencies(TQDomElement& currencies);

  virtual TQDomElement writeKeyValuePairs(const TQMap<TQString, TQString> pairs);

  virtual void readFile(TQIODevice* s, IMyMoneySerialize* storage);
  virtual void writeFile(TQIODevice* s, IMyMoneySerialize* storage);

  bool readUserInformation(const TQDomElement& userElement);

  void readPricePair(const TQDomElement& pricePair);
  const MyMoneyPrice readPrice(const TQString& from, const TQString& to, const TQDomElement& price);

  TQDomElement findChildElement(const TQString& name, const TQDomElement& root);

private:
  void (*m_progressCallback)(int, int, const TQString&);

protected:
  IMyMoneySerialize *m_storage;
  TQDomDocument *m_doc;

private:
  /// \internal d-pointer class.
  class Private;
  /// \internal d-pointer instance.
  Private* const d;

  /**
    * This member is used to store the file version information
    * obtained while reading a file.
    */
  static unsigned int fileVersionRead;

  /**
    * This member is used to store the file version information
    * to be used when writing a file.
    */
  static unsigned int fileVersionWrite;
  /**
    * This member keeps the id of the base currency. We need this
    * temporarily to convert the price history from the old to the
    * new format. This should go at some time beyond 0.8 (ipwizard)
    */
  TQString m_baseCurrencyId;

};

#endif