1/* 2 * Copyright 2003-2004 Waldemar Kornewald. All rights reserved. 3 * Copyright 2017 Haiku, Inc. All rights reserved. 4 * Distributed under the terms of the MIT License. 5 */ 6 7 8#include "InterfaceUtils.h" 9 10#include "DialUpAddon.h" 11#include <ListView.h> 12#include <Menu.h> 13#include <MenuItem.h> 14#include <Screen.h> 15#include <String.h> 16#include <ListItem.h> // Contains StringItem class declaration 17#include <Window.h> 18 19 20BPoint 21center_on_screen(BRect rect, BWindow *window) 22{ 23 BRect screenFrame = (BScreen(window).Frame()); 24 BPoint point((screenFrame.Width() - rect.Width()) / 2.0, 25 (screenFrame.Height() - rect.Height()) / 2.0); 26 if(!screenFrame.Contains(point)) 27 point.Set(0, 0); 28 29 return point; 30} 31 32 33int32 34FindNextMenuInsertionIndex(BMenu *menu, const char *name, int32 index) 35{ 36 BMenuItem *item; 37 for(; index < menu->CountItems(); index++) { 38 item = menu->ItemAt(index); 39 if(item && strcasecmp(name, item->Label()) <= 0) 40 return index; 41 } 42 43 return index; 44} 45 46 47int32 48FindNextListInsertionIndex(BListView *list, const char *name) 49{ 50 int32 index = 0; 51 BStringItem *item; 52 for(; index < list->CountItems(); index++) { 53 item = static_cast<BStringItem*>(list->ItemAt(index)); 54 if(item && strcasecmp(name, item->Text()) <= 0) 55 return index; 56 } 57 58 return index; 59} 60 61 62void 63AddAddonsToMenu(const BMessage *source, BMenu *menu, const char *type, uint32 what) 64{ 65 DialUpAddon *addon; 66 for(int32 index = 0; source->FindPointer(type, index, 67 reinterpret_cast<void**>(&addon)) == B_OK; index++) { 68 if(!addon || (!addon->FriendlyName() && !addon->TechnicalName())) 69 continue; 70 71 BMessage *message = new BMessage(what); 72 message->AddPointer("Addon", addon); 73 74 BString name; 75 if(addon->TechnicalName()) { 76 name << addon->TechnicalName(); 77 if(addon->FriendlyName()) 78 name << " ("; 79 } 80 if(addon->FriendlyName()) { 81 name << addon->FriendlyName(); 82 if(addon->TechnicalName()) 83 name << ")"; 84 } 85 86 int32 insertAt = FindNextMenuInsertionIndex(menu, name.String()); 87 menu->AddItem(new BMenuItem(name.String(), message), insertAt); 88 } 89} 90