Browse Source

Convert plugin list refresh dialog to C++

Signed-off-by: falkTX <falktx@falktx.com>
pull/1723/head
falkTX 1 year ago
parent
commit
6157a6e85d
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
8 changed files with 717 additions and 12 deletions
  1. +2
    -1
      source/frontend/Makefile
  2. +18
    -4
      source/frontend/carla_frontend.py
  3. +4
    -0
      source/frontend/carla_host.py
  4. +4
    -5
      source/frontend/pluginlist/.kdev_include_paths
  5. +589
    -0
      source/frontend/pluginlist/pluginlistrefreshdialog.cpp
  6. +94
    -0
      source/frontend/pluginlist/pluginlistrefreshdialog.hpp
  7. +3
    -0
      source/frontend/utils/.kdev_include_paths
  8. +3
    -2
      source/frontend/widgets/.kdev_include_paths

+ 2
- 1
source/frontend/Makefile View File

@@ -73,7 +73,8 @@ CPP_FILES = \
carla_frontend.cpp \
dialogs/aboutjucedialog.cpp \
dialogs/jackappdialog.cpp \
pluginlist/pluginlistdialog.cpp
pluginlist/pluginlistdialog.cpp \
pluginlist/pluginlistrefreshdialog.cpp

OBJS = $(CPP_FILES:%=$(OBJDIR)/%.o)



+ 18
- 4
source/frontend/carla_frontend.py View File

@@ -23,7 +23,7 @@
# Imports (ctypes)

from ctypes import (
c_bool, c_char_p, c_int, c_void_p, cast,
c_bool, c_char, c_char_p, c_int, c_void_p, cast,
cdll, Structure,
POINTER
)
@@ -61,6 +61,11 @@ class PluginListDialogResults(Structure):
("label", c_char_p)
]

class PluginListRefreshDialogResults(Structure):
_fields_ = [
("todo", c_char)
]

# ------------------------------------------------------------------------------------------------------------
# Carla Frontend object using a DLL

@@ -75,7 +80,10 @@ class CarlaFrontendLib():
self.lib.carla_frontend_createAndExecJackAppDialog.restype = POINTER(JackApplicationDialogResults)

self.lib.carla_frontend_createAndExecPluginListDialog.argtypes = (c_void_p, c_bool)
self.lib.carla_frontend_createAndExecPluginListDialog.restype = POINTER(JackApplicationDialogResults)
self.lib.carla_frontend_createAndExecPluginListDialog.restype = POINTER(PluginListDialogResults)

self.lib.carla_frontend_createAndExecPluginListRefreshDialog.argtypes = (c_void_p, c_bool)
self.lib.carla_frontend_createAndExecPluginListRefreshDialog.restype = POINTER(PluginListRefreshDialogResults)

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

@@ -83,9 +91,15 @@ class CarlaFrontendLib():
self.lib.carla_frontend_createAndExecAboutJuceDialog(unwrapinstance(parent))

def createAndExecJackAppDialog(self, parent, projectFilename):
return structToDictOrNull(self.lib.carla_frontend_createAndExecJackAppDialog(unwrapinstance(parent), projectFilename.encode("utf-8")))
return structToDictOrNull(self.lib.carla_frontend_createAndExecJackAppDialog(unwrapinstance(parent),
projectFilename.encode("utf-8")))

def createAndExecPluginListDialog(self, parent, useSystemIcons):
self.lib.carla_frontend_createAndExecPluginListDialog(unwrapinstance(parent), useSystemIcons)
return structToDictOrNull(self.lib.carla_frontend_createAndExecPluginListDialog(unwrapinstance(parent),
useSystemIcons))

def createAndExecPluginListRefreshDialog(self, parent, useSystemIcons):
return structToDictOrNull(self.lib.carla_frontend_createAndExecPluginListRefreshDialog(unwrapinstance(parent),
useSystemIcons))

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

+ 4
- 0
source/frontend/carla_host.py View File

@@ -1212,6 +1212,10 @@ class HostWindow(QMainWindow):
#self.fSavedSettings[CARLA_KEY_MAIN_SYSTEM_ICONS])
#print(ret)
#return
#ret = gCarla.felib.createAndExecPluginListRefreshDialog(self.fParentOrSelf,
#self.fSavedSettings[CARLA_KEY_MAIN_SYSTEM_ICONS])
#print(ret)
#return

