1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim:set ts=2 sw=2 sts=2 et cindent tw=79 ft=cpp: */
4 * Copyright (C) 2007 Sergey Yanovich <ynvich@gmail.com>
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation; either version 2 of the
9 * License, or (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
16 * You should have received a copy of the GNU General Public
17 * License along with this program; if not, write to the
18 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 * Boston, MA 02111-1307, USA.
22 #include <abstract/aacore.h>
25 #include "nsServiceManagerUtils.h"
26 #include "nsStringAPI.h"
27 #include "nsEmbedString.h"
30 #include "unstable/nsIArray.h"
31 #include "unstable/nsArrayUtils.h"
32 #include "unstable/nsITreeColumns.h"
33 #include "unstable/nsIAtom.h"
34 #include "unstable/nsIAtomService.h"
36 /* Project includes */
37 #include <abstract/base/aaIEntity.h>
38 #include <abstract/base/aaIFlow.h>
39 #include <abstract/base/aaIResource.h>
40 #include <abstract/base/aaIFact.h>
41 #include <abstract/base/aaITransaction.h>
42 #include <abstract/storage/aaILoadQuery.h>
43 #include <abstract/report/aaITranscript.h>
44 #include <abstract/view/aaViewUtils.h>
45 #include "aaTreeView.h"
46 #include "aaTreeViewTranscript.h"
48 aaTreeViewTranscript::aaTreeViewTranscript()
52 aaTreeViewTranscript::~aaTreeViewTranscript()
56 NS_IMPL_ISUPPORTS_INHERITED0(aaTreeViewTranscript
, aaTreeView
)
60 chooseSide(aaIFact
*fact
, PRInt64 ownId
)
65 if (fact
->PickTakeFrom() && fact
->PickTakeFrom()->PickId() == ownId
)
72 aaTreeViewTranscript::getColumn0(aaITransaction
*txn
, PRInt64 flowId
,
75 if (! txn
->PickFact())
78 assignDate(_retval
, txn
->PickFact()->PickTime());
83 aaTreeViewTranscript::getColumn1(aaITransaction
*txn
, PRInt64 flowId
,
86 if (! txn
->PickFact())
89 aaIFlow
*flow
= nsnull
;
90 if (chooseSide(txn
->PickFact(), flowId
)) {
91 flow
= txn
->PickFact()->PickTakeFrom();
93 flow
= txn
->PickFact()->PickGiveTo();
97 flow
->GetTag(_retval
);
103 aaTreeViewTranscript::getColumn2(aaITransaction
*txn
, PRInt64 flowId
,
106 if (! txn
->PickFact())
109 if (chooseSide(txn
->PickFact(), flowId
)) {
110 assignDouble(_retval
, txn
->PickValue());
117 aaTreeViewTranscript::getColumn3(aaITransaction
*txn
, PRInt64 flowId
,
120 if (! txn
->PickFact())
123 if (! chooseSide(txn
->PickFact(), flowId
)) {
124 assignDouble(_retval
, txn
->PickValue());
130 nsresult (*const aaTreeViewTranscript::colFuncs
[])(aaITransaction
*,
131 PRInt64 flowId
, nsAString
&) =
133 &aaTreeViewTranscript::getColumn0
134 ,&aaTreeViewTranscript::getColumn1
135 ,&aaTreeViewTranscript::getColumn2
136 ,&aaTreeViewTranscript::getColumn3
139 /* Private functions */
141 aaTreeViewTranscript::doGetCellText(PRInt32 row
, nsITreeColumn
*col
,
147 PRInt32 ci
= getColumnIndex(col
, sizeof(colFuncs
));
148 NS_ENSURE_TRUE(ci
>= 0, NS_OK
);
150 nsCOMPtr
<aaITransaction
> txn(do_QueryElementAt(mDataSet
, row
, &rv
));
151 NS_ENSURE_SUCCESS(rv
, rv
);
152 NS_ENSURE_TRUE(txn
, NS_OK
);
154 nsCOMPtr
<aaITranscript
> transcript(do_QueryInterface(mDataSet
, &rv
));
155 NS_ENSURE_SUCCESS(rv
, rv
);
157 if (! transcript
->PickLoadedFlow())
159 return colFuncs
[ci
](txn
,transcript
->PickLoadedFlow()->PickId(), _retval
);