| 110 | } |
| 111 | |
| 112 | void ClientDeEssApplet::buildUI() |
| 113 | { |
| 114 | setStyleSheet("QWidget { background: transparent; }"); |
| 115 | |
| 116 | auto* outer = new QVBoxLayout(this); |
| 117 | outer->setContentsMargins(4, 4, 4, 4); |
| 118 | outer->setSpacing(4); |
| 119 | |
| 120 | m_curve = new ClientDeEssCurveWidget; |
| 121 | m_curve->setCompactMode(true); |
| 122 | m_curve->setMinimumHeight(90); |
| 123 | outer->addWidget(m_curve, 1); |
| 124 | |
| 125 | m_grBar = new ClientDeEssGrBar; |
| 126 | outer->addWidget(m_grBar); |
| 127 | |
| 128 | // Enable / Edit buttons removed — CHAIN widget handles bypass |
| 129 | // (single-click) and editor-open (double-click). |
| 130 | |
| 131 | // Four-knob tuning row — Freq, Q, Thresh, Amount. Mappings mirror |
| 132 | // ClientDeEssEditor. |
| 133 | { |
| 134 | auto* row = new QHBoxLayout; |
| 135 | row->setSpacing(4); |
| 136 | |
| 137 | auto makeKnob = [](const QString& label) { |
| 138 | auto* k = new ClientCompKnob; |
| 139 | k->setLabel(label); |
| 140 | k->setCenterLabelMode(true); |
| 141 | k->setInlineEditEnabled(false); |
| 142 | k->setFixedSize(38, 48); |
| 143 | return k; |
| 144 | }; |
| 145 | |
| 146 | m_freq = makeKnob("Freq"); |
| 147 | m_freq->setRange(1000.0f, 12000.0f); |
| 148 | m_freq->setDefault(6000.0f); |
| 149 | m_freq->setValueFromNorm([](float n) { |
| 150 | return 1000.0f * std::pow(12.0f, n); |
| 151 | }); |
| 152 | m_freq->setNormFromValue([](float v) { |
| 153 | return std::log(std::max(1000.0f, v) / 1000.0f) |
| 154 | / std::log(12.0f); |
| 155 | }); |
| 156 | m_freq->setLabelFormat([](float v) { |
| 157 | return (v >= 1000.0f) |
| 158 | ? QString::number(v / 1000.0f, 'f', 1) + " kHz" |
| 159 | : QString::number(v, 'f', 0) + " Hz"; |
| 160 | }); |
| 161 | row->addWidget(m_freq); |
| 162 | |
| 163 | m_q = makeKnob("Q"); |
| 164 | m_q->setRange(0.5f, 5.0f); |
| 165 | m_q->setDefault(2.0f); |
| 166 | m_q->setValueFromNorm([](float n) { return 0.5f + n * 4.5f; }); |
| 167 | m_q->setNormFromValue([](float v) { return (v - 0.5f) / 4.5f; }); |
| 168 | m_q->setLabelFormat([](float v) { |
| 169 | return QString::number(v, 'f', 2); |
nothing calls this directly
no test coverage detected