if self.fPluginDatabaseDialog is None:
self.fPluginDatabaseDialog = PluginListDialog(self.fParentOrSelf, self.host,


+ 4
- 5
source/frontend/pluginlist/.kdev_include_paths View File

@@ -1,6 +1,5 @@
/usr/include/x86_64-linux-gnu/qt5
../utils/
../../backend/
../../includes/
../../modules/
../../utils/
../utils
../../backend
../../includes
../../utils

+ 589
- 0
source/frontend/pluginlist/pluginlistrefreshdialog.cpp View File

@@ -0,0 +1,589 @@
/*
* Carla plugin host
* Copyright (C) 2011-2022 Filipe Coelho <falktx@falktx.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* For a full copy of the GNU General Public License see the doc/GPL.txt file.
*/

#include "pluginlistrefreshdialog.hpp"

#ifdef __clang__
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wdeprecated-copy-with-user-provided-copy"
# pragma clang diagnostic ignored "-Wdeprecated-register"
#elif defined(__GNUC__) && __GNUC__ >= 8
# pragma GCC diagnostic push
# pragma GCC diagnostic ignored "-Wclass-memaccess"
# pragma GCC diagnostic ignored "-Wdeprecated-copy"
#endif

#include "pluginlistrefreshdialog_ui.hpp"
#include <QtCore/QFileInfo>
#include <QtWidgets/QPushButton>

#ifdef __clang__
# pragma clang diagnostic pop
#elif defined(__GNUC__) && __GNUC__ >= 8
# pragma GCC diagnostic pop
#endif

#include "qsafesettings.hpp"

#include "CarlaUtils.h"

#include <cstring>

static bool hasFeature(const char* const* const features, const char* const feature)
{
if (features == nullptr)
return false;

for (int i=0; features[i] != nullptr; ++i)
{
if (std::strcmp(features[i], feature) == 0)
return true;
}

return false;
}

// --------------------------------------------------------------------------------------------------------------------
// Jack Application Dialog

struct PluginListRefreshDialog::Self {
Ui_PluginRefreshW ui;
QPixmap fIconYes;
QPixmap fIconNo;

Self() {}

static Self& create()
{
Self* const self = new Self();
return *self;
}
};

PluginListRefreshDialog::PluginListRefreshDialog(QWidget* const parent, const bool useSystemIcons)
: QDialog(parent),
self(Self::create())
{
self.ui.setupUi(this);

// ----------------------------------------------------------------------------------------------------------------
// Internal stuff

#ifdef CARLA_OS_WIN
#define APP_EXT ".exe"
#else
#define APP_EXT ".exe"
#endif

QString hostPathBinaries;
const bool hasNative = QFileInfo::exists(QCarlaString(hostPathBinaries) + CARLA_OS_SEP_STR "carla-discovery-native" APP_EXT);
const bool hasPosix32 = QFileInfo::exists(QCarlaString(hostPathBinaries) + CARLA_OS_SEP_STR "carla-discovery-posix32");
const bool hasPosix64 = QFileInfo::exists(QCarlaString(hostPathBinaries) + CARLA_OS_SEP_STR "carla-discovery-posix64");
const bool hasWin32 = QFileInfo::exists(QCarlaString(hostPathBinaries) + CARLA_OS_SEP_STR "carla-discovery-win32.exe");
const bool hasWin64 = QFileInfo::exists(QCarlaString(hostPathBinaries) + CARLA_OS_SEP_STR "carla-discovery-win64.exe");

// self.fThread = SearchPluginsThread(self, host.pathBinaries)

// ----------------------------------------------------------------------------------------------------------------
// Set-up Icons

if (useSystemIcons)
{
// self.ui.b_start->setIcon(getIcon("arrow-right", 16, "svgz"));
// self.ui.b_close->setIcon(getIcon("window-close", 16, "svgz"));
// if QT_VERSION >= 0x50600:
// size = int(16 * self.devicePixelRatioF())
// else:
// size = 16
// self.fIconYes = QPixmap(getIcon('dialog-ok-apply', 16, 'svgz').pixmap(size))
// self.fIconNo = QPixmap(getIcon('dialog-error', 16, 'svgz').pixmap(size))
}
else
{
self.fIconYes = QPixmap(":/16x16/dialog-ok-apply.svgz");
self.fIconNo = QPixmap(":/16x16/dialog-error.svgz");
}

// ----------------------------------------------------------------------------------------------------------------
// UI setup

// FIXME remove LRDF
self.ui.ico_rdflib->setPixmap(self.fIconNo);

self.ui.b_skip->hide();

#if defined(CARLA_OS_HAIKU)
self.ui.ch_posix32->setText("Haiku 32bit");
self.ui.ch_posix64->setText("Haiku 64bit");
#elif defined(CARLA_OS_LINUX)
self.ui.ch_posix32->setText("Linux 32bit");
self.ui.ch_posix64->setText("Linux 64bit");
#elif defined(CARLA_OS_MAC)
self.ui.ch_posix32->setText("MacOS 32bit");
self.ui.ch_posix64->setText("MacOS 64bit");
#endif

#ifndef CARLA_OS_WIN
if (hasPosix32)
{
self.ui.ico_posix32->setPixmap(self.fIconYes);
}
else
#endif
{
self.ui.ico_posix32->setPixmap(self.fIconNo);
self.ui.ch_posix32->setEnabled(false);
}

#ifndef CARLA_OS_WIN
if (hasPosix64)
{
self.ui.ico_posix64->setPixmap(self.fIconYes);
}
else
#endif
{
self.ui.ico_posix64->setPixmap(self.fIconNo);
self.ui.ch_posix64->setEnabled(false);
}

if (hasWin32)
{
self.ui.ico_win32->setPixmap(self.fIconYes);
}
else
{
self.ui.ico_win32->setPixmap(self.fIconNo);
self.ui.ch_win32->setEnabled(false);
}

if (hasWin64)
{
self.ui.ico_win64->setPixmap(self.fIconYes);
}
else
{
self.ui.ico_win64->setPixmap(self.fIconNo);
self.ui.ch_win64->setEnabled(false);
}

bool hasNonNative;

#if defined(CARLA_OS_WIN)
#ifdef CARLA_OS_64BIT
hasNonNative = hasWin32;
self.ui.ch_win64->setEnabled(false);
self.ui.ch_win64->setVisible(false);
self.ui.ico_win64->setVisible(false);
self.ui.label_win64->setVisible(false);
#else
hasNonNative = hasWin64;
self.ui.ch_win32->setEnabled(false);
self.ui.ch_win32->setVisible(false);
self.ui.ico_win32->setVisible(false);
self.ui.label_win32->setVisible(false);
#endif

self.ui.ch_posix32->setEnabled(false);
self.ui.ch_posix32->setVisible(false);
self.ui.ch_posix64->setEnabled(false);
self.ui.ch_posix64->setVisible(false);
self.ui.ico_posix32->hide();
self.ui.ico_posix64->hide();
self.ui.label_posix32->hide();
self.ui.label_posix64->hide();
self.ui.ico_rdflib->hide();
self.ui.label_rdflib->hide();
#elif defined(CARLA_OS_64BIT)
hasNonNative = hasPosix32 || hasWin32 || hasWin64;
self.ui.ch_posix64->setEnabled(false);
self.ui.ch_posix64->setVisible(false);
self.ui.ico_posix64->setVisible(false);
self.ui.label_posix64->setVisible(false);
#else
hasNonNative = hasPosix64 || hasWin32 || hasWin64;
self.ui.ch_posix32->setEnabled(false);
self.ui.ch_posix32->setVisible(false);
self.ui.ico_posix32->setVisible(false);
self.ui.label_posix32->setVisible(false);
#endif

#ifdef CARLA_OS_MAC
setWindowModality(Qt::WindowModal);
#else
self.ui.ch_au->setEnabled(false);
self.ui.ch_au->setVisible(false);
#endif

if (hasNative)
{
self.ui.ico_native->setPixmap(self.fIconYes);
}
else
{
self.ui.ico_native->setPixmap(self.fIconNo);
self.ui.ch_native->setEnabled(false);
self.ui.ch_sf2->setEnabled(false);
if (! hasNonNative)
{
self.ui.ch_ladspa->setEnabled(false);
self.ui.ch_dssi->setEnabled(false);
self.ui.ch_vst->setEnabled(false);
self.ui.ch_vst3->setEnabled(false);
self.ui.ch_clap->setEnabled(false);
}
}

// TODO
// if (! hasLoadedLv2Plugins)
self.ui.lv2_restart_notice->hide();

setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);

// ----------------------------------------------------------------------------------------------------------------
// Load settings

loadSettings();

// ----------------------------------------------------------------------------------------------------------------
// Hide bridges if disabled

// TODO
bool showPluginBridges = true;
bool showWineBridges = true;

#ifdef CARLA_OS_WIN
#ifndef CARLA_OS_64BIT
// NOTE: We Assume win32 carla build will not run win64 plugins
showPluginBridges = false;
#endif
showWineBridges = false;
#endif

if (! showPluginBridges)
{
self.ui.ch_native->setChecked(true);
self.ui.ch_native->setEnabled(false);
self.ui.ch_native->setVisible(false);
self.ui.ch_posix32->setChecked(false);
self.ui.ch_posix32->setEnabled(false);
self.ui.ch_posix32->setVisible(false);
self.ui.ch_posix64->setChecked(false);
self.ui.ch_posix64->setEnabled(false);
self.ui.ch_posix64->setVisible(false);
self.ui.ch_win32->setChecked(false);
self.ui.ch_win32->setEnabled(false);
self.ui.ch_win32->setVisible(false);
self.ui.ch_win64->setChecked(false);
self.ui.ch_win64->setEnabled(false);
self.ui.ch_win64->setVisible(false);
self.ui.ico_posix32->hide();
self.ui.ico_posix64->hide();
self.ui.ico_win32->hide();
self.ui.ico_win64->hide();
self.ui.label_posix32->hide();
self.ui.label_posix64->hide();
self.ui.label_win32->hide();
self.ui.label_win64->hide();
self.ui.sep_format->hide();
}
else if (! showWineBridges)
{
self.ui.ch_win32->setChecked(false);
self.ui.ch_win32->setEnabled(false);
self.ui.ch_win32->setVisible(false);
self.ui.ch_win64->setChecked(false);
self.ui.ch_win64->setEnabled(false);
self.ui.ch_win64->setVisible(false);
self.ui.ico_win32->hide();
self.ui.ico_win64->hide();
self.ui.label_win32->hide();
self.ui.label_win64->hide();
}

// Disable non-supported features
const char* const* const features = carla_get_supported_features();

if (! hasFeature(features, "sf2"))
{
self.ui.ch_sf2->setChecked(false);
self.ui.ch_sf2->setEnabled(false);
}

#ifdef CARLA_OS_MAC
if (! hasFeature(features, "juce"))
{
self.ui.ch_au.setChecked(false);
self.ui.ch_au.setEnabled(false);
}
#endif

// ----------------------------------------------------------------------------------------------------------------
// Resize to minimum size, as it's very likely UI stuff was hidden

resize(minimumSize());

// ----------------------------------------------------------------------------------------------------------------
// Set-up connections

connect(this, &QDialog::finished,
this, &PluginListRefreshDialog::slot_saveSettings);
// self.ui.b_start.clicked.connect(self.slot_start)
// self.ui.b_skip.clicked.connect(self.slot_skip)
// self.ui.ch_native.clicked.connect(self.slot_checkTools)
// self.ui.ch_posix32.clicked.connect(self.slot_checkTools)
// self.ui.ch_posix64.clicked.connect(self.slot_checkTools)
// self.ui.ch_win32.clicked.connect(self.slot_checkTools)
// self.ui.ch_win64.clicked.connect(self.slot_checkTools)
// self.ui.ch_ladspa.clicked.connect(self.slot_checkTools)
// self.ui.ch_dssi.clicked.connect(self.slot_checkTools)
// self.ui.ch_lv2.clicked.connect(self.slot_checkTools)
// self.ui.ch_vst.clicked.connect(self.slot_checkTools)
// self.ui.ch_vst3.clicked.connect(self.slot_checkTools)
// self.ui.ch_clap.clicked.connect(self.slot_checkTools)
// self.ui.ch_au.clicked.connect(self.slot_checkTools)
// self.ui.ch_sf2.clicked.connect(self.slot_checkTools)
// self.ui.ch_sfz.clicked.connect(self.slot_checkTools)
// self.ui.ch_jsfx.clicked.connect(self.slot_checkTools)
// self.fThread.pluginLook.connect(self.slot_handlePluginLook)
// self.fThread.finished.connect(self.slot_handlePluginThreadFinished)

// connect(this, &QDialog::finished,
// this, &JackAppDialog::slot_saveSettings);
// connect(self.ui.cb_session_mgr, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
// this, &JackAppDialog::slot_sessionManagerChanged);
// connect(self.ui.le_command, &QLineEdit::textChanged,
// this, &JackAppDialog::slot_commandChanged);

// ----------------------------------------------------------------------------------------------------------------
// Post-connect setup

slot_checkTools();
}

