xref: /haiku/src/apps/mediaconverter/MediaFileListView.cpp (revision 6af4da5dcbc291265146f6cd6b6c7708d7d99a44)
1*6af4da5dSStephan Aßmus // Copyright 1999, Be Incorporated. All Rights Reserved.
2*6af4da5dSStephan Aßmus // Copyright 2000-2004, Jun Suzuki. All Rights Reserved.
3*6af4da5dSStephan Aßmus // Copyright 2007, Stephan Aßmus. All Rights Reserved.
4*6af4da5dSStephan Aßmus // This file may be used under the terms of the Be Sample Code License.
5*6af4da5dSStephan Aßmus #include "MediaFileListView.h"
6*6af4da5dSStephan Aßmus 
7*6af4da5dSStephan Aßmus #include <Application.h>
8*6af4da5dSStephan Aßmus #include <MediaFile.h>
9*6af4da5dSStephan Aßmus #include <Messenger.h>
10*6af4da5dSStephan Aßmus 
11*6af4da5dSStephan Aßmus #include "MediaConverterWindow.h"
12*6af4da5dSStephan Aßmus #include "MessageConstants.h"
13*6af4da5dSStephan Aßmus 
14*6af4da5dSStephan Aßmus 
15*6af4da5dSStephan Aßmus // #pragma mark - MediaFileListItem
16*6af4da5dSStephan Aßmus 
17*6af4da5dSStephan Aßmus 
18*6af4da5dSStephan Aßmus MediaFileListItem::MediaFileListItem(BMediaFile* file, const entry_ref& ref)
19*6af4da5dSStephan Aßmus 	: BStringItem(ref.name),
20*6af4da5dSStephan Aßmus 	  fRef(ref),
21*6af4da5dSStephan Aßmus 	  fMediaFile(file)
22*6af4da5dSStephan Aßmus {
23*6af4da5dSStephan Aßmus }
24*6af4da5dSStephan Aßmus 
25*6af4da5dSStephan Aßmus 
26*6af4da5dSStephan Aßmus MediaFileListItem::~MediaFileListItem()
27*6af4da5dSStephan Aßmus {
28*6af4da5dSStephan Aßmus 	delete fMediaFile;
29*6af4da5dSStephan Aßmus }
30*6af4da5dSStephan Aßmus 
31*6af4da5dSStephan Aßmus 
32*6af4da5dSStephan Aßmus // #pragma mark - MediaFileListView
33*6af4da5dSStephan Aßmus 
34*6af4da5dSStephan Aßmus 
35*6af4da5dSStephan Aßmus MediaFileListView::MediaFileListView(BRect frame, uint32 resizingMode)
36*6af4da5dSStephan Aßmus 	: BListView(frame, "MediaFileListView", B_SINGLE_SELECTION_LIST, resizingMode,
37*6af4da5dSStephan Aßmus 				B_WILL_DRAW | B_NAVIGABLE | B_FRAME_EVENTS)
38*6af4da5dSStephan Aßmus {
39*6af4da5dSStephan Aßmus 	fEnabled = true;
40*6af4da5dSStephan Aßmus }
41*6af4da5dSStephan Aßmus 
42*6af4da5dSStephan Aßmus 
43*6af4da5dSStephan Aßmus MediaFileListView::~MediaFileListView()
44*6af4da5dSStephan Aßmus {
45*6af4da5dSStephan Aßmus 	BListItem *item;
46*6af4da5dSStephan Aßmus 	while ((item = RemoveItem((int32)0)) != NULL) {
47*6af4da5dSStephan Aßmus 		delete item;
48*6af4da5dSStephan Aßmus 	}
49*6af4da5dSStephan Aßmus }
50*6af4da5dSStephan Aßmus 
51*6af4da5dSStephan Aßmus 
52*6af4da5dSStephan Aßmus void
53*6af4da5dSStephan Aßmus MediaFileListView::SetEnabled(bool enabled)
54*6af4da5dSStephan Aßmus {
55*6af4da5dSStephan Aßmus 	if (enabled == fEnabled)
56*6af4da5dSStephan Aßmus 		return;
57*6af4da5dSStephan Aßmus 
58*6af4da5dSStephan Aßmus 	fEnabled = enabled;
59*6af4da5dSStephan Aßmus 	// TODO: visual indication of enabled status?
60*6af4da5dSStephan Aßmus }
61*6af4da5dSStephan Aßmus 
62*6af4da5dSStephan Aßmus 
63*6af4da5dSStephan Aßmus bool
64*6af4da5dSStephan Aßmus MediaFileListView::IsEnabled() const
65*6af4da5dSStephan Aßmus {
66*6af4da5dSStephan Aßmus 	return fEnabled;
67*6af4da5dSStephan Aßmus }
68*6af4da5dSStephan Aßmus 
69*6af4da5dSStephan Aßmus 
70*6af4da5dSStephan Aßmus void
71*6af4da5dSStephan Aßmus MediaFileListView::AddItem(BMediaFile* file, const entry_ref& ref)
72*6af4da5dSStephan Aßmus {
73*6af4da5dSStephan Aßmus 	BListView::AddItem(new MediaFileListItem(file, ref));
74*6af4da5dSStephan Aßmus 	be_app_messenger.SendMessage(FILE_LIST_CHANGE_MESSAGE);
75*6af4da5dSStephan Aßmus }
76*6af4da5dSStephan Aßmus 
77*6af4da5dSStephan Aßmus 
78*6af4da5dSStephan Aßmus void
79*6af4da5dSStephan Aßmus MediaFileListView::KeyDown(const char *bytes, int32 numBytes)
80*6af4da5dSStephan Aßmus {
81*6af4da5dSStephan Aßmus 	switch (bytes[0]) {
82*6af4da5dSStephan Aßmus 		case B_DELETE:
83*6af4da5dSStephan Aßmus 			if (IsEnabled()) {
84*6af4da5dSStephan Aßmus 				int32 selection = CurrentSelection();
85*6af4da5dSStephan Aßmus 				if (selection >= 0) {
86*6af4da5dSStephan Aßmus 					delete RemoveItem(selection);
87*6af4da5dSStephan Aßmus 					// select the previous item
88*6af4da5dSStephan Aßmus 					int32 count = CountItems();
89*6af4da5dSStephan Aßmus 					if (selection >= count)
90*6af4da5dSStephan Aßmus 						selection = count - 1;
91*6af4da5dSStephan Aßmus 					Select(selection);
92*6af4da5dSStephan Aßmus 					be_app_messenger.SendMessage(FILE_LIST_CHANGE_MESSAGE);
93*6af4da5dSStephan Aßmus 				}
94*6af4da5dSStephan Aßmus 			}
95*6af4da5dSStephan Aßmus 			break;
96*6af4da5dSStephan Aßmus 		default:
97*6af4da5dSStephan Aßmus 			BListView::KeyDown(bytes, numBytes);
98*6af4da5dSStephan Aßmus 	}
99*6af4da5dSStephan Aßmus }
100*6af4da5dSStephan Aßmus 
101*6af4da5dSStephan Aßmus 
102*6af4da5dSStephan Aßmus void
103*6af4da5dSStephan Aßmus MediaFileListView::SelectionChanged()
104*6af4da5dSStephan Aßmus {
105*6af4da5dSStephan Aßmus 	MediaConverterWindow* win = dynamic_cast<MediaConverterWindow *>(Window());
106*6af4da5dSStephan Aßmus 	if (win != NULL)
107*6af4da5dSStephan Aßmus 		win->SourceFileSelectionChanged();
108*6af4da5dSStephan Aßmus }
109*6af4da5dSStephan Aßmus 
110