Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

improve device selection #469

Merged
merged 8 commits into from
Jun 20, 2018
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
improve device selection
jopohl committed Jun 20, 2018

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
commit 26b62094cf9f117b9327638c56647ce76da5cc72
147 changes: 41 additions & 106 deletions data/ui/options.ui
Original file line number Diff line number Diff line change
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>773</width>
<height>749</height>
<width>788</width>
<height>822</height>
</rect>
</property>
<property name="windowTitle">
@@ -217,8 +217,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>98</width>
<height>28</height>
<width>708</width>
<height>447</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4"/>
@@ -311,104 +311,19 @@
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_8">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QListWidget" name="listWidgetDevices">
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="viewMode">
<enum>QListView::ListMode</enum>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_7">
<item>
<widget class="QCheckBox" name="chkBoxDeviceEnabled">
<property name="text">
<string>Enabled</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="rbNativeBackend">
<property name="text">
<string>&amp;Native backend (recommended)</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="rbGnuradioBackend">
<property name="text">
<string>&amp;Gnuradio backend</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnHealthCheck">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Perform a health check for native device extensions.</string>
</property>
<property name="text">
<string>Health Check</string>
</property>
<property name="icon">
<iconset theme="heart">
<normaloff>.</normaloff>.</iconset>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_6">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="lSupport">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<weight>75</weight>
<italic>false</italic>
<bold>true</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">color: green</string>
</property>
<property name="text">
<string>device supports sending and receiving</string>
<widget class="QTableView" name="tblDevices">
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
<property name="showGrid">
<bool>false</bool>
</property>
<attribute name="horizontalHeaderDefaultSectionSize">
<number>200</number>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
</widget>
</item>
<item>
@@ -424,7 +339,7 @@
<string>Native options</string>
</property>
<layout class="QGridLayout" name="gridLayout_5">
<item row="3" column="2">
<item row="4" column="2">
<widget class="QLabel" name="labelRebuildNativeStatus">
<property name="text">
<string>Rebuild &lt;x&gt; new device extensions. Please restart URH to use them.</string>
@@ -434,14 +349,14 @@
</property>
</widget>
</item>
<item row="2" column="0">
<item row="3" column="0">
<widget class="QLabel" name="labelLibDirs">
<property name="text">
<string>Library directories:</string>
</property>
</widget>
</item>
<item row="3" column="0">
<item row="4" column="0">
<widget class="QPushButton" name="btnRebuildNative">
<property name="enabled">
<bool>true</bool>
@@ -458,7 +373,7 @@
</property>
</widget>
</item>
<item row="1" column="0" colspan="3">
<item row="2" column="0" colspan="3">
<widget class="QLabel" name="labelNativeRebuildInfo">
<property name="text">
<string>You can rebuild the native device extensions here. This is useful, when you installed a device driver afterwards or your drivers are stored in an unusual location.</string>
@@ -468,14 +383,14 @@
</property>
</widget>
</item>
<item row="2" column="2">
<item row="3" column="2">
<widget class="QLineEdit" name="lineEditLibDirs">
<property name="placeholderText">
<string>Comma separated list of additional library directories</string>
</property>
</widget>
</item>
<item row="3" column="1">
<item row="4" column="1">
<widget class="QPushButton" name="btnViewBuildLog">
<property name="text">
<string>View log</string>
@@ -486,6 +401,26 @@
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="btnHealthCheck">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Perform a health check for native device extensions.</string>
</property>
<property name="text">
<string>Health Check</string>
</property>
<property name="icon">
<iconset theme="heart">
<normaloff>.</normaloff>.</iconset>
</property>
</widget>
</item>
</layout>
</widget>
</item>
215 changes: 124 additions & 91 deletions src/urh/controller/dialogs/OptionsDialog.py
Original file line number Diff line number Diff line change
@@ -4,7 +4,7 @@
import tempfile
import time

from PyQt5.QtCore import Qt, pyqtSlot, pyqtSignal, QSize
from PyQt5.QtCore import Qt, pyqtSlot, pyqtSignal, QSize, QAbstractTableModel, QModelIndex
from PyQt5.QtGui import QCloseEvent, QIcon, QPixmap
from PyQt5.QtWidgets import QDialog, QHBoxLayout, QCompleter, QDirModel, QApplication, QHeaderView, QStyleFactory, \
QRadioButton, QFileDialog
@@ -22,6 +22,121 @@
from urh.util import util