PluginListRefreshDialog::~PluginListRefreshDialog()
{
delete &self;
}

// -----------------------------------------------------------------------------------------------------------------
// public methods

// -----------------------------------------------------------------------------------------------------------------
// protected methods

void PluginListRefreshDialog::closeEvent(QCloseEvent* const event)
{
/*
if (self.fThread.isRunning())
{
self.fThread.stop();
killDiscovery();
#self.fThread.terminate();
self.fThread.wait();
}

if (self.fThread.hasSomethingChanged())
accept();
else
*/
reject();

QDialog::closeEvent(event);
}

// -----------------------------------------------------------------------------------------------------------------
// private methods

void PluginListRefreshDialog::loadSettings()
{
const QSafeSettings settings("falkTX", "CarlaRefresh2");

bool check;

check = settings.valueBool("PluginDatabase/SearchLADSPA", true) and self.ui.ch_ladspa->isEnabled();
self.ui.ch_ladspa->setChecked(check);

check = settings.valueBool("PluginDatabase/SearchDSSI", true) and self.ui.ch_dssi->isEnabled();
self.ui.ch_dssi->setChecked(check);

check = settings.valueBool("PluginDatabase/SearchLV2", true) and self.ui.ch_lv2->isEnabled();
self.ui.ch_lv2->setChecked(check);

check = settings.valueBool("PluginDatabase/SearchVST2", true) and self.ui.ch_vst->isEnabled();
self.ui.ch_vst->setChecked(check);

check = settings.valueBool("PluginDatabase/SearchVST3", true) and self.ui.ch_vst3->isEnabled();
self.ui.ch_vst3->setChecked(check);

check = settings.valueBool("PluginDatabase/SearchCLAP", true) and self.ui.ch_clap->isEnabled();
self.ui.ch_clap->setChecked(check);

#ifdef CARLA_OS_MAC
check = settings.valueBool("PluginDatabase/SearchAU", true) and self.ui.ch_au->isEnabled();
#else
check = false;
#endif
self.ui.ch_au->setChecked(check);

check = settings.valueBool("PluginDatabase/SearchSF2", false) and self.ui.ch_sf2->isEnabled();
self.ui.ch_sf2->setChecked(check);

check = settings.valueBool("PluginDatabase/SearchSFZ", false) and self.ui.ch_sfz->isEnabled();
self.ui.ch_sfz->setChecked(check);

check = settings.valueBool("PluginDatabase/SearchJSFX", true) and self.ui.ch_jsfx->isEnabled();
self.ui.ch_jsfx->setChecked(check);

check = settings.valueBool("PluginDatabase/SearchNative", true) and self.ui.ch_native->isEnabled();
self.ui.ch_native->setChecked(check);

check = settings.valueBool("PluginDatabase/SearchPOSIX32", false) and self.ui.ch_posix32->isEnabled();
self.ui.ch_posix32->setChecked(check);

check = settings.valueBool("PluginDatabase/SearchPOSIX64", false) and self.ui.ch_posix64->isEnabled();
self.ui.ch_posix64->setChecked(check);

check = settings.valueBool("PluginDatabase/SearchWin32", false) and self.ui.ch_win32->isEnabled();
self.ui.ch_win32->setChecked(check);

check = settings.valueBool("PluginDatabase/SearchWin64", false) and self.ui.ch_win64->isEnabled();
self.ui.ch_win64->setChecked(check);

self.ui.ch_do_checks->setChecked(settings.valueBool("PluginDatabase/DoChecks", false));
}

