1/* 2 * Copyright 2006-2010, Axel D��rfler, axeld@pinc-software.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 6 7#include "MimeTypeListView.h" 8#include "TypeListWindow.h" 9 10#include <Button.h> 11#include <Catalog.h> 12#include <ControlLook.h> 13#include <LayoutBuilder.h> 14#include <Locale.h> 15#include <ScrollView.h> 16 17#include <string.h> 18 19 20#undef B_TRANSLATION_CONTEXT 21#define B_TRANSLATION_CONTEXT "Type List Window" 22 23 24const uint32 kMsgTypeSelected = 'tpsl'; 25const uint32 kMsgSelected = 'seld'; 26 27 28TypeListWindow::TypeListWindow(const char* currentType, uint32 what, 29 BWindow* target) 30 : 31 BWindow(BRect(100, 100, 360, 440), B_TRANSLATE("Choose type"), 32 B_MODAL_WINDOW, 33 B_NOT_ZOOMABLE | B_ASYNCHRONOUS_CONTROLS | B_AUTO_UPDATE_SIZE_LIMITS), 34 fTarget(target), 35 fWhat(what) 36{ 37 float padding = be_control_look->DefaultItemSpacing(); 38 39 fSelectButton = new BButton("select", B_TRANSLATE("Done"), 40 new BMessage(kMsgSelected)); 41 fSelectButton->SetEnabled(false); 42 43 BButton* button = new BButton("cancel", B_TRANSLATE("Cancel"), 44 new BMessage(B_CANCEL)); 45 46 fSelectButton->MakeDefault(true); 47 48 fListView = new MimeTypeListView("typeview", NULL, true, false); 49 fListView->SetSelectionMessage(new BMessage(kMsgTypeSelected)); 50 fListView->SetInvocationMessage(new BMessage(kMsgSelected)); 51 52 BScrollView* scrollView = new BScrollView("scrollview", fListView, 53 B_FRAME_EVENTS | B_WILL_DRAW, false, true); 54 55 BLayoutBuilder::Group<>(this, B_VERTICAL, padding) 56 .SetInsets(padding) 57 .Add(scrollView) 58 .AddGroup(B_HORIZONTAL, padding) 59 .AddGlue() 60 .Add(button) 61 .Add(fSelectButton); 62 63 BAlignment buttonAlignment = 64 BAlignment(B_ALIGN_USE_FULL_WIDTH, B_ALIGN_VERTICAL_CENTER); 65 button->SetExplicitAlignment(buttonAlignment); 66 fSelectButton->SetExplicitAlignment(buttonAlignment); 67 68 MoveTo(target->Frame().LeftTop() + BPoint(15.0f, 15.0f)); 69} 70 71 72TypeListWindow::~TypeListWindow() 73{ 74} 75 76 77void 78TypeListWindow::MessageReceived(BMessage* message) 79{ 80 switch (message->what) { 81 case kMsgTypeSelected: 82 fSelectButton->SetEnabled(fListView->CurrentSelection() >= 0); 83 break; 84 85 case kMsgSelected: 86 { 87 MimeTypeItem* item = dynamic_cast<MimeTypeItem*>(fListView->ItemAt( 88 fListView->CurrentSelection())); 89 if (item != NULL) { 90 BMessage select(fWhat); 91 select.AddString("type", item->Type()); 92 fTarget.SendMessage(&select); 93 } 94 95 // supposed to fall through 96 } 97 case B_CANCEL: 98 PostMessage(B_QUIT_REQUESTED); 99 break; 100 101 default: 102 BWindow::MessageReceived(message); 103 break; 104 } 105} 106 107