1/*
2 * Copyright (c) 1998-2007 Matthijs Hollemans
3 * All rights reserved. Distributed under the terms of the MIT License.
4 */
5
6#include "GrepListView.h"
7
8#include <Path.h>
9
10ResultItem::ResultItem(const entry_ref& ref)
11	: BStringItem("", 0, false),
12	  ref(ref)
13{
14	BEntry entry(&ref);
15	BPath path(&entry);
16	SetText(path.Path());
17}
18
19
20GrepListView::GrepListView()
21	: BOutlineListView("SearchResults",
22		B_MULTIPLE_SELECTION_LIST,
23		B_WILL_DRAW | B_NAVIGABLE)
24{
25}
26
27
28ResultItem*
29GrepListView::FindItem(const entry_ref& ref, int32* _index) const
30{
31	int32 count = FullListCountItems();
32	for (int32 i = 0; i < count; i++) {
33		ResultItem* item = dynamic_cast<ResultItem*>(FullListItemAt(i));
34		if (item == NULL)
35			continue;
36		if (item->ref == ref) {
37			*_index = i;
38			return item;
39		}
40	}
41	*_index = -1;
42	return NULL;
43}
44
45
46ResultItem*
47GrepListView::RemoveResults(const entry_ref& ref, bool completeItem)
48{
49	int32 index;
50	ResultItem* item = FindItem(ref, &index);
51	if (item == NULL)
52		return NULL;
53
54	// remove all the sub items
55	while (true) {
56		BListItem* subItem = FullListItemAt(index + 1);
57		if (subItem && subItem->OutlineLevel() > 0)
58			delete RemoveItem(index + 1);
59		else
60			break;
61	}
62
63	if (completeItem) {
64		// remove file item itself
65		delete RemoveItem(index);
66		item = NULL;
67	}
68
69	return item;
70}
71
72