[storage] Repair 'state' - 'new'
[abstract.git] / view / aaTreeView.cpp
blob77716517ddda969c23bee963bbd4b633957b7b66
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: */
3 /*
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>
24 #include "nsCOMPtr.h"
25 #include "nsStringAPI.h"
26 #include "nsEmbedString.h"
27 #include "nsIDOMElement.h"
28 #include "nsIDOMNode.h"
29 #include "nsIDOMDocument.h"
30 #include "unstable/nsIDOMXULElement.h"
31 #include "nsIInterfaceRequestorUtils.h"
32 #include "nsISHistory.h"
34 /* Unfrozen API */
35 #include "unstable/nsITreeSelection.h"
36 #include "unstable/nsITreeColumns.h"
37 #include "unstable/nsIBoxObject.h"
38 #include "unstable/nsIArray.h"
39 #include "unstable/nsArrayUtils.h"
41 /* Project includes */
42 #include <abstract/storage/aaISession.h>
43 #include "aaTreeView.h"
45 aaTreeView::aaTreeView()
49 aaTreeView::~aaTreeView()
53 NS_IMPL_ISUPPORTS2(aaTreeView,
54 aaIDataTreeView,
55 nsITreeView)
57 NS_IMETHODIMP
58 aaTreeView::GetRowCount(PRInt32 *aRowCount)
60 NS_ENSURE_ARG_POINTER(aRowCount);
61 *aRowCount = 0;
62 if (! mDataSet)
63 return NS_OK;
65 return mDataSet->GetLength((PRUint32 *) aRowCount);
68 NS_IMETHODIMP
69 aaTreeView::GetSelection(nsITreeSelection * *aSelection)
71 NS_ENSURE_ARG_POINTER( aSelection );
72 NS_IF_ADDREF(*aSelection = mSelection);
73 return NS_OK;
75 NS_IMETHODIMP
76 aaTreeView::SetSelection(nsITreeSelection * aSelection)
78 mSelection = aSelection;
80 return NS_OK;
83 NS_IMETHODIMP
84 aaTreeView::GetRowProperties(PRInt32 index, nsISupportsArray *properties)
86 return NS_ERROR_NOT_IMPLEMENTED;
89 NS_IMETHODIMP
90 aaTreeView::GetCellProperties(PRInt32 row, nsITreeColumn *col, nsISupportsArray *properties)
92 return NS_ERROR_NOT_IMPLEMENTED;
95 NS_IMETHODIMP
96 aaTreeView::GetColumnProperties(nsITreeColumn *col, nsISupportsArray *properties)
98 return NS_ERROR_NOT_IMPLEMENTED;
101 NS_IMETHODIMP
102 aaTreeView::IsContainer(PRInt32 index, PRBool *_retval)
104 NS_ENSURE_ARG_POINTER(_retval);
105 *_retval = PR_FALSE;
106 return NS_OK;
109 NS_IMETHODIMP
110 aaTreeView::IsContainerOpen(PRInt32 index, PRBool *_retval)
112 return NS_ERROR_NOT_IMPLEMENTED;
115 NS_IMETHODIMP
116 aaTreeView::IsContainerEmpty(PRInt32 index, PRBool *_retval)
118 return NS_ERROR_NOT_IMPLEMENTED;
121 NS_IMETHODIMP
122 aaTreeView::IsSeparator(PRInt32 index, PRBool *_retval)
124 NS_ENSURE_ARG_POINTER(_retval);
125 *_retval = PR_FALSE;
126 return NS_OK;
129 NS_IMETHODIMP
130 aaTreeView::IsSorted(PRBool *_retval)
132 return NS_ERROR_NOT_IMPLEMENTED;
135 NS_IMETHODIMP
136 aaTreeView::CanDrop(PRInt32 index, PRInt32 orientation, PRBool *_retval)
138 return NS_ERROR_NOT_IMPLEMENTED;
141 NS_IMETHODIMP
142 aaTreeView::Drop(PRInt32 row, PRInt32 orientation)
144 return NS_ERROR_NOT_IMPLEMENTED;
147 NS_IMETHODIMP
148 aaTreeView::GetParentIndex(PRInt32 rowIndex, PRInt32 *_retval)
150 return NS_ERROR_NOT_IMPLEMENTED;
153 NS_IMETHODIMP
154 aaTreeView::HasNextSibling(PRInt32 rowIndex, PRInt32 afterIndex, PRBool *_retval)
156 NS_ENSURE_ARG_POINTER(_retval);
157 nsresult rv;
158 PRInt32 count;
159 rv = GetRowCount(&count);
160 NS_ENSURE_SUCCESS(rv, rv);
161 if (rowIndex == afterIndex && rowIndex < count) {
162 *_retval = PR_TRUE;
163 } else {
164 *_retval = PR_FALSE;
166 return NS_OK;
169 NS_IMETHODIMP
170 aaTreeView::GetLevel(PRInt32 index, PRInt32 *_retval)
172 NS_ENSURE_ARG_POINTER(_retval);
173 *_retval = 0;
174 return NS_OK;
177 NS_IMETHODIMP
178 aaTreeView::GetImageSrc(PRInt32 row, nsITreeColumn *col, nsAString & _retval)
180 return NS_ERROR_NOT_IMPLEMENTED;
183 NS_IMETHODIMP
184 aaTreeView::GetProgressMode(PRInt32 row, nsITreeColumn *col, PRInt32 *_retval)
186 return NS_ERROR_NOT_IMPLEMENTED;
189 NS_IMETHODIMP
190 aaTreeView::GetCellValue(PRInt32 row, nsITreeColumn *col, nsAString & _retval)
192 return NS_ERROR_NOT_IMPLEMENTED;
195 NS_IMETHODIMP
196 aaTreeView::GetCellText(PRInt32 row, nsITreeColumn *col, nsAString & _retval)
198 /**
199 * There may be a bug in <tree> implementation. This function is
200 * occasionally called after mTree is detached by SetTree(nsnull);
202 NS_ENSURE_TRUE(mDataSet, NS_ERROR_NOT_INITIALIZED);
203 NS_ENSURE_TRUE(row >= 0, NS_ERROR_INVALID_ARG);
204 return doGetCellText(row, col, _retval);
207 NS_IMETHODIMP
208 aaTreeView::SetTree(nsITreeBoxObject *tree)
210 mTree = tree;
211 return NS_OK;
214 NS_IMETHODIMP
215 aaTreeView::ToggleOpenState(PRInt32 index)
217 return NS_ERROR_NOT_IMPLEMENTED;
220 NS_IMETHODIMP
221 aaTreeView::CycleHeader(nsITreeColumn *col)
223 return NS_ERROR_NOT_IMPLEMENTED;
226 NS_IMETHODIMP
227 aaTreeView::SelectionChanged()
229 return NS_OK;
232 NS_IMETHODIMP
233 aaTreeView::CycleCell(PRInt32 row, nsITreeColumn *col)
235 return NS_ERROR_NOT_IMPLEMENTED;
238 NS_IMETHODIMP
239 aaTreeView::IsEditable(PRInt32 row, nsITreeColumn *col, PRBool *_retval)
241 return NS_ERROR_NOT_IMPLEMENTED;
244 NS_IMETHODIMP
245 aaTreeView::IsSelectable(PRInt32 row, nsITreeColumn *col, PRBool *_retval)
247 NS_ENSURE_ARG_POINTER(_retval);
248 *_retval = PR_TRUE;
249 return NS_OK;
252 NS_IMETHODIMP
253 aaTreeView::SetCellValue(PRInt32 row, nsITreeColumn *col, const nsAString & value)
255 return NS_ERROR_NOT_IMPLEMENTED;
258 NS_IMETHODIMP
259 aaTreeView::SetCellText(PRInt32 row, nsITreeColumn *col, const nsAString & value)
261 return NS_ERROR_NOT_IMPLEMENTED;
264 NS_IMETHODIMP
265 aaTreeView::PerformAction(const PRUnichar *action)
267 return NS_ERROR_NOT_IMPLEMENTED;
270 NS_IMETHODIMP
271 aaTreeView::PerformActionOnRow(const PRUnichar *action, PRInt32 row)
273 return NS_ERROR_NOT_IMPLEMENTED;
276 NS_IMETHODIMP
277 aaTreeView::PerformActionOnCell(const PRUnichar *action, PRInt32 row, nsITreeColumn *col)
279 return NS_ERROR_NOT_IMPLEMENTED;
282 /* aaIDataTreeView */
283 NS_IMETHODIMP
284 aaTreeView::GetDataSet(nsIArray ** aDataSet)
286 NS_ENSURE_ARG_POINTER(aDataSet);
287 NS_IF_ADDREF(*aDataSet = mDataSet);
288 return NS_OK;
290 NS_IMETHODIMP
291 aaTreeView::SetDataSet(nsIArray * aDataSet)
293 if (mTree) {
294 PRInt32 oldCount;
295 GetRowCount(&oldCount);
296 mTree->RowCountChanged(0, - oldCount);
299 if ((mDataSet = aDataSet) && mTree) {
300 PRInt32 newCount;
301 GetRowCount(&newCount);
302 mTree->RowCountChanged(0, newCount);
305 return NS_OK;
308 /* Private methods */
309 nsresult
310 aaTreeView::InitArray(nsIDOMDocument *doc)
312 nsresult rv;
313 nsCOMPtr<nsIDOMElement> docEl;
314 rv = doc->GetDocumentElement(getter_AddRefs( docEl ));
315 NS_ENSURE_SUCCESS(rv, rv);
317 nsCOMPtr<nsIDOMXULElement> xulEl(do_QueryInterface(docEl, &rv));
318 NS_ENSURE_SUCCESS(rv, rv);
320 nsCOMPtr<nsIBoxObject> box;
321 rv = xulEl->GetBoxObject(getter_AddRefs( box ));
322 NS_ENSURE_SUCCESS(rv, rv);
324 return box->GetPropertyAsSupports((const PRUnichar *)L"array",
325 getter_AddRefs( mDataSet ));