class DeviceOptionsTableModel(QAbstractTableModel):
header_labels = ["Software Defined Radio", "Info", "Native backend", "GNU Radio backend", "State"]

def __init__(self, backend_handler: BackendHandler, parent=None):
self.backend_handler = backend_handler

super().__init__(parent)

def update(self):
self.beginResetModel()
self.endResetModel()

def columnCount(self, parent: QModelIndex = None, *args, **kwargs):
return len(self.header_labels)

def rowCount(self, parent: QModelIndex = None, *args, **kwargs):
return len(self.backend_handler.DEVICE_NAMES)

def headerData(self, section, orientation, role=Qt.DisplayRole):
if role == Qt.DisplayRole and orientation == Qt.Horizontal:
return self.header_labels[section]
return super().headerData(section, orientation, role)

def get_device_at(self, index: int):
dev_key = self.backend_handler.get_key_from_device_display_text(self.backend_handler.DEVICE_NAMES[index])
return self.backend_handler.device_backends[dev_key]

def data(self, index: QModelIndex, role=Qt.DisplayRole):
if not index.isValid():
return None

i = index.row()
j = index.column()
device = self.get_device_at(i)
if role == Qt.DisplayRole:
if j == 0:
return self.backend_handler.DEVICE_NAMES[i]
elif j == 1:
if device.supports_rx and device.supports_tx:
device_info = "supports RX and TX"
elif device.supports_rx and not device.supports_tx:
device_info = "supports RX only"
elif not device.supports_rx and device.supports_tx:
device_info = "supports TX only"
else:
device_info = ""
return device_info
elif j == 2:
if device.has_native_backend:
return ""
else:
return "not available"
elif j == 3:
if device.has_gnuradio_backend:
return ""
else:
return "not available"
elif j == 4:
if device.has_native_backend or device.has_gnuradio_backend:
return "enabled" if device.is_enabled else "disabled"
else:
return "no backend available"
elif role == Qt.CheckStateRole:
if j == 2 and device.has_native_backend:
return Qt.Checked if device.selected_backend == Backends.native else Qt.Unchecked
elif j == 3 and device.has_gnuradio_backend:
return Qt.Checked if device.selected_backend == Backends.grc else Qt.Unchecked
elif j == 4 and (device.has_native_backend or device.has_gnuradio_backend):
return Qt.Checked if device.is_enabled else Qt.Unchecked

def setData(self, index: QModelIndex, value, role=None):
if not index.isValid():
return False

i, j = index.row(), index.column()
device = self.get_device_at(i)
if role == Qt.CheckStateRole:
enabled = bool(value)
if j == 2:
if enabled and device.has_native_backend:
device.selected_backend = Backends.native
elif not enabled and device.has_gnuradio_backend:
device.selected_backend = Backends.grc
elif j == 3:
if enabled and device.has_gnuradio_backend:
device.selected_backend = Backends.grc
elif not enabled and device.has_native_backend:
device.selected_backend = Backends.native
elif j == 4:
device.is_enabled = enabled

self.update()
device.write_settings()
return True

def flags(self, index: QModelIndex):
if not index.isValid():
return None

j = index.column()
device = self.get_device_at(index.row())
if j == 2 and not device.has_native_backend:
return Qt.ItemIsSelectable
elif j == 3 and not device.has_gnuradio_backend:
return Qt.ItemIsSelectable
elif j == 4 and not device.has_native_backend and not device.has_gnuradio_backend:
return Qt.ItemIsSelectable

flags = Qt.ItemIsSelectable | Qt.ItemIsEnabled

if j in [2, 3, 4]:
flags |= Qt.ItemIsEditable | Qt.ItemIsUserCheckable

return flags

class OptionsDialog(QDialog):
values_changed = pyqtSignal(dict)

@@ -33,6 +148,13 @@ def __init__(self, installed_plugins, highlighted_plugins=None, parent=None):
self.ui = Ui_DialogOptions()
self.ui.setupUi(self)

self.device_options_model = DeviceOptionsTableModel(self.backend_handler, self)
self.device_options_model.update()
self.ui.tblDevices.setModel(self.device_options_model)
self.ui.tblDevices.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

self.ui.tblDevices.setItemDelegateForColumn(1, ComboBoxDelegate(["native", "GNU Radio"]))

self.setAttribute(Qt.WA_DeleteOnClose)
layout = QHBoxLayout(self.ui.tab_plugins)
self.plugin_controller = PluginFrame(installed_plugins, highlighted_plugins, parent=self)
@@ -76,12 +198,6 @@ def __init__(self, installed_plugins, highlighted_plugins=None, parent=None):
self.ui.lineEditPython2Interpreter.setCompleter(completer)
self.ui.lineEditGnuradioDirectory.setCompleter(completer)

