Finish basic UI, add type detection

This commit is contained in:
Marc Riera Irigoyen 2022-10-12 17:16:58 +02:00
parent 5a8522d05a
commit 25ba4cdbc0
6 changed files with 45 additions and 12 deletions

View file

@ -1,6 +1,6 @@
import sys import sys
from PyQt5 import uic from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QMainWindow, QTableWidgetItem from PyQt5.QtWidgets import QMainWindow, QTableWidgetItem, QHeaderView
from gui.main_ui import Ui_MainWindow from gui.main_ui import Ui_MainWindow
from handlers.gamepad import Gamepad from handlers.gamepad import Gamepad
from models.gamepad import GamepadModel from models.gamepad import GamepadModel
@ -13,12 +13,16 @@ class MainWindow(QMainWindow):
self._gui = Ui_MainWindow() self._gui = Ui_MainWindow()
self._gui.setupUi(self) self._gui.setupUi(self)
model = GamepadModel(gamepad_handler.find_gamepads()) self.gamepad_model = GamepadModel(self._gamepad_handler.find_gamepads())
self._gui.tableView_physicalControllerList.setModel(model) self._gui.tableView_physicalControllerList.setModel(self.gamepad_model)
self._gui.tableView_physicalControllerList.horizontalHeader().setSectionResizeMode(0, QHeaderView.ResizeToContents)
self._gui.tableView_physicalControllerList.resizeColumnsToContents() self._gui.tableView_physicalControllerList.horizontalHeader().setSectionResizeMode(1, QHeaderView.Stretch)
self._gui.tableView_physicalControllerList.horizontalHeader().setSectionResizeMode(2, QHeaderView.ResizeToContents)
self._gui.pushButton_physicalControllerRefresh.clicked.connect(self.controller_list_refresh) self._gui.pushButton_physicalControllerRefresh.clicked.connect(self.controller_list_refresh)
def controller_list_refresh(self): def controller_list_refresh(self):
self.gamepad_model.beginResetModel()
self.gamepad_model.gamepads = self._gamepad_handler.find_gamepads()
self.gamepad_model.endResetModel()
return return

View file

@ -37,7 +37,7 @@ class Ui_MainWindow(object):
self.tableView_physicalControllerList.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection) self.tableView_physicalControllerList.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
self.tableView_physicalControllerList.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) self.tableView_physicalControllerList.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
self.tableView_physicalControllerList.setObjectName("tableView_physicalControllerList") self.tableView_physicalControllerList.setObjectName("tableView_physicalControllerList")
self.tableView_physicalControllerList.horizontalHeader().setStretchLastSection(True) self.tableView_physicalControllerList.horizontalHeader().setHighlightSections(False)
self.tableView_physicalControllerList.verticalHeader().setVisible(False) self.tableView_physicalControllerList.verticalHeader().setVisible(False)
self.verticalLayout_2.addWidget(self.tableView_physicalControllerList) self.verticalLayout_2.addWidget(self.tableView_physicalControllerList)
self.horizontalLayout_physicalControllerActions = QtWidgets.QHBoxLayout() self.horizontalLayout_physicalControllerActions = QtWidgets.QHBoxLayout()

View file

@ -61,8 +61,8 @@
<property name="selectionBehavior"> <property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum> <enum>QAbstractItemView::SelectRows</enum>
</property> </property>
<attribute name="horizontalHeaderStretchLastSection"> <attribute name="horizontalHeaderHighlightSections">
<bool>true</bool> <bool>false</bool>
</attribute> </attribute>
<attribute name="verticalHeaderVisible"> <attribute name="verticalHeaderVisible">
<bool>false</bool> <bool>false</bool>

13
handlers/config.py Normal file
View file

@ -0,0 +1,13 @@
class ConfigHandler:
def __init__(self):
super().__init__()
def load():
return
def save():
return
def update():
return

View file

@ -1,3 +1,4 @@
from enum import Enum
from evdev import InputDevice, list_devices, ecodes as e, UInput, AbsInfo from evdev import InputDevice, list_devices, ecodes as e, UInput, AbsInfo
class GamepadHandler: class GamepadHandler:
@ -13,12 +14,24 @@ class GamepadHandler:
class Gamepad: class Gamepad:
class GamepadType(Enum):
UNKNOWN = 0
CLASSIC = 1
NSWITCH = 2
def __init__(self, vid, pid, name): def __init__(self, vid, pid, name):
super().__init__() super().__init__()
self.vid = vid self.vid = vid
self.pid = pid self.pid = pid
self.name = name self.name = name
self.type = self.get_gamepad_type(vid, pid)
self.config = None
def get_gamepad_type(self, vid, pid):
match vid, pid:
case 0x0f0d, 0x00c1:
return self.GamepadType.NSWITCH
return self.GamepadType.UNKNOWN
""" cap = { """ cap = {
e.EV_KEY : [e.BTN_NORTH, e.BTN_SOUTH, e.BTN_EAST, e.BTN_WEST, e.BTN_SELECT, e.BTN_START], e.EV_KEY : [e.BTN_NORTH, e.BTN_SOUTH, e.BTN_EAST, e.BTN_WEST, e.BTN_SELECT, e.BTN_START],

View file

@ -17,9 +17,12 @@ class GamepadModel(QAbstractTableModel):
case 1: case 1:
return self.gamepads[index.row()].name return self.gamepads[index.row()].name
case 2: case 2:
return self.get_gamepad_hash(index) if self.gamepads[index.row()].type == Gamepad.GamepadType.UNKNOWN:
case _: return "Not configured"
return None else:
return "Configured"
elif role == Qt.TextAlignmentRole and index.column() != 1:
return Qt.AlignCenter
def rowCount(self, index): def rowCount(self, index):
return len(self.gamepads) return len(self.gamepads)