diff --git a/src/gnc/Account.hpp b/src/gnc/Account.hpp index dcfae1019e..e0c169b740 100644 --- a/src/gnc/Account.hpp +++ b/src/gnc/Account.hpp @@ -42,8 +42,6 @@ extern "C" namespace gnc { -typedef QList< ::Account*> AccountQList; - /** Wrapper around a gnucash ::Account pointer with C++ methods for * easier setter and getter access. @@ -96,18 +94,6 @@ public: gint get_tree_depth () const { return gnc_account_get_tree_depth(gobj()); } //@} - - static AccountQList fromGList(GList* glist) - { - AccountQList result; - GList* list = glist; - while (list) - { - result.append(reinterpret_cast< ::Account*>(list->data)); - list = g_list_next(list); - } - return result; - } }; } // END namespace gnc diff --git a/src/gnc/AccountItemModel.cpp b/src/gnc/AccountItemModel.cpp index 459ab8b833..8fd025e9f7 100644 --- a/src/gnc/AccountItemModel.cpp +++ b/src/gnc/AccountItemModel.cpp @@ -180,7 +180,7 @@ AccountListModel::AccountListModel(Account rootaccount, QObject *parent) void AccountListModel::recreateCache() { - m_list = Account::fromGList(m_root.get_descendants()); + m_list = accountFromGList(m_root.get_descendants()); reset(); } diff --git a/src/gnc/AccountItemModel.hpp b/src/gnc/AccountItemModel.hpp index 7bf36652e9..04cfde8bb9 100644 --- a/src/gnc/AccountItemModel.hpp +++ b/src/gnc/AccountItemModel.hpp @@ -63,7 +63,11 @@ protected: Account m_root; }; - +typedef QList< ::Account*> AccountQList; +inline AccountQList accountFromGList(GList *glist) +{ + return fromGList(glist); +} /** Specialization of the account tree model for when all accounts * should be viewed as a flat list instead of a tree. Only the index() diff --git a/src/gnc/Numeric.hpp b/src/gnc/Numeric.hpp index b87200e4a9..7bbbb3da20 100644 --- a/src/gnc/Numeric.hpp +++ b/src/gnc/Numeric.hpp @@ -80,6 +80,20 @@ inline ::Timespec toTimespec(const QDateTime& qdt) return result; } +/** Copies the pointer values from the given GList into the specified output + * list type, such as std::vector. */ +template +ResultListType fromGList(GList* glist) +{ + ResultListType result; + GList* list = glist; + while (list) + { + result.push_back(reinterpret_cast< typename ResultListType::value_type >(list->data)); + list = g_list_next(list); + } + return result; +} /** Wrapper around a gnucash ::GNCPrintAmountInfo structure with C++ diff --git a/src/gnc/Split.hpp b/src/gnc/Split.hpp index b67ac1a882..59fa56fa18 100644 --- a/src/gnc/Split.hpp +++ b/src/gnc/Split.hpp @@ -37,6 +37,7 @@ extern "C" #include "gnc/GncInstance.hpp" #include "gnc/Numeric.hpp" +#include namespace gnc { @@ -45,7 +46,7 @@ class Account; class Transaction; class TmpTransaction; -typedef QList< ::Split*> SplitQList; +typedef std::vector< ::Split*> SplitQList; /** Wrapper around a gnucash ::Split pointer with C++ methods for @@ -98,17 +99,9 @@ public: Numeric getReconciledBalance() const { return xaccSplitGetReconciledBalance(gobj()); } - static SplitQList fromGList(GList* glist) { - SplitQList result; - GList* list = glist; - while (list) - { - result.append(reinterpret_cast< ::Split*>(list->data)); - list = g_list_next(list); - } - return result; + return gnc::fromGList(glist); } }; diff --git a/src/gnc/fpo/ViewletModel.cpp b/src/gnc/fpo/ViewletModel.cpp index 679a1ca001..04c5d7d841 100644 --- a/src/gnc/fpo/ViewletModel.cpp +++ b/src/gnc/fpo/ViewletModel.cpp @@ -25,7 +25,7 @@ ViewletModel::leftVGenerate(::Account *selectedAccount) ::Account *rootAccount = gnc_book_get_root_account(book); GList *accountsGList = gnc_account_get_descendants(rootAccount); - AccountQList accountsList = Account::fromGList(accountsGList); + AccountQList accountsList = accountFromGList(accountsGList); int numOfAccounts = accountsList.count(); qDebug()<<"Total num of accounts: "<(list->data)); - list = g_list_next(list); - } - return result; - } -#endif - }; } // END namespace gnc diff --git a/src/optional/gtkmm/gncmm/Numeric.hpp b/src/optional/gtkmm/gncmm/Numeric.hpp index 69079fc020..d1c748bf63 100644 --- a/src/optional/gtkmm/gncmm/Numeric.hpp +++ b/src/optional/gtkmm/gncmm/Numeric.hpp @@ -80,6 +80,20 @@ inline ::Timespec toTimespec(const Glib::DateTime& gdt) } #endif +/** Copies the pointer values from the given GList into the specified output + * list type, such as std::vector. */ +template +ResultListType fromGList(GList* glist) +{ + ResultListType result; + GList* list = glist; + while (list) + { + result.push_back(reinterpret_cast< typename ResultListType::value_type >(list->data)); + list = g_list_next(list); + } + return result; +} /** Wrapper around a gnucash ::GNCPrintAmountInfo structure with C++ * methods for easier setter and getter access. diff --git a/src/optional/gtkmm/gncmm/Split.cpp b/src/optional/gtkmm/gncmm/Split.cpp index 8aa4c2ec54..51517ab6af 100644 --- a/src/optional/gtkmm/gncmm/Split.cpp +++ b/src/optional/gtkmm/gncmm/Split.cpp @@ -189,16 +189,17 @@ void TmpSplit::clear(::Account* account) m_value = Numeric::zero(); } -void TmpSplit::copyInto(Transaction& t) const +void TmpSplit::copyInto(Glib::RefPtr t) const { -// Glib::RefPtr s(Glib::wrap(xaccMallocSplit(t.getBook()->gobj()))); -// s->setAccount(m_account); -// s->setParent(t); -// s->setMemo(m_memo); -// s->setAction(m_action); -// s->setReconcile(m_reconcile); -// s->setAmount(m_amount); -// s->setValue(m_value); + g_assert(t); + Glib::RefPtr s(Glib::wrap(xaccMallocSplit(t->getBook()->gobj()))); + s->setAccount(m_account); + s->setParent(t); + s->setMemo(m_memo); + s->setAction(m_action); + s->setReconcile(m_reconcile); + s->setAmount(m_amount); + s->setValue(m_value); } } // END namespace gnc diff --git a/src/optional/gtkmm/gncmm/Split.hpp b/src/optional/gtkmm/gncmm/Split.hpp index 1353244437..a1ada3375a 100644 --- a/src/optional/gtkmm/gncmm/Split.hpp +++ b/src/optional/gtkmm/gncmm/Split.hpp @@ -189,19 +189,10 @@ public: } -#if 0 static SplitQList fromGList(GList* glist) { - SplitQList result; - GList* list = glist; - while (list) - { - result.append(reinterpret_cast< ::Split*>(list->data)); - list = g_list_next(list); - } - return result; + return gnc::fromGList(glist); } -#endif }; @@ -232,7 +223,7 @@ public: /** Copies the content of this tmp split into the given real * transaction by allocating a new real gnc::Split and adding it * to the given real gnc::Transaction. */ - void copyInto(Transaction& t) const; + void copyInto(Glib::RefPtr t) const; ::Account* getAccount() const { diff --git a/src/optional/gtkmm/gncmm/Transaction.cpp b/src/optional/gtkmm/gncmm/Transaction.cpp index a7fef88c7f..3d08924e50 100644 --- a/src/optional/gtkmm/gncmm/Transaction.cpp +++ b/src/optional/gtkmm/gncmm/Transaction.cpp @@ -126,17 +126,21 @@ Glib::RefPtr Transaction::getSplit(int i) const { return Glib::wrap(xaccTransGetSplit(gobj(), i)); } -void Transaction::appendSplit(Split& split) +void Transaction::appendSplit(Glib::RefPtr split) { - xaccSplitSetParent(split.gobj(), gobj()); + g_assert(split); + xaccSplitSetParent(split->gobj(), gobj()); } int Transaction::getSplitIndex(const Split& split) const { return xaccTransGetSplitIndex(gobj(), split.gobj()); } -::Transaction* Transaction::newInstance(const ::QofBook* b) +::Transaction* Transaction::newInstance(const Glib::RefPtr b) { - return xaccMallocTransaction (const_cast< ::QofBook*>(b)); + if (b) + return xaccMallocTransaction (const_cast< ::QofBook*>(b->gobj())); + else + return NULL; } // //////////////////////////////////////////////////////////// @@ -151,14 +155,9 @@ TmpTransaction::TmpTransaction(const Transaction& t) , m_notes(t.getNotes()) , m_commodity(t.getCurrency()) , m_datePosted(t.getDatePosted()) - //, m_dateTimeEntered(t.getDateEntered()) + , m_dateTimeEntered(t.getDateEnteredTT()) { - SplitQList slist -#if HAVE_GLIBMM_VECTORUTILS_H - = Glib::ListHandlier >::list_to_vector(t.getSplitList()); -#else - ; -#endif + SplitQList slist = Split::fromGList(t.getSplitList()); for (SplitQList::const_iterator iter = slist.begin(); iter != slist.end(); ++iter) { m_splits.push_back(TmpSplit(Glib::wrap(*iter), this)); @@ -178,7 +177,7 @@ void TmpTransaction::resetContent() m_notes.clear(); m_commodity.reset(); m_datePosted = Glib::Date(); - //m_dateTimeEntered = QDateTime(); + m_dateTimeEntered = 0; for (int i = 0; i < m_splits.size(); ++i) { TmpSplit& split = m_splits[i]; @@ -196,13 +195,13 @@ void TmpTransaction::copyTo(Glib::RefPtr t) const t->setNotes(m_notes); t->setCurrency(m_commodity); t->setDatePosted(m_datePosted); - //t->setDateEntered(m_dateTimeEntered); + t->setDateEntered(m_dateTimeEntered); for (int i = 0; i < m_splits.size(); ++i) { - //m_splits[i].copyInto(t); + m_splits[i].copyInto(t); } } -#if 0 + Glib::RefPtr TmpTransaction::createAsReal() const { assert (!m_splits.empty()); @@ -210,13 +209,13 @@ Glib::RefPtr TmpTransaction::createAsReal() const assert (acc); Glib::RefPtr book(acc->getBook()); assert (book); - Glib::RefPtr trans(Glib::wrap(Transaction::newInstance(book->gobj()))); + Glib::RefPtr trans(Glib::wrap(Transaction::newInstance(book))); trans->beginEdit(); copyTo(trans); trans->commitEdit(); return trans; } -#endif + void TmpTransaction::push_back(const TmpSplit& s) { m_splits.push_back(s); diff --git a/src/optional/gtkmm/gncmm/Transaction.hpp b/src/optional/gtkmm/gncmm/Transaction.hpp index 70f1019241..bc2edfcd8c 100644 --- a/src/optional/gtkmm/gncmm/Transaction.hpp +++ b/src/optional/gtkmm/gncmm/Transaction.hpp @@ -155,7 +155,7 @@ public: return xaccTransCountSplits(gobj()); } Glib::RefPtr findSplitByAccount(const Account& acc) const; - void appendSplit(Split& split); + void appendSplit(Glib::RefPtr split); Glib::RefPtr getSplit(int i) const; int getSplitIndex(const Split& split) const; ::SplitList* getSplitList() const @@ -189,14 +189,22 @@ public: { xaccTransSetDatePostedGDate(gobj(), *d.gobj()); } -// void setDateEntered(const Glib::DateTime& t) { xaccTransSetDateEnteredSecs(gobj(), t.toTime_t()); } Glib::Date getDatePosted() const { return Glib::Date(xaccTransGetDatePostedGDate(gobj())); } + void setDateEntered(time_t t) + { + xaccTransSetDateEnteredSecs(gobj(), t); + } +// void setDateEntered(const Glib::DateTime& t) { xaccTransSetDateEnteredSecs(gobj(), t.toTime_t()); } + time_t getDateEnteredTT() const + { + return timespecToTime_t(xaccTransRetDateEnteredTS(gobj())); + } //Glib::DateTime getDateEntered() const { return toGDateTime(xaccTransRetDateEnteredTS(gobj())); } - static ::Transaction* newInstance(const ::QofBook* b); + static ::Transaction* newInstance(const Glib::RefPtr b); }; @@ -287,6 +295,14 @@ public: m_datePosted = v; } + time_t getDateEnteredTT() const + { + return m_dateTimeEntered; + } + void setDateEntered(time_t v) + { + m_dateTimeEntered = v; + } //Glib::DateTime getDateEntered() const { return m_dateTimeEntered; } //void setDateEntered(const Glib::DateTime& v) { m_dateTimeEntered = v; } @@ -297,6 +313,7 @@ private: TmpSplitList m_splits; Glib::RefPtr m_commodity; Glib::Date m_datePosted; + time_t m_dateTimeEntered; //Glib::DateTime m_dateTimeEntered; };