for dev_name in self.backend_handler.DEVICE_NAMES:
self.ui.listWidgetDevices.addItem(dev_name)

self.set_device_status()

self.ui.listWidgetDevices.setCurrentRow(0)
self.refresh_device_tab()

self.create_connects()
@@ -108,33 +224,12 @@ def __init__(self, installed_plugins, highlighted_plugins=None, parent=None):
except TypeError:
pass

@property
def selected_device(self) -> BackendContainer:
try:
devname = self.ui.listWidgetDevices.currentItem().text().lower()
dev_key = self.__get_key_from_device_display_text(devname)
return self.backend_handler.device_backends[dev_key]
except:
return ""

def __get_key_from_device_display_text(self, displayed_device_name):
displayed_device_name = displayed_device_name.lower()
for key in self.backend_handler.DEVICE_NAMES:
key = key.lower()
if displayed_device_name.startswith(key):
return key
return None

def create_connects(self):
self.ui.doubleSpinBoxFuzzingPause.valueChanged.connect(self.on_spinbox_fuzzing_pause_value_changed)
self.ui.lineEditPython2Interpreter.editingFinished.connect(self.on_python2_exe_path_edited)
self.ui.btnChoosePython2Interpreter.clicked.connect(self.on_btn_choose_python2_interpreter_clicked)
self.ui.btnChooseGnuRadioDirectory.clicked.connect(self.on_btn_choose_gnuradio_directory_clicked)
self.ui.lineEditGnuradioDirectory.editingFinished.connect(self.on_gnuradio_install_dir_edited)
self.ui.listWidgetDevices.currentRowChanged.connect(self.on_list_widget_devices_current_row_changed)
self.ui.chkBoxDeviceEnabled.clicked.connect(self.on_chk_box_device_enabled_clicked)
self.ui.rbGnuradioBackend.clicked.connect(self.on_rb_gnuradio_backend_clicked)
self.ui.rbNativeBackend.clicked.connect(self.on_rb_native_backend_clicked)
self.ui.comboBoxTheme.currentIndexChanged.connect(self.on_combo_box_theme_index_changed)
self.ui.checkBoxShowConfirmCloseDialog.clicked.connect(self.on_checkbox_confirm_close_dialog_clicked)
self.ui.checkBoxHoldShiftToDrag.clicked.connect(self.on_checkbox_hold_shift_to_drag_clicked)
@@ -163,41 +258,6 @@ def show_gnuradio_infos(self):
self.ui.lGnuradioInstalled.setText(
self.tr("Gnuradio is not installed or incompatible with python2 interpreter."))

def show_selected_device_params(self):
if self.ui.listWidgetDevices.currentRow() >= 0:
dev = self.selected_device

self.ui.chkBoxDeviceEnabled.setEnabled(len(dev.avail_backends) > 0)
self.ui.rbGnuradioBackend.setEnabled(dev.has_gnuradio_backend)
self.ui.rbNativeBackend.setEnabled(dev.has_native_backend)

self.ui.chkBoxDeviceEnabled.setChecked(dev.is_enabled)
self.ui.rbGnuradioBackend.setChecked(dev.selected_backend == Backends.grc)
self.ui.rbNativeBackend.setChecked(dev.selected_backend == Backends.native)

if dev.supports_tx and dev.supports_rx:
self.ui.lSupport.setText(self.tr("device supports sending and receiving"))
self.ui.lSupport.setStyleSheet("color: green")
elif dev.supports_rx and not dev.supports_tx:
self.ui.lSupport.setText(self.tr("device supports receiving only"))
self.ui.lSupport.setStyleSheet("color: blue")
elif not dev.supports_rx and dev.supports_tx:
self.ui.lSupport.setText(self.tr("device supports sending only"))
self.ui.lSupport.setStyleSheet("color: blue")
else:
self.ui.lSupport.setText(self.tr("device supports neither sending nor receiving"))
self.ui.lSupport.setStyleSheet("color: red")

def set_device_status(self):
for i in range(self.ui.listWidgetDevices.count()):
w = self.ui.listWidgetDevices.item(i)
dev_key = self.__get_key_from_device_display_text(w.text())
is_enabled = self.backend_handler.device_backends[dev_key].is_enabled
selected_backend = self.backend_handler.device_backends[dev_key].selected_backend.value
suffix = self.tr("enabled") if is_enabled else self.tr("disabled")
dev_name = next(dn for dn in BackendHandler.DEVICE_NAMES if dn.lower() == dev_key)
w.setText("{0}\t ({2})\t {1}".format(dev_name, suffix, selected_backend))

def read_options(self):
settings = constants.SETTINGS

@@ -213,8 +273,7 @@ def read_options(self):
def refresh_device_tab(self):
self.backend_handler.get_backends()
self.show_gnuradio_infos()
self.show_selected_device_params()
self.set_device_status()
self.device_options_model.update()

self.ui.lineEditGnuradioDirectory.setEnabled(self.backend_handler.use_gnuradio_install_dir)
self.ui.lineEditPython2Interpreter.setDisabled(self.backend_handler.use_gnuradio_install_dir)
@@ -359,36 +418,10 @@ def on_btn_choose_gnuradio_directory_clicked(self):
self.ui.lineEditGnuradioDirectory.setText(directory)
self.set_gnuradio_status()

@pyqtSlot()
def on_chk_box_device_enabled_clicked(self):
self.selected_device.is_enabled = bool(self.ui.chkBoxDeviceEnabled.isChecked())
self.selected_device.write_settings()
self.set_device_status()

@pyqtSlot()
def on_rb_gnuradio_backend_clicked(self):
if Backends.grc in self.selected_device.avail_backends:
self.ui.rbGnuradioBackend.setChecked(True)
self.selected_device.selected_backend = Backends.grc
self.selected_device.write_settings()
self.set_device_status()

@pyqtSlot()
def on_rb_native_backend_clicked(self):
if Backends.native in self.selected_device.avail_backends:
self.ui.rbNativeBackend.setChecked(True)
self.selected_device.selected_backend = Backends.native
self.selected_device.write_settings()
self.set_device_status()

@pyqtSlot(bool)
def on_checkbox_align_labels_clicked(self, checked: bool):
constants.SETTINGS.setValue("align_labels", checked)

@pyqtSlot(int)
def on_list_widget_devices_current_row_changed(self, current_row: int):
self.show_selected_device_params()

@pyqtSlot(bool)
def on_radio_button_gnuradio_directory_clicked(self, checked: bool):
self.set_gnuradio_status()
8 changes: 8 additions & 0 deletions src/urh/dev/BackendHandler.py
Original file line number Diff line number Diff line change
@@ -284,6 +284,14 @@ def get_backends(self):
container = BackendContainer(device_name.lower(), ab, rx_suprt, tx_suprt)
self.device_backends[device_name.lower()] = container

def get_key_from_device_display_text(self, displayed_device_name):
displayed_device_name = displayed_device_name.lower()
for key in self.DEVICE_NAMES:
key = key.lower()
if displayed_device_name.startswith(key):
return key
return None

@staticmethod
def perform_soundcard_health_check():
result = "SoundCard -- "
89 changes: 27 additions & 62 deletions src/urh/ui/ui_options.py
Original file line number Diff line number Diff line change
@@ -9,7 +9,7 @@
class Ui_DialogOptions(object):
def setupUi(self, DialogOptions):
DialogOptions.setObjectName("DialogOptions")
DialogOptions.resize(773, 749)
DialogOptions.resize(788, 822)
icon = QtGui.QIcon.fromTheme("configure")
DialogOptions.setWindowIcon(icon)
self.verticalLayout_6 = QtWidgets.QVBoxLayout(DialogOptions)
@@ -103,7 +103,7 @@ def setupUi(self, DialogOptions):
self.scrollAreaSpectrogramColormap.setWidgetResizable(True)
self.scrollAreaSpectrogramColormap.setObjectName("scrollAreaSpectrogramColormap")
self.scrollAreaWidgetSpectrogramColormapContents = QtWidgets.QWidget()
self.scrollAreaWidgetSpectrogramColormapContents.setGeometry(QtCore.QRect(0, 0, 98, 28))
self.scrollAreaWidgetSpectrogramColormapContents.setGeometry(QtCore.QRect(0, 0, 708, 447))
self.scrollAreaWidgetSpectrogramColormapContents.setObjectName("scrollAreaWidgetSpectrogramColormapContents")
self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.scrollAreaWidgetSpectrogramColormapContents)
self.verticalLayout_4.setObjectName("verticalLayout_4")
@@ -147,54 +147,13 @@ def setupUi(self, DialogOptions):
self.tabDevices.setObjectName("tabDevices")
self.verticalLayout_8 = QtWidgets.QVBoxLayout(self.tabDevices)
self.verticalLayout_8.setObjectName("verticalLayout_8")
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.listWidgetDevices = QtWidgets.QListWidget(self.tabDevices)
self.listWidgetDevices.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
self.listWidgetDevices.setAlternatingRowColors(True)
self.listWidgetDevices.setViewMode(QtWidgets.QListView.ListMode)
self.listWidgetDevices.setObjectName("listWidgetDevices")
self.horizontalLayout.addWidget(self.listWidgetDevices)
self.verticalLayout_7 = QtWidgets.QVBoxLayout()
self.verticalLayout_7.setObjectName("verticalLayout_7")
self.chkBoxDeviceEnabled = QtWidgets.QCheckBox(self.tabDevices)
self.chkBoxDeviceEnabled.setObjectName("chkBoxDeviceEnabled")
self.verticalLayout_7.addWidget(self.chkBoxDeviceEnabled)
self.rbNativeBackend = QtWidgets.QRadioButton(self.tabDevices)
self.rbNativeBackend.setObjectName("rbNativeBackend")
self.verticalLayout_7.addWidget(self.rbNativeBackend)
self.rbGnuradioBackend = QtWidgets.QRadioButton(self.tabDevices)
self.rbGnuradioBackend.setObjectName("rbGnuradioBackend")
self.verticalLayout_7.addWidget(self.rbGnuradioBackend)
self.btnHealthCheck = QtWidgets.QPushButton(self.tabDevices)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.btnHealthCheck.sizePolicy().hasHeightForWidth())
self.btnHealthCheck.setSizePolicy(sizePolicy)
icon = QtGui.QIcon.fromTheme("heart")
self.btnHealthCheck.setIcon(icon)
self.btnHealthCheck.setObjectName("btnHealthCheck")
self.verticalLayout_7.addWidget(self.btnHealthCheck)
spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_7.addItem(spacerItem2)
self.horizontalLayout.addLayout(self.verticalLayout_7)
self.verticalLayout_8.addLayout(self.horizontalLayout)
self.lSupport = QtWidgets.QLabel(self.tabDevices)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Maximum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.lSupport.sizePolicy().hasHeightForWidth())
self.lSupport.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setBold(True)
font.setItalic(False)
font.setWeight(75)
self.lSupport.setFont(font)
self.lSupport.setStyleSheet("color: green")
self.lSupport.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
self.lSupport.setObjectName("lSupport")
self.verticalLayout_8.addWidget(self.lSupport)
self.tblDevices = QtWidgets.QTableView(self.tabDevices)
self.tblDevices.setAlternatingRowColors(True)
self.tblDevices.setShowGrid(False)
self.tblDevices.setObjectName("tblDevices")
self.tblDevices.horizontalHeader().setDefaultSectionSize(200)
self.tblDevices.verticalHeader().setVisible(False)
self.verticalLayout_8.addWidget(self.tblDevices)
self.line = QtWidgets.QFrame(self.tabDevices)
self.line.setFrameShape(QtWidgets.QFrame.HLine)
self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
@@ -207,28 +166,38 @@ def setupUi(self, DialogOptions):
self.labelRebuildNativeStatus = QtWidgets.QLabel(self.groupBoxNativeOptions)
self.labelRebuildNativeStatus.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
self.labelRebuildNativeStatus.setObjectName("labelRebuildNativeStatus")
self.gridLayout_5.addWidget(self.labelRebuildNativeStatus, 3, 2, 1, 1)
self.gridLayout_5.addWidget(self.labelRebuildNativeStatus, 4, 2, 1, 1)
self.labelLibDirs = QtWidgets.QLabel(self.groupBoxNativeOptions)
self.labelLibDirs.setObjectName("labelLibDirs")
self.gridLayout_5.addWidget(self.labelLibDirs, 2, 0, 1, 1)
self.gridLayout_5.addWidget(self.labelLibDirs, 3, 0, 1, 1)
self.btnRebuildNative = QtWidgets.QPushButton(self.groupBoxNativeOptions)
self.btnRebuildNative.setEnabled(True)
icon = QtGui.QIcon.fromTheme("view-refresh")
self.btnRebuildNative.setIcon(icon)
self.btnRebuildNative.setObjectName("btnRebuildNative")
self.gridLayout_5.addWidget(self.btnRebuildNative, 3, 0, 1, 1)
self.gridLayout_5.addWidget(self.btnRebuildNative, 4, 0, 1, 1)
self.labelNativeRebuildInfo = QtWidgets.QLabel(self.groupBoxNativeOptions)
self.labelNativeRebuildInfo.setWordWrap(True)
self.labelNativeRebuildInfo.setObjectName("labelNativeRebuildInfo")
self.gridLayout_5.addWidget(self.labelNativeRebuildInfo, 1, 0, 1, 3)
self.gridLayout_5.addWidget(self.labelNativeRebuildInfo, 2, 0, 1, 3)
self.lineEditLibDirs = QtWidgets.QLineEdit(self.groupBoxNativeOptions)
self.lineEditLibDirs.setObjectName("lineEditLibDirs")
self.gridLayout_5.addWidget(self.lineEditLibDirs, 2, 2, 1, 1)
self.gridLayout_5.addWidget(self.lineEditLibDirs, 3, 2, 1, 1)
self.btnViewBuildLog = QtWidgets.QPushButton(self.groupBoxNativeOptions)
icon = QtGui.QIcon.fromTheme("utilities-log-viewer")
self.btnViewBuildLog.setIcon(icon)
self.btnViewBuildLog.setObjectName("btnViewBuildLog")
self.gridLayout_5.addWidget(self.btnViewBuildLog, 3, 1, 1, 1)
self.gridLayout_5.addWidget(self.btnViewBuildLog, 4, 1, 1, 1)
self.btnHealthCheck = QtWidgets.QPushButton(self.groupBoxNativeOptions)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.btnHealthCheck.sizePolicy().hasHeightForWidth())
self.btnHealthCheck.setSizePolicy(sizePolicy)
icon = QtGui.QIcon.fromTheme("heart")
self.btnHealthCheck.setIcon(icon)
self.btnHealthCheck.setObjectName("btnHealthCheck")
self.gridLayout_5.addWidget(self.btnHealthCheck, 1, 0, 1, 1)
self.verticalLayout_8.addWidget(self.groupBoxNativeOptions)
self.line_2 = QtWidgets.QFrame(self.tabDevices)
self.line_2.setFrameShape(QtWidgets.QFrame.HLine)
@@ -331,12 +300,6 @@ def retranslateUi(self, DialogOptions):
self.btnRemoveLabeltype.setText(_translate("DialogOptions", "..."))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabFieldtypes), _translate("DialogOptions", "Fieldtypes"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_plugins), _translate("DialogOptions", "Plugins"))
self.chkBoxDeviceEnabled.setText(_translate("DialogOptions", "Enabled"))
self.rbNativeBackend.setText(_translate("DialogOptions", "&Native backend (recommended)"))
self.rbGnuradioBackend.setText(_translate("DialogOptions", "&Gnuradio backend"))
self.btnHealthCheck.setToolTip(_translate("DialogOptions", "Perform a health check for native device extensions."))
self.btnHealthCheck.setText(_translate("DialogOptions", "Health Check"))
self.lSupport.setText(_translate("DialogOptions", "device supports sending and receiving"))
self.groupBoxNativeOptions.setTitle(_translate("DialogOptions", "Native options"))
self.labelRebuildNativeStatus.setText(_translate("DialogOptions", "Rebuild <x> new device extensions. Please restart URH to use them."))
self.labelLibDirs.setText(_translate("DialogOptions", "Library directories:"))
@@ -345,6 +308,8 @@ def retranslateUi(self, DialogOptions):
self.labelNativeRebuildInfo.setText(_translate("DialogOptions", "You can rebuild the native device extensions here. This is useful, when you installed a device driver afterwards or your drivers are stored in an unusual location."))
self.lineEditLibDirs.setPlaceholderText(_translate("DialogOptions", "Comma separated list of additional library directories"))
self.btnViewBuildLog.setText(_translate("DialogOptions", "View log"))
self.btnHealthCheck.setToolTip(_translate("DialogOptions", "Perform a health check for native device extensions."))
self.btnHealthCheck.setText(_translate("DialogOptions", "Health Check"))
self.groupBox_3.setTitle(_translate("DialogOptions", "Gnuradio options"))
self.label_11.setText(_translate("DialogOptions", "Needed for Gnuradio backend only"))
self.lineEditPython2Interpreter.setToolTip(_translate("DialogOptions", "<html><head/><body><p>Use this option if you installed Gnuradio with your package manager e.g. on Linux and Mac OS X.</p></body></html>"))