Browse Source

Implement favorite plugins list; Better text search

tags/v2.1-rc1
falkTX 5 years ago
parent
commit
30b7b26375
4 changed files with 120 additions and 30 deletions
  1. BIN
      resources/16x16/bookmarks.svgz
  2. +1
    -0
      resources/resources.qrc
  3. +38
    -13
      resources/ui/carla_database.ui
  4. +81
    -17
      source/frontend/carla_database.py

BIN
resources/16x16/bookmarks.svgz View File


+ 1
- 0
resources/resources.qrc View File

@@ -5,6 +5,7 @@


<file>16x16/application-exit.svgz</file> <file>16x16/application-exit.svgz</file>
<file>16x16/arrow-right.svgz</file> <file>16x16/arrow-right.svgz</file>
<file>16x16/bookmarks.svgz</file>
<file>16x16/configure.svgz</file> <file>16x16/configure.svgz</file>
<file>16x16/dialog-cancel.svgz</file> <file>16x16/dialog-cancel.svgz</file>
<file>16x16/dialog-error.svgz</file> <file>16x16/dialog-error.svgz</file>


+ 38
- 13
resources/ui/carla_database.ui View File

@@ -25,7 +25,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>164</width> <width>164</width>
<height>268</height>
<height>254</height>
</rect> </rect>
</property> </property>
<attribute name="label"> <attribute name="label">
@@ -253,37 +253,44 @@
</widget> </widget>
</item> </item>
<item row="5" column="1"> <item row="5" column="1">
<widget class="QCheckBox" name="ch_inline_display">
<widget class="QCheckBox" name="ch_gui">
<property name="text"> <property name="text">
<string>With Inline Display</string>
<string>With Custom GUI </string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="1">
<widget class="QCheckBox" name="ch_stereo">
<item row="4" column="1">
<widget class="QCheckBox" name="ch_cv">
<property name="text"> <property name="text">
<string>Stereo only</string>
<string>With CV Ports</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1">
<item row="2" column="1">
<widget class="QCheckBox" name="ch_rtsafe"> <widget class="QCheckBox" name="ch_rtsafe">
<property name="text"> <property name="text">
<string>Real-time safe only</string> <string>Real-time safe only</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="1">
<widget class="QCheckBox" name="ch_gui">
<item row="3" column="1">
<widget class="QCheckBox" name="ch_stereo">
<property name="text"> <property name="text">
<string>With Custom GUI </string>
<string>Stereo only</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="1">
<widget class="QCheckBox" name="ch_cv">
<item row="6" column="1">
<widget class="QCheckBox" name="ch_inline_display">
<property name="text"> <property name="text">
<string>With CV Ports</string>
<string>With Inline Display</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="ch_favorites">
<property name="text">
<string>Favorites only</string>
</property> </property>
</widget> </widget>
</item> </item>
@@ -758,6 +765,9 @@
<property name="wordWrap"> <property name="wordWrap">
<bool>false</bool> <bool>false</bool>
</property> </property>
<attribute name="horizontalHeaderMinimumSectionSize">
<number>24</number>
</attribute>
<attribute name="horizontalHeaderStretchLastSection"> <attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool> <bool>true</bool>
</attribute> </attribute>
@@ -770,6 +780,21 @@
<attribute name="verticalHeaderDefaultSectionSize"> <attribute name="verticalHeaderDefaultSectionSize">
<number>22</number> <number>22</number>
</attribute> </attribute>
<column>
<property name="text">
<string notr="true"/>
</property>
<property name="toolTip">
<string notr="true"/>
</property>
<property name="whatsThis">
<string notr="true"/>
</property>
<property name="icon">
<iconset resource="../resources.qrc">
<normaloff>:/16x16/bookmarks.svgz</normaloff>:/16x16/bookmarks.svgz</iconset>
</property>
</column>
<column> <column>
<property name="text"> <property name="text">
<string>Name</string> <string>Name</string>


+ 81
- 17
source/frontend/carla_database.py View File

@@ -24,7 +24,7 @@ from subprocess import Popen, PIPE