// -----------------------------------------------------------------------------------------------------------------
// private slots

void PluginListRefreshDialog::slot_saveSettings()
{
QSafeSettings settings("falkTX", "CarlaRefresh2");
settings.setValue("PluginDatabase/SearchLADSPA", self.ui.ch_ladspa->isChecked());
settings.setValue("PluginDatabase/SearchDSSI", self.ui.ch_dssi->isChecked());
settings.setValue("PluginDatabase/SearchLV2", self.ui.ch_lv2->isChecked());
settings.setValue("PluginDatabase/SearchVST2", self.ui.ch_vst->isChecked());
settings.setValue("PluginDatabase/SearchVST3", self.ui.ch_vst3->isChecked());
settings.setValue("PluginDatabase/SearchCLAP", self.ui.ch_clap->isChecked());
settings.setValue("PluginDatabase/SearchAU", self.ui.ch_au->isChecked());
settings.setValue("PluginDatabase/SearchSF2", self.ui.ch_sf2->isChecked());
settings.setValue("PluginDatabase/SearchSFZ", self.ui.ch_sfz->isChecked());
settings.setValue("PluginDatabase/SearchJSFX", self.ui.ch_jsfx->isChecked());
settings.setValue("PluginDatabase/SearchNative", self.ui.ch_native->isChecked());
settings.setValue("PluginDatabase/SearchPOSIX32", self.ui.ch_posix32->isChecked());
settings.setValue("PluginDatabase/SearchPOSIX64", self.ui.ch_posix64->isChecked());
settings.setValue("PluginDatabase/SearchWin32", self.ui.ch_win32->isChecked());
settings.setValue("PluginDatabase/SearchWin64", self.ui.ch_win64->isChecked());
settings.setValue("PluginDatabase/DoChecks", self.ui.ch_do_checks->isChecked());
}

