xref: /haiku/src/apps/mediaconverter/MediaFileListView.cpp (revision ab05d36868610c8bce69e732e9cb3befb3d52c6b)
16af4da5dSStephan Aßmus // Copyright 1999, Be Incorporated. All Rights Reserved.
26af4da5dSStephan Aßmus // Copyright 2000-2004, Jun Suzuki. All Rights Reserved.
31c992a52SStephan 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.
51c992a52SStephan Aßmus 
61c992a52SStephan Aßmus 
76af4da5dSStephan Aßmus #include "MediaFileListView.h"
86af4da5dSStephan Aßmus 
91c992a52SStephan Aßmus #include <new>
101c992a52SStephan 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 
MediaFileListItem(BMediaFile * file,const entry_ref & ref)226af4da5dSStephan Aßmus MediaFileListItem::MediaFileListItem(BMediaFile* file, const entry_ref& ref)
231c992a52SStephan Aßmus 	:
241c992a52SStephan 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 
~MediaFileListItem()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 
MediaFileListView()40dd55ed1aSAlex Wilson MediaFileListView::MediaFileListView()
41dd55ed1aSAlex Wilson 	:
42dd55ed1aSAlex Wilson 	BListView("MediaFileListView", B_SINGLE_SELECTION_LIST, B_WILL_DRAW
43dd55ed1aSAlex Wilson 			| B_NAVIGABLE | B_FRAME_EVENTS)
446af4da5dSStephan Aßmus {
456af4da5dSStephan Aßmus 	fEnabled = true;
466af4da5dSStephan Aßmus }
476af4da5dSStephan Aßmus 
486af4da5dSStephan Aßmus 
~MediaFileListView()496af4da5dSStephan Aßmus MediaFileListView::~MediaFileListView()
506af4da5dSStephan Aßmus {
516af4da5dSStephan Aßmus 	BListItem *item;
526af4da5dSStephan Aßmus 	while ((item = RemoveItem((int32)0)) != NULL) {
536af4da5dSStephan Aßmus 		delete item;
546af4da5dSStephan Aßmus 	}
556af4da5dSStephan Aßmus }
566af4da5dSStephan Aßmus 
576af4da5dSStephan Aßmus 
586af4da5dSStephan Aßmus void
SetEnabled(bool enabled)596af4da5dSStephan Aßmus MediaFileListView::SetEnabled(bool enabled)
606af4da5dSStephan Aßmus {
616af4da5dSStephan Aßmus 	if (enabled == fEnabled)
626af4da5dSStephan Aßmus 		return;
636af4da5dSStephan Aßmus 
646af4da5dSStephan Aßmus 	fEnabled = enabled;
656af4da5dSStephan Aßmus 	// TODO: visual indication of enabled status?
666af4da5dSStephan Aßmus }
676af4da5dSStephan Aßmus 
686af4da5dSStephan Aßmus 
696af4da5dSStephan Aßmus bool
IsEnabled() const706af4da5dSStephan Aßmus MediaFileListView::IsEnabled() const
716af4da5dSStephan Aßmus {
726af4da5dSStephan Aßmus 	return fEnabled;
736af4da5dSStephan Aßmus }
746af4da5dSStephan Aßmus 
756af4da5dSStephan Aßmus 
761c992a52SStephan Aßmus bool
AddMediaItem(BMediaFile * file,const entry_ref & ref)771c992a52SStephan Aßmus MediaFileListView::AddMediaItem(BMediaFile* file, const entry_ref& ref)
786af4da5dSStephan Aßmus {
791c992a52SStephan Aßmus 	MediaFileListItem* item = new(std::nothrow) MediaFileListItem(file, ref);
801c992a52SStephan Aßmus 	if (item == NULL || !AddItem(item)) {
811c992a52SStephan Aßmus 		delete item;
821c992a52SStephan Aßmus 		return false;
831c992a52SStephan Aßmus 	}
846af4da5dSStephan Aßmus 	be_app_messenger.SendMessage(FILE_LIST_CHANGE_MESSAGE);
851c992a52SStephan Aßmus 	return true;
866af4da5dSStephan Aßmus }
876af4da5dSStephan Aßmus 
886af4da5dSStephan Aßmus 
896af4da5dSStephan Aßmus void
KeyDown(const char * bytes,int32 numBytes)906af4da5dSStephan Aßmus MediaFileListView::KeyDown(const char *bytes, int32 numBytes)
916af4da5dSStephan Aßmus {
926af4da5dSStephan Aßmus 	switch (bytes[0]) {
936af4da5dSStephan Aßmus 		case B_DELETE:
946af4da5dSStephan Aßmus 			if (IsEnabled()) {
956af4da5dSStephan Aßmus 				int32 selection = CurrentSelection();
966af4da5dSStephan Aßmus 				if (selection >= 0) {
976af4da5dSStephan Aßmus 					delete RemoveItem(selection);
986af4da5dSStephan Aßmus 					// select the previous item
996af4da5dSStephan Aßmus 					int32 count = CountItems();
1006af4da5dSStephan Aßmus 					if (selection >= count)
1016af4da5dSStephan Aßmus 						selection = count - 1;
1026af4da5dSStephan Aßmus 					Select(selection);
1036af4da5dSStephan Aßmus 					be_app_messenger.SendMessage(FILE_LIST_CHANGE_MESSAGE);
1046af4da5dSStephan Aßmus 				}
1056af4da5dSStephan Aßmus 			}
1066af4da5dSStephan Aßmus 			break;
1076af4da5dSStephan Aßmus 		default:
1086af4da5dSStephan Aßmus 			BListView::KeyDown(bytes, numBytes);
109*ab05d368Ssushilhub 			break;
1106af4da5dSStephan Aßmus 	}
1116af4da5dSStephan Aßmus }
1126af4da5dSStephan Aßmus 
1136af4da5dSStephan Aßmus 
1146af4da5dSStephan Aßmus void
SelectionChanged()1156af4da5dSStephan Aßmus MediaFileListView::SelectionChanged()
1166af4da5dSStephan Aßmus {
1176af4da5dSStephan Aßmus 	MediaConverterWindow* win = dynamic_cast<MediaConverterWindow*>(Window());
1186af4da5dSStephan Aßmus 	if (win != NULL)
1196af4da5dSStephan Aßmus 		win->SourceFileSelectionChanged();
1206af4da5dSStephan Aßmus }
121