from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QEventLoop, QThread, QSettings from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QEventLoop, QThread, QSettings
from PyQt5.QtGui import QPixmap from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QApplication, QDialog, QDialogButtonBox, QTableWidgetItem
from PyQt5.QtWidgets import QApplication, QDialog, QDialogButtonBox, QHeaderView, QTableWidgetItem


# --------------------------------------------------------------------------------------------------------------------- # ---------------------------------------------------------------------------------------------------------------------
# Imports (Custom) # Imports (Custom)
@@ -1380,10 +1380,11 @@ class PluginRefreshW(QDialog):
# Plugin Database Dialog # Plugin Database Dialog


class PluginDatabaseW(QDialog): class PluginDatabaseW(QDialog):
TABLEWIDGET_ITEM_NAME = 0
TABLEWIDGET_ITEM_LABEL = 1
TABLEWIDGET_ITEM_MAKER = 2
TABLEWIDGET_ITEM_BINARY = 3
TABLEWIDGET_ITEM_FAVORITE = 0
TABLEWIDGET_ITEM_NAME = 1
TABLEWIDGET_ITEM_LABEL = 2
TABLEWIDGET_ITEM_MAKER = 3
TABLEWIDGET_ITEM_BINARY = 4


def __init__(self, parent, host): def __init__(self, parent, host):
QDialog.__init__(self, parent) QDialog.__init__(self, parent)
@@ -1402,6 +1403,8 @@ class PluginDatabaseW(QDialog):
self.fLastTableIndex = 0 self.fLastTableIndex = 0
self.fRetPlugin = None self.fRetPlugin = None
self.fRealParent = parent self.fRealParent = parent
self.fFavoritePlugins = []
self.fFavoritePluginsChanged = False


self.fTrYes = self.tr("Yes") self.fTrYes = self.tr("Yes")
self.fTrNo = self.tr("No") self.fTrNo = self.tr("No")
@@ -1468,7 +1471,8 @@ class PluginDatabaseW(QDialog):
self.ui.b_clear_filters.clicked.connect(self.slot_clearFilters) self.ui.b_clear_filters.clicked.connect(self.slot_clearFilters)
self.ui.lineEdit.textChanged.connect(self.slot_checkFilters) self.ui.lineEdit.textChanged.connect(self.slot_checkFilters)
self.ui.tableWidget.currentCellChanged.connect(self.slot_checkPlugin) self.ui.tableWidget.currentCellChanged.connect(self.slot_checkPlugin)
self.ui.tableWidget.cellDoubleClicked.connect(self.slot_addPlugin)
self.ui.tableWidget.cellClicked.connect(self.slot_cellClicked)
self.ui.tableWidget.cellDoubleClicked.connect(self.slot_cellDoubleClicked)


self.ui.ch_internal.clicked.connect(self.slot_checkFilters) self.ui.ch_internal.clicked.connect(self.slot_checkFilters)
self.ui.ch_ladspa.clicked.connect(self.slot_checkFilters) self.ui.ch_ladspa.clicked.connect(self.slot_checkFilters)
@@ -1485,6 +1489,7 @@ class PluginDatabaseW(QDialog):
self.ui.ch_native.clicked.connect(self.slot_checkFilters) self.ui.ch_native.clicked.connect(self.slot_checkFilters)
self.ui.ch_bridged.clicked.connect(self.slot_checkFilters) self.ui.ch_bridged.clicked.connect(self.slot_checkFilters)
self.ui.ch_bridged_wine.clicked.connect(self.slot_checkFilters) self.ui.ch_bridged_wine.clicked.connect(self.slot_checkFilters)
self.ui.ch_favorites.clicked.connect(self.slot_checkFilters)
self.ui.ch_rtsafe.clicked.connect(self.slot_checkFilters) self.ui.ch_rtsafe.clicked.connect(self.slot_checkFilters)
self.ui.ch_cv.clicked.connect(self.slot_checkFilters) self.ui.ch_cv.clicked.connect(self.slot_checkFilters)
self.ui.ch_gui.clicked.connect(self.slot_checkFilters) self.ui.ch_gui.clicked.connect(self.slot_checkFilters)
@@ -1499,10 +1504,34 @@ class PluginDatabaseW(QDialog):


# -------------------------------------------------------------------------------------------------------- # --------------------------------------------------------------------------------------------------------