void PluginListRefreshDialog::slot_start()
{
self.ui.progressBar->setMinimum(0);
self.ui.progressBar->setMaximum(100);
self.ui.progressBar->setValue(0);
self.ui.b_start->setEnabled(false);
self.ui.b_skip->setVisible(true);
self.ui.b_close->setVisible(false);
self.ui.group_types->setEnabled(false);
self.ui.group_options->setEnabled(false);

// if gCarla.utils:
// if self.ui.ch_do_checks.isChecked():
// gCarla.utils.unsetenv("CARLA_DISCOVERY_NO_PROCESSING_CHECKS")
// else:
// gCarla.utils.setenv("CARLA_DISCOVERY_NO_PROCESSING_CHECKS", "true")
//
// native, posix32, posix64, win32, win64 = (self.ui.ch_native.isChecked(),
// self.ui.ch_posix32.isChecked(), self.ui.ch_posix64.isChecked(),
// self.ui.ch_win32.isChecked(), self.ui.ch_win64.isChecked())
//
// ladspa, dssi, lv2, vst, vst3, clap, au, sf2, sfz, jsfx = (self.ui.ch_ladspa.isChecked(), self.ui.ch_dssi.isChecked(),
// self.ui.ch_lv2.isChecked(), self.ui.ch_vst.isChecked(),
// self.ui.ch_vst3.isChecked(), self.ui.ch_clap.isChecked(),
// self.ui.ch_au.isChecked(), self.ui.ch_sf2.isChecked(),
// self.ui.ch_sfz.isChecked(), self.ui.ch_jsfx.isChecked())
//
// self.fThread.setSearchBinaryTypes(native, posix32, posix64, win32, win64)
// self.fThread.setSearchPluginTypes(ladspa, dssi, lv2, vst, vst3, clap, au, sf2, sfz, jsfx)
// self.fThread.start()
}

