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