1 /* 2 * Copyright 2019, Haiku, Inc. 3 * Distributed under the terms of the MIT License. 4 * 5 * Author: 6 * Preetpal Kaur <preetpalok123@gmail.com> 7 */ 8 9 10 #include <Alert.h> 11 #include <Alignment.h> 12 #include <Application.h> 13 #include <Button.h> 14 #include <CardLayout.h> 15 #include <CardView.h> 16 #include <Catalog.h> 17 #include <Control.h> 18 #include <ControlLook.h> 19 #include <LayoutBuilder.h> 20 #include <SplitView.h> 21 #include <Screen.h> 22 #include <stdio.h> 23 24 25 #include "InputConstants.h" 26 #include "InputDeviceView.h" 27 #include "InputMouse.h" 28 #include "InputTouchpadPref.h" 29 #include "InputWindow.h" 30 #include "MouseSettings.h" 31 #include "SettingsView.h" 32 33 #undef B_TRANSLATION_CONTEXT 34 #define B_TRANSLATION_CONTEXT "InputWindow" 35 36 37 InputWindow::InputWindow(BRect rect) 38 : 39 BWindow(rect, B_TRANSLATE_SYSTEM_NAME("Input"), B_TITLED_WINDOW, 40 B_NOT_RESIZABLE | B_NOT_ZOOMABLE | B_ASYNCHRONOUS_CONTROLS 41 | B_AUTO_UPDATE_SIZE_LIMITS | B_QUIT_ON_WINDOW_CLOSE) 42 { 43 FindDevice(); 44 45 BLayoutBuilder::Group<>(this, B_HORIZONTAL, 10) 46 .SetInsets(B_USE_WINDOW_SPACING) 47 .Add(fDeviceListView) 48 .AddGroup(B_VERTICAL, 0) 49 .Add(fCardView) 50 .End(); 51 } 52 53 void 54 InputWindow::MessageReceived(BMessage* message) 55 { 56 int32 name = message->GetInt32("index", 0); 57 58 switch (message->what) { 59 60 case ITEM_SELECTED: 61 { 62 fCardView->CardLayout()->SetVisibleItem(name); 63 } 64 case kMsgMouseType: 65 case kMsgMouseMap: 66 case kMsgMouseFocusMode: 67 case kMsgFollowsMouseMode: 68 case kMsgAcceptFirstClick: 69 case kMsgDoubleClickSpeed: 70 case kMsgMouseSpeed: 71 case kMsgAccelerationFactor: 72 case kMsgDefaults: 73 case kMsgRevert: 74 { 75 PostMessage(message, 76 fCardView->CardLayout()->VisibleItem()->View()); 77 break; 78 } 79 case SCROLL_AREA_CHANGED: 80 case SCROLL_CONTROL_CHANGED: 81 case TAP_CONTROL_CHANGED: 82 case DEFAULT_SETTINGS: 83 case REVERT_SETTINGS: 84 { 85 PostMessage(message, 86 fCardView->CardLayout()->VisibleItem()->View()); 87 break; 88 } 89 case kMsgSliderrepeatrate: 90 case kMsgSliderdelayrate: 91 { 92 PostMessage(message, 93 fCardView->CardLayout()->VisibleItem()->View()); 94 break; 95 } 96 default: 97 BWindow::MessageReceived(message); 98 break; 99 } 100 } 101 102 status_t 103 InputWindow::FindDevice() 104 { 105 BList devList; 106 status_t status = get_input_devices(&devList); 107 if (status != B_OK) 108 return status; 109 110 int32 i = 0; 111 112 fDeviceListView = new DeviceListView(B_TRANSLATE("Device List")); 113 fCardView = new BCardView(); 114 115 while (true) { 116 BInputDevice* dev = (BInputDevice*)devList.ItemAt(i); 117 if (dev == NULL) { 118 break; 119 } 120 i++; 121 122 BString name = dev->Name(); 123 124 if (dev->Type() == B_POINTING_DEVICE 125 && name.FindFirst("Touchpad") >= 0) { 126 127 fTouchPad = dev; 128 TouchpadPrefView* view = new TouchpadPrefView(dev); 129 fCardView->AddChild(view); 130 fDeviceListView->fDeviceList->AddItem(new BStringItem(name)); 131 } else if (dev->Type() == B_POINTING_DEVICE) { 132 133 fMouse = dev; 134 InputMouse* view = new InputMouse(dev); 135 fCardView->AddChild(view); 136 fDeviceListView->fDeviceList->AddItem(new BStringItem(name)); 137 } else if (dev->Type() == B_KEYBOARD_DEVICE) { 138 139 fKeyboard = dev; 140 InputKeyboard* view = new InputKeyboard(dev); 141 fCardView->AddChild(view); 142 fDeviceListView->fDeviceList->AddItem(new BStringItem(name)); 143 } else { 144 delete dev; 145 } 146 } 147 return B_ENTRY_NOT_FOUND; 148 } 149