1 #include <stdio.h> 2 3 #include <InterfaceKit.h> 4 5 #include "FileSelector.h" 6 7 FileSelector::FileSelector(void) 8 : BWindow(BRect(0,0,320,160), "printtofile", B_TITLED_WINDOW, 9 B_NOT_ZOOMABLE, B_CURRENT_WORKSPACE) 10 { 11 m_exit_sem = create_sem(0, "FileSelector"); 12 m_result = B_ERROR; 13 m_save_panel = NULL; 14 } 15 16 FileSelector::~FileSelector() 17 { 18 delete m_save_panel; 19 delete_sem(m_exit_sem); 20 } 21 22 23 bool FileSelector::QuitRequested() 24 { 25 release_sem(m_exit_sem); 26 return true; 27 } 28 29 30 void FileSelector::MessageReceived(BMessage * msg) 31 { 32 switch (msg->what) 33 { 34 case START_MSG: 35 m_save_panel = new BFilePanel(B_SAVE_PANEL, 36 new BMessenger(this), NULL, 0, false); 37 38 m_save_panel->Window()->SetWorkspaces(B_CURRENT_WORKSPACE); 39 m_save_panel->Show(); 40 break; 41 42 case B_SAVE_REQUESTED: 43 { 44 entry_ref dir; 45 46 if ( msg->FindRef("directory", &dir) == B_OK) 47 { 48 const char * name; 49 50 BDirectory bdir(&dir); 51 if ( msg->FindString("name", &name) == B_OK) 52 { 53 if ( name != NULL ) 54 m_result = m_entry.SetTo(&bdir, name); 55 }; 56 }; 57 58 release_sem(m_exit_sem); 59 break; 60 }; 61 62 case B_CANCEL: 63 release_sem(m_exit_sem); 64 break; 65 66 default: 67 inherited::MessageReceived(msg); 68 break; 69 }; 70 } 71 72 73 status_t FileSelector::Go(entry_ref * ref) 74 { 75 MoveTo(300,300); 76 Hide(); 77 Show(); 78 PostMessage(START_MSG); 79 acquire_sem(m_exit_sem); 80 81 if ( m_result == B_OK && ref) 82 m_result = m_entry.GetRef(ref); 83 84 Lock(); 85 Quit(); 86 87 return m_result; 88 } 89 90 91 92