1 /* 2 * Copyright 2002-2006, Haiku, Inc. 3 * Distributed under the terms of the MIT license. 4 * 5 * Authors: 6 * Oliver Siebenmarck 7 * Andrew McCall, mccall@digitalparadise.co.uk 8 * Michael Wilber 9 */ 10 11 12 #include "TranslatorListView.h" 13 14 #include <string.h> 15 16 #include <Application.h> 17 18 19 static int 20 compare_items(const void* a, const void* b) 21 { 22 const BStringItem* stringA = *(const BStringItem**)a; 23 const BStringItem* stringB = *(const BStringItem**)b; 24 25 return strcmp(stringA->Text(), stringB->Text()); 26 } 27 28 29 // #pragma mark - 30 31 32 TranslatorItem::TranslatorItem(translator_id id, const char* name) 33 : 34 BStringItem(name), 35 fID(id) 36 { 37 } 38 39 40 TranslatorItem::~TranslatorItem() 41 { 42 } 43 44 45 // #pragma mark - 46 47 48 TranslatorListView::TranslatorListView(const char* name, list_view_type type) 49 : 50 BListView(name, B_SINGLE_SELECTION_LIST) 51 { 52 } 53 54 55 TranslatorListView::~TranslatorListView() 56 { 57 } 58 59 60 TranslatorItem* 61 TranslatorListView::TranslatorAt(int32 index) const 62 { 63 return dynamic_cast<TranslatorItem*>(ItemAt(index)); 64 } 65 66 67 void 68 TranslatorListView::MessageReceived(BMessage* message) 69 { 70 uint32 type; 71 int32 count; 72 73 switch (message->what) { 74 case B_SIMPLE_DATA: 75 // Tell the application object that a 76 // file has been dropped on this view 77 message->GetInfo("refs", &type, &count); 78 if (count > 0 && type == B_REF_TYPE) { 79 message->what = B_REFS_RECEIVED; 80 be_app->PostMessage(message); 81 Invalidate(); 82 } 83 break; 84 85 default: 86 BListView::MessageReceived(message); 87 break; 88 } 89 } 90 91 92 void 93 TranslatorListView::MouseMoved(BPoint point, uint32 transit, 94 const BMessage* dragMessage) 95 { 96 if (dragMessage != NULL && transit == B_ENTERED_VIEW) { 97 // Draw a red box around the inside of the view 98 // to tell the user that this view accepts drops 99 SetHighColor(220, 0, 0); 100 SetPenSize(4); 101 StrokeRect(Bounds()); 102 SetHighColor(0, 0, 0); 103 } else if (dragMessage != NULL && transit == B_EXITED_VIEW) 104 Invalidate(); 105 } 106 107 108 void 109 TranslatorListView::SortItems() 110 { 111 BListView::SortItems(&compare_items); 112 } 113 114