@pyqtSlot(int, int)
def slot_cellClicked(self, row, column):
if column == self.TABLEWIDGET_ITEM_FAVORITE:
widget = self.ui.tableWidget.item(row, self.TABLEWIDGET_ITEM_FAVORITE)
plugin = self.ui.tableWidget.item(row, self.TABLEWIDGET_ITEM_NAME).data(Qt.UserRole+1)
plugin = self._createFavoritePluginDict(plugin)

if widget.checkState() == Qt.Checked:
if not plugin in self.fFavoritePlugins:
self.fFavoritePlugins.append(plugin)
self.fFavoritePluginsChanged = True
else:
try:
self.fFavoritePlugins.remove(plugin)
self.fFavoritePluginsChanged = True
except ValueError:
pass

@pyqtSlot(int, int)
def slot_cellDoubleClicked(self, row, column):
if column != self.TABLEWIDGET_ITEM_FAVORITE:
self.slot_addPlugin()

@pyqtSlot() @pyqtSlot()
def slot_addPlugin(self): def slot_addPlugin(self):
if self.ui.tableWidget.currentRow() >= 0: if self.ui.tableWidget.currentRow() >= 0:
self.fRetPlugin = self.ui.tableWidget.item(self.ui.tableWidget.currentRow(), 0).data(Qt.UserRole+1)
self.fRetPlugin = self.ui.tableWidget.item(self.ui.tableWidget.currentRow(),
self.TABLEWIDGET_ITEM_NAME).data(Qt.UserRole+1)
self.accept() self.accept()
else: else:
self.reject() self.reject()
@@ -1511,7 +1540,8 @@ class PluginDatabaseW(QDialog):
def slot_checkPlugin(self, row): def slot_checkPlugin(self, row):
if row >= 0: if row >= 0:
self.ui.b_add.setEnabled(True) self.ui.b_add.setEnabled(True)
plugin = self.ui.tableWidget.item(self.ui.tableWidget.currentRow(), 0).data(Qt.UserRole+1)
plugin = self.ui.tableWidget.item(self.ui.tableWidget.currentRow(),
self.TABLEWIDGET_ITEM_NAME).data(Qt.UserRole+1)


isSynth = bool(plugin['hints'] & PLUGIN_IS_SYNTH) isSynth = bool(plugin['hints'] & PLUGIN_IS_SYNTH)
isEffect = bool(plugin['audio.ins'] > 0 < plugin['audio.outs'] and not isSynth) isEffect = bool(plugin['audio.ins'] > 0 < plugin['audio.outs'] and not isSynth)
@@ -1610,6 +1640,7 @@ class PluginDatabaseW(QDialog):
self.ui.ch_bridged.setChecked(False) self.ui.ch_bridged.setChecked(False)
self.ui.ch_bridged_wine.setChecked(False) self.ui.ch_bridged_wine.setChecked(False)


self.ui.ch_favorites.setChecked(False)
self.ui.ch_rtsafe.setChecked(False) self.ui.ch_rtsafe.setChecked(False)
self.ui.ch_stereo.setChecked(False) self.ui.ch_stereo.setChecked(False)
self.ui.ch_cv.setChecked(False) self.ui.ch_cv.setChecked(False)
@@ -1621,6 +1652,8 @@ class PluginDatabaseW(QDialog):
if self.ui.ch_au.isEnabled(): if self.ui.ch_au.isEnabled():
self.ui.ch_au.setChecked(True) self.ui.ch_au.setChecked(True)


self.ui.lineEdit.clear()

self.blockSignals(False) self.blockSignals(False)


self._checkFilters() self._checkFilters()
@@ -1631,7 +1664,7 @@ class PluginDatabaseW(QDialog):
def slot_saveSettings(self): def slot_saveSettings(self):
settings = QSettings("falkTX", "CarlaDatabase2") settings = QSettings("falkTX", "CarlaDatabase2")
settings.setValue("PluginDatabase/Geometry", self.saveGeometry()) settings.setValue("PluginDatabase/Geometry", self.saveGeometry())
settings.setValue("PluginDatabase/TableGeometry_5", self.ui.tableWidget.horizontalHeader().saveState())
settings.setValue("PluginDatabase/TableGeometry_6", self.ui.tableWidget.horizontalHeader().saveState())
settings.setValue("PluginDatabase/ShowEffects", self.ui.ch_effects.isChecked()) settings.setValue("PluginDatabase/ShowEffects", self.ui.ch_effects.isChecked())
settings.setValue("PluginDatabase/ShowInstruments", self.ui.ch_instruments.isChecked()) settings.setValue("PluginDatabase/ShowInstruments", self.ui.ch_instruments.isChecked())
settings.setValue("PluginDatabase/ShowMIDI", self.ui.ch_midi.isChecked()) settings.setValue("PluginDatabase/ShowMIDI", self.ui.ch_midi.isChecked())
@@ -1647,6 +1680,7 @@ class PluginDatabaseW(QDialog):
settings.setValue("PluginDatabase/ShowNative", self.ui.ch_native.isChecked()) settings.setValue("PluginDatabase/ShowNative", self.ui.ch_native.isChecked())
settings.setValue("PluginDatabase/ShowBridged", self.ui.ch_bridged.isChecked()) settings.setValue("PluginDatabase/ShowBridged", self.ui.ch_bridged.isChecked())
settings.setValue("PluginDatabase/ShowBridgedWine", self.ui.ch_bridged_wine.isChecked()) settings.setValue("PluginDatabase/ShowBridgedWine", self.ui.ch_bridged_wine.isChecked())
settings.setValue("PluginDatabase/ShowFavorites", self.ui.ch_favorites.isChecked())
settings.setValue("PluginDatabase/ShowRtSafe", self.ui.ch_rtsafe.isChecked()) settings.setValue("PluginDatabase/ShowRtSafe", self.ui.ch_rtsafe.isChecked())
settings.setValue("PluginDatabase/ShowHasCV", self.ui.ch_cv.isChecked()) settings.setValue("PluginDatabase/ShowHasCV", self.ui.ch_cv.isChecked())
settings.setValue("PluginDatabase/ShowHasGUI", self.ui.ch_gui.isChecked()) settings.setValue("PluginDatabase/ShowHasGUI", self.ui.ch_gui.isChecked())
@@ -1654,10 +1688,16 @@ class PluginDatabaseW(QDialog):
settings.setValue("PluginDatabase/ShowStereoOnly", self.ui.ch_stereo.isChecked()) settings.setValue("PluginDatabase/ShowStereoOnly", self.ui.ch_stereo.isChecked())
settings.setValue("PluginDatabase/SearchText", self.ui.lineEdit.text()) settings.setValue("PluginDatabase/SearchText", self.ui.lineEdit.text())


if self.fFavoritePluginsChanged:
settings.setValue("PluginDatabase/Favorites", self.fFavoritePlugins)

# -------------------------------------------------------------------------------------------------------- # --------------------------------------------------------------------------------------------------------


def loadSettings(self): def loadSettings(self):
settings = QSettings("falkTX", "CarlaDatabase2") settings = QSettings("falkTX", "CarlaDatabase2")
self.fFavoritePlugins = settings.value("PluginDatabase/Favorites", [], type=list)
self.fFavoritePluginsChanged = False

self.restoreGeometry(settings.value("PluginDatabase/Geometry", b"")) self.restoreGeometry(settings.value("PluginDatabase/Geometry", b""))
self.ui.ch_effects.setChecked(settings.value("PluginDatabase/ShowEffects", True, type=bool)) self.ui.ch_effects.setChecked(settings.value("PluginDatabase/ShowEffects", True, type=bool))
self.ui.ch_instruments.setChecked(settings.value("PluginDatabase/ShowInstruments", True, type=bool)) self.ui.ch_instruments.setChecked(settings.value("PluginDatabase/ShowInstruments", True, type=bool))
@@ -1674,6 +1714,7 @@ class PluginDatabaseW(QDialog):
self.ui.ch_native.setChecked(settings.value("PluginDatabase/ShowNative", True, type=bool)) self.ui.ch_native.setChecked(settings.value("PluginDatabase/ShowNative", True, type=bool))
self.ui.ch_bridged.setChecked(settings.value("PluginDatabase/ShowBridged", True, type=bool)) self.ui.ch_bridged.setChecked(settings.value("PluginDatabase/ShowBridged", True, type=bool))
self.ui.ch_bridged_wine.setChecked(settings.value("PluginDatabase/ShowBridgedWine", True, type=bool)) self.ui.ch_bridged_wine.setChecked(settings.value("PluginDatabase/ShowBridgedWine", True, type=bool))
self.ui.ch_favorites.setChecked(settings.value("PluginDatabase/ShowFavorites", False, type=bool))
self.ui.ch_rtsafe.setChecked(settings.value("PluginDatabase/ShowRtSafe", False, type=bool)) self.ui.ch_rtsafe.setChecked(settings.value("PluginDatabase/ShowRtSafe", False, type=bool))
self.ui.ch_cv.setChecked(settings.value("PluginDatabase/ShowHasCV", False, type=bool)) self.ui.ch_cv.setChecked(settings.value("PluginDatabase/ShowHasCV", False, type=bool))
self.ui.ch_gui.setChecked(settings.value("PluginDatabase/ShowHasGUI", False, type=bool)) self.ui.ch_gui.setChecked(settings.value("PluginDatabase/ShowHasGUI", False, type=bool))
@@ -1681,14 +1722,30 @@ class PluginDatabaseW(QDialog):
self.ui.ch_stereo.setChecked(settings.value("PluginDatabase/ShowStereoOnly", False, type=bool)) self.ui.ch_stereo.setChecked(settings.value("PluginDatabase/ShowStereoOnly", False, type=bool))
self.ui.lineEdit.setText(settings.value("PluginDatabase/SearchText", "", type=str)) self.ui.lineEdit.setText(settings.value("PluginDatabase/SearchText", "", type=str))


tableGeometry = settings.value("PluginDatabase/TableGeometry_5")
tableGeometry = settings.value("PluginDatabase/TableGeometry_6")
horizontalHeader = self.ui.tableWidget.horizontalHeader()
if tableGeometry: if tableGeometry:
self.ui.tableWidget.horizontalHeader().restoreState(tableGeometry)
horizontalHeader.restoreState(tableGeometry)
else: else:
self.ui.tableWidget.sortByColumn(0, Qt.AscendingOrder)
horizontalHeader.setSectionResizeMode(self.TABLEWIDGET_ITEM_FAVORITE, QHeaderView.Fixed)
self.ui.tableWidget.setColumnWidth(self.TABLEWIDGET_ITEM_FAVORITE, 24)
self.ui.tableWidget.setColumnWidth(self.TABLEWIDGET_ITEM_NAME, 250)
self.ui.tableWidget.setColumnWidth(self.TABLEWIDGET_ITEM_LABEL, 200)
self.ui.tableWidget.setColumnWidth(self.TABLEWIDGET_ITEM_MAKER, 150)
self.ui.tableWidget.sortByColumn(self.TABLEWIDGET_ITEM_NAME, Qt.AscendingOrder)


# -------------------------------------------------------------------------------------------------------- # --------------------------------------------------------------------------------------------------------


def _createFavoritePluginDict(self, plugin):
return {
'name' : plugin['name'],
'build' : plugin['build'],
'type' : plugin['type'],
'filename': plugin['filename'],
'label' : plugin['label'],
'uniqueId': plugin['uniqueId'],
}

def _checkFilters(self): def _checkFilters(self):
text = self.ui.lineEdit.text().lower() text = self.ui.lineEdit.text().lower()


@@ -1710,6 +1767,7 @@ class PluginDatabaseW(QDialog):
hideBridged = not self.ui.ch_bridged.isChecked() hideBridged = not self.ui.ch_bridged.isChecked()
hideBridgedWine = not self.ui.ch_bridged_wine.isChecked() hideBridgedWine = not self.ui.ch_bridged_wine.isChecked()


hideNonFavs = self.ui.ch_favorites.isChecked()
hideNonRtSafe = self.ui.ch_rtsafe.isChecked() hideNonRtSafe = self.ui.ch_rtsafe.isChecked()
hideNonCV = self.ui.ch_cv.isChecked() hideNonCV = self.ui.ch_cv.isChecked()
hideNonGui = self.ui.ch_gui.isChecked() hideNonGui = self.ui.ch_gui.isChecked()
@@ -1729,8 +1787,8 @@ class PluginDatabaseW(QDialog):
rowCount = self.ui.tableWidget.rowCount() rowCount = self.ui.tableWidget.rowCount()


for i in range(self.fLastTableIndex): for i in range(self.fLastTableIndex):
plugin = self.ui.tableWidget.item(i, 0).data(Qt.UserRole+1)
ptext = self.ui.tableWidget.item(i, 0).data(Qt.UserRole+2)
plugin = self.ui.tableWidget.item(i, self.TABLEWIDGET_ITEM_NAME).data(Qt.UserRole+1)
ptext = self.ui.tableWidget.item(i, self.TABLEWIDGET_ITEM_NAME).data(Qt.UserRole+2)
aIns = plugin['audio.ins'] aIns = plugin['audio.ins']
aOuts = plugin['audio.outs'] aOuts = plugin['audio.outs']
cvIns = plugin['cv.ins'] cvIns = plugin['cv.ins']
@@ -1794,7 +1852,9 @@ class PluginDatabaseW(QDialog):
self.ui.tableWidget.hideRow(i) self.ui.tableWidget.hideRow(i)
elif hideNonStereo and not isStereo: elif hideNonStereo and not isStereo:
self.ui.tableWidget.hideRow(i) self.ui.tableWidget.hideRow(i)
elif text and text not in ptext:
elif text and not all(t in ptext for t in text.strip().split(' ')):
self.ui.tableWidget.hideRow(i)
elif hideNonFavs and self._createFavoritePluginDict(plugin) not in self.fFavoritePlugins:
self.ui.tableWidget.hideRow(i) self.ui.tableWidget.hideRow(i)
else: else:
self.ui.tableWidget.showRow(i) self.ui.tableWidget.showRow(i)
@@ -1809,13 +1869,17 @@ class PluginDatabaseW(QDialog):


index = self.fLastTableIndex index = self.fLastTableIndex


favItem = QTableWidgetItem()
favItem.setCheckState(Qt.Checked if self._createFavoritePluginDict(plugin) in self.fFavoritePlugins else Qt.Unchecked)

pluginText = (plugin['name']+plugin['label']+plugin['maker']+plugin['filename']).lower() pluginText = (plugin['name']+plugin['label']+plugin['maker']+plugin['filename']).lower()
self.ui.tableWidget.setItem(index, self.TABLEWIDGET_ITEM_FAVORITE, favItem)
self.ui.tableWidget.setItem(index, self.TABLEWIDGET_ITEM_NAME, QTableWidgetItem(plugin['name'])) self.ui.tableWidget.setItem(index, self.TABLEWIDGET_ITEM_NAME, QTableWidgetItem(plugin['name']))
self.ui.tableWidget.setItem(index, self.TABLEWIDGET_ITEM_LABEL, QTableWidgetItem(plugin['label'])) self.ui.tableWidget.setItem(index, self.TABLEWIDGET_ITEM_LABEL, QTableWidgetItem(plugin['label']))
self.ui.tableWidget.setItem(index, self.TABLEWIDGET_ITEM_MAKER, QTableWidgetItem(plugin['maker'])) self.ui.tableWidget.setItem(index, self.TABLEWIDGET_ITEM_MAKER, QTableWidgetItem(plugin['maker']))
self.ui.tableWidget.setItem(index, self.TABLEWIDGET_ITEM_BINARY, QTableWidgetItem(os.path.basename(plugin['filename']))) self.ui.tableWidget.setItem(index, self.TABLEWIDGET_ITEM_BINARY, QTableWidgetItem(os.path.basename(plugin['filename'])))
self.ui.tableWidget.item(index, 0).setData(Qt.UserRole+1, plugin)
self.ui.tableWidget.item(index, 0).setData(Qt.UserRole+2, pluginText)
self.ui.tableWidget.item(index, self.TABLEWIDGET_ITEM_NAME).setData(Qt.UserRole+1, plugin)
self.ui.tableWidget.item(index, self.TABLEWIDGET_ITEM_NAME).setData(Qt.UserRole+2, pluginText)


self.fLastTableIndex += 1 self.fLastTableIndex += 1




Loading…
Cancel
Save