xref: /haiku/src/apps/mediaconverter/MediaFileListView.cpp (revision 1c992a5285e0c881abfbba1de9d9de04f85ed790)
16af4da5dSStephan Aßmus // Copyright 1999, Be Incorporated. All Rights Reserved.
26af4da5dSStephan Aßmus // Copyright 2000-2004, Jun Suzuki. All Rights Reserved.
3*1c992a52SStephan Aßmus // Copyright 2007, 2009 Stephan Aßmus. All Rights Reserved.
46af4da5dSStephan Aßmus // This file may be used under the terms of the Be Sample Code License.
5*1c992a52SStephan Aßmus 
6*1c992a52SStephan Aßmus 
76af4da5dSStephan Aßmus #include "MediaFileListView.h"
86af4da5dSStephan Aßmus 
9*1c992a52SStephan Aßmus #include <new>
10*1c992a52SStephan Aßmus 
116af4da5dSStephan Aßmus #include <Application.h>
126af4da5dSStephan Aßmus #include <MediaFile.h>
136af4da5dSStephan Aßmus #include <Messenger.h>
146af4da5dSStephan Aßmus 
156af4da5dSStephan Aßmus #include "MediaConverterWindow.h"
166af4da5dSStephan Aßmus #include "MessageConstants.h"
176af4da5dSStephan Aßmus 
186af4da5dSStephan Aßmus 
196af4da5dSStephan Aßmus // #pragma mark - MediaFileListItem
206af4da5dSStephan Aßmus 
216af4da5dSStephan Aßmus 
226af4da5dSStephan Aßmus MediaFileListItem::MediaFileListItem(BMediaFile* file, const entry_ref& ref)
23*1c992a52SStephan Aßmus 	:
24*1c992a52SStephan Aßmus 	BStringItem(ref.name),
256af4da5dSStephan Aßmus 	fRef(ref),
266af4da5dSStephan Aßmus 	fMediaFile(file)
276af4da5dSStephan Aßmus {
286af4da5dSStephan Aßmus }
296af4da5dSStephan Aßmus 
306af4da5dSStephan Aßmus 
316af4da5dSStephan Aßmus MediaFileListItem::~MediaFileListItem()
326af4da5dSStephan Aßmus {
336af4da5dSStephan Aßmus 	delete fMediaFile;
346af4da5dSStephan Aßmus }
356af4da5dSStephan Aßmus 
366af4da5dSStephan Aßmus 
376af4da5dSStephan Aßmus // #pragma mark - MediaFileListView
386af4da5dSStephan Aßmus 
396af4da5dSStephan Aßmus 
406af4da5dSStephan Aßmus MediaFileListView::MediaFileListView(BRect frame, uint32 resizingMode)
416af4da5dSStephan Aßmus 	: BListView(frame, "MediaFileListView", B_SINGLE_SELECTION_LIST, resizingMode,
426af4da5dSStephan Aßmus 				B_WILL_DRAW | B_NAVIGABLE | B_FRAME_EVENTS)
436af4da5dSStephan Aßmus {
446af4da5dSStephan Aßmus 	fEnabled = true;
456af4da5dSStephan Aßmus }
466af4da5dSStephan Aßmus 
476af4da5dSStephan Aßmus 
486af4da5dSStephan Aßmus MediaFileListView::~MediaFileListView()
496af4da5dSStephan Aßmus {
506af4da5dSStephan Aßmus 	BListItem *item;
516af4da5dSStephan Aßmus 	while ((item = RemoveItem((int32)0)) != NULL) {
526af4da5dSStephan Aßmus 		delete item;
536af4da5dSStephan Aßmus 	}
546af4da5dSStephan Aßmus }
556af4da5dSStephan Aßmus 
566af4da5dSStephan Aßmus 
576af4da5dSStephan Aßmus void
586af4da5dSStephan Aßmus MediaFileListView::SetEnabled(bool enabled)
596af4da5dSStephan Aßmus {
606af4da5dSStephan Aßmus 	if (enabled == fEnabled)
616af4da5dSStephan Aßmus 		return;
626af4da5dSStephan Aßmus 
636af4da5dSStephan Aßmus 	fEnabled = enabled;
646af4da5dSStephan Aßmus 	// TODO: visual indication of enabled status?
656af4da5dSStephan Aßmus }
666af4da5dSStephan Aßmus 
676af4da5dSStephan Aßmus 
686af4da5dSStephan Aßmus bool
696af4da5dSStephan Aßmus MediaFileListView::IsEnabled() const
706af4da5dSStephan Aßmus {
716af4da5dSStephan Aßmus 	return fEnabled;
726af4da5dSStephan Aßmus }
736af4da5dSStephan Aßmus 
746af4da5dSStephan Aßmus 
75*1c992a52SStephan Aßmus bool
76*1c992a52SStephan Aßmus MediaFileListView::AddMediaItem(BMediaFile* file, const entry_ref& ref)
776af4da5dSStephan Aßmus {
78*1c992a52SStephan Aßmus 	MediaFileListItem* item = new(std::nothrow) MediaFileListItem(file, ref);
79*1c992a52SStephan Aßmus 	if (item == NULL || !AddItem(item)) {
80*1c992a52SStephan Aßmus 		delete item;
81*1c992a52SStephan Aßmus 		return false;
82*1c992a52SStephan Aßmus 	}
836af4da5dSStephan Aßmus 	be_app_messenger.SendMessage(FILE_LIST_CHANGE_MESSAGE);
84*1c992a52SStephan Aßmus 	return true;
856af4da5dSStephan Aßmus }
866af4da5dSStephan Aßmus 
876af4da5dSStephan Aßmus 
886af4da5dSStephan Aßmus void
896af4da5dSStephan Aßmus MediaFileListView::KeyDown(const char *bytes, int32 numBytes)
906af4da5dSStephan Aßmus {
916af4da5dSStephan Aßmus 	switch (bytes[0]) {
926af4da5dSStephan Aßmus 		case B_DELETE:
936af4da5dSStephan Aßmus 			if (IsEnabled()) {
946af4da5dSStephan Aßmus 				int32 selection = CurrentSelection();
956af4da5dSStephan Aßmus 				if (selection >= 0) {
966af4da5dSStephan Aßmus 					delete RemoveItem(selection);
976af4da5dSStephan Aßmus 					// select the previous item
986af4da5dSStephan Aßmus 					int32 count = CountItems();
996af4da5dSStephan Aßmus 					if (selection >= count)
1006af4da5dSStephan Aßmus 						selection = count - 1;
1016af4da5dSStephan Aßmus 					Select(selection);
1026af4da5dSStephan Aßmus 					be_app_messenger.SendMessage(FILE_LIST_CHANGE_MESSAGE);
1036af4da5dSStephan Aßmus 				}
1046af4da5dSStephan Aßmus 			}
1056af4da5dSStephan Aßmus 			break;
1066af4da5dSStephan Aßmus 		default:
1076af4da5dSStephan Aßmus 			BListView::KeyDown(bytes, numBytes);
1086af4da5dSStephan Aßmus 	}
1096af4da5dSStephan Aßmus }
1106af4da5dSStephan Aßmus 
1116af4da5dSStephan Aßmus 
1126af4da5dSStephan Aßmus void
1136af4da5dSStephan Aßmus MediaFileListView::SelectionChanged()
1146af4da5dSStephan Aßmus {
1156af4da5dSStephan Aßmus 	MediaConverterWindow* win = dynamic_cast<MediaConverterWindow*>(Window());
1166af4da5dSStephan Aßmus 	if (win != NULL)
1176af4da5dSStephan Aßmus 		win->SourceFileSelectionChanged();
1186af4da5dSStephan Aßmus }
1196af4da5dSStephan Aßmus 
120