void PluginListRefreshDialog::slot_skip()
{
// killDiscovery();
}

void PluginListRefreshDialog::slot_checkTools()
{
const bool enabled1 = self.ui.ch_native->isChecked()
|| self.ui.ch_posix32->isChecked()
|| self.ui.ch_posix64->isChecked()
|| self.ui.ch_win32->isChecked()
|| self.ui.ch_win64->isChecked();

const bool enabled2 = self.ui.ch_ladspa->isChecked()
|| self.ui.ch_dssi->isChecked()
|| self.ui.ch_lv2->isChecked()
|| self.ui.ch_vst->isChecked()
|| self.ui.ch_vst3->isChecked()
|| self.ui.ch_clap->isChecked()
|| self.ui.ch_au->isChecked()
|| self.ui.ch_sf2->isChecked()
|| self.ui.ch_sfz->isChecked()
|| self.ui.ch_jsfx->isChecked();

self.ui.b_start->setEnabled(enabled1 and enabled2);
}

void PluginListRefreshDialog::slot_handlePluginLook(const int percent, const QString plugin)
{
self.ui.progressBar->setFormat(plugin);
self.ui.progressBar->setValue(percent);
}

void PluginListRefreshDialog::slot_handlePluginThreadFinished()
{
self.ui.progressBar->setMinimum(0);
self.ui.progressBar->setMaximum(1);
self.ui.progressBar->setValue(1);
self.ui.progressBar->setFormat(tr("Done"));
self.ui.b_start->setEnabled(true);
self.ui.b_skip->setVisible(false);
self.ui.b_close->setVisible(true);
self.ui.group_types->setEnabled(true);
self.ui.group_options->setEnabled(true);
}

// --------------------------------------------------------------------------------------------------------------------

PluginListRefreshDialogResults* carla_frontend_createAndExecPluginListRefreshDialog(void* const parent,
const bool useSystemIcons)
{
PluginListRefreshDialog gui(reinterpret_cast<QWidget*>(parent), useSystemIcons);

if (gui.exec())
{
static PluginListRefreshDialogResults ret = {};

return &ret;
}

return nullptr;
}

// --------------------------------------------------------------------------------------------------------------------

+ 94
- 0
source/frontend/pluginlist/pluginlistrefreshdialog.hpp View File

@@ -0,0 +1,94 @@
/*
* Carla plugin host
* Copyright (C) 2011-2022 Filipe Coelho <falktx@falktx.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* For a full copy of the GNU General Public License see the doc/GPL.txt file.
*/

#pragma once

#ifdef __clang__
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wdeprecated-copy-with-user-provided-copy"
# pragma clang diagnostic ignored "-Wdeprecated-register"
#elif defined(__GNUC__) && __GNUC__ >= 8
# pragma GCC diagnostic push
# pragma GCC diagnostic ignored "-Wclass-memaccess"
# pragma GCC diagnostic ignored "-Wdeprecated-copy"
#endif

#include <QtWidgets/QDialog>

#ifdef __clang__
# pragma clang diagnostic pop
#elif defined(__GNUC__) && __GNUC__ >= 8
# pragma GCC diagnostic pop
#endif

#include "qcarlastring.hpp"

// --------------------------------------------------------------------------------------------------------------------
// Jack Application Dialog

class PluginListRefreshDialog : public QDialog
{
struct Self;
Self& self;

// ----------------------------------------------------------------------------------------------------------------

public:
explicit PluginListRefreshDialog(QWidget* parent, bool useSystemIcons);
~PluginListRefreshDialog() override;

// ----------------------------------------------------------------------------------------------------------------
// public methods

// ----------------------------------------------------------------------------------------------------------------
// protected methods

protected:
void closeEvent(QCloseEvent*) override;

// ----------------------------------------------------------------------------------------------------------------
// private methods

private:
void loadSettings();

// ----------------------------------------------------------------------------------------------------------------
// private slots

private slots:
void slot_saveSettings();
void slot_start();
void slot_skip();
void slot_checkTools();
void slot_handlePluginLook(int percent, QString plugin);
void slot_handlePluginThreadFinished();
};

// --------------------------------------------------------------------------------------------------------------------

extern "C" {

struct PluginListRefreshDialogResults {
char todo;
};

CARLA_API
PluginListRefreshDialogResults* carla_frontend_createAndExecPluginListRefreshDialog(void* parent, bool useSystemIcons);

}

// --------------------------------------------------------------------------------------------------------------------

+ 3
- 0
source/frontend/utils/.kdev_include_paths View File

@@ -0,0 +1,3 @@
/usr/include/x86_64-linux-gnu/qt5
../../includes
../../utils

+ 3
- 2
source/frontend/widgets/.kdev_include_paths View File

@@ -1,2 +1,3 @@
../includes/
../utils/
/usr/include/x86_64-linux-gnu/qt5
../../includes
../../utils

Loading…
Cancel
Save