Skip to content

Commit

Permalink
Implemented click-to-tab navigation
Browse files Browse the repository at this point in the history
  • Loading branch information
sadko4u committed Dec 8, 2024
1 parent 69b9508 commit 4e49fa4
Show file tree
Hide file tree
Showing 3 changed files with 153 additions and 48 deletions.
19 changes: 19 additions & 0 deletions include/private/ui/referencer.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,16 @@ namespace lsp
ui::IPort *pEnd;
} sample_loop_t;

typedef struct overview_t
{
lltl::parray<tk::Widget> vSpectrum;
lltl::parray<tk::Widget> vLoudness;
lltl::parray<tk::Widget> vCorrelation;
lltl::parray<tk::Widget> vWaveform;
lltl::parray<tk::Widget> vDynamics;
lltl::parray<tk::Widget> vGoniometer;
} overview_t;

typedef struct sample_loader_t
{
ui::IPort *pStatus; // Status of sample loading
Expand Down Expand Up @@ -116,6 +126,7 @@ namespace lsp
} fft_meters_t;

protected:
overview_t sOverview;
play_matrix_t sPlayMatrix;
waveform_t sWaveform;
fft_meters_t sFftMeters;
Expand All @@ -130,6 +141,8 @@ namespace lsp
static float log_relation(float v, float min, float max);

protected:
static status_t slot_overview_mouse_click(tk::Widget *sender, void *ptr, void *data);

static status_t slot_matrix_change(tk::Widget *sender, void *ptr, void *data);
static status_t slot_loop_submit(tk::Widget *sender, void *ptr, void *data);

Expand All @@ -149,6 +162,8 @@ namespace lsp
static status_t slot_spectrum_mouse_move(tk::Widget *sender, void *ptr, void *data);

protected:
status_t on_overview_click(tk::Widget *sender, const ws::event_t *ev);

status_t on_matrix_change(tk::Button *btn);
status_t on_view_submit(tk::AudioSample *s);

Expand All @@ -166,6 +181,10 @@ namespace lsp
void sync_matrix_state(ui::IPort *port, size_t flags);
void sync_waveform_state(ui::IPort *port, size_t flags);
void sync_meter_state(ui::IPort *port);

status_t init_overview_group(const char *id, lltl::parray<tk::Widget> *items);

status_t init_overview();
status_t init_waveform_graphs();
status_t init_playback_matrix();
status_t init_fft_meters();
Expand Down
98 changes: 50 additions & 48 deletions res/main/ui/utils/referencer.xml
Original file line number Diff line number Diff line change
Expand Up @@ -126,8 +126,8 @@
<!-- Row 1 -->
<hbox spacing="4" expand="true">
<!-- Spectrum -->
<group ui:inject="GraphGroup" ipadding="0" text="lists.referencer.tab.spectrum" expand="true">
<graph width.min="200" height.min="200" expand="true" fill="true">
<group ui:group="overview_spectrum" ui:inject="GraphGroup" ipadding="0" text="lists.referencer.tab.spectrum" expand="true">
<graph ui:group="overview_spectrum" width.min="200" height.min="200" expand="true" fill="true">
<origin hpos="-1" vpos="-1" visibility="false"/>

<!-- Secondary grid -->
Expand Down Expand Up @@ -222,48 +222,50 @@
</group>

<!-- Loudness -->
<group ui:inject="GraphGroup" ipadding="0" text="lists.referencer.tab.loudness" vexpand="true" hexpand="false">
<grid rows="2" cols="6" expand="true">
<ui:with bg.color="bg_schema" pad.t="2">
<label text="labels.referencer.peak" vreduce="true"/>
<label text="labels.referencer.true_peak" vreduce="true"/>
<label text="labels.referencer.rms" vreduce="true"/>
<label text="labels.referencer.mlufs" vreduce="true"/>
<label text="labels.referencer.slufs" vreduce="true"/>
<label text="labels.referencer.ilufs" vreduce="true"/>
</ui:with>
<ledmeter angle="1" balance.visibility="false" text.visibility="true" header.visibility="false" type="peak" vexpand="true">
<ledchannel id="pk_m" min="-36 db" max="12 db" log="true" bg.color="bg_schema" value.color="reference_mix_1" activity=":mixvis"/>
<ledchannel id="pk_r" min="-36 db" max="12 db" log="true" bg.color="bg_schema" value.color="reference_ref_1" activity=":refvis"/>
</ledmeter>
<ledmeter angle="1" balance.visibility="false" text.visibility="true" header.visibility="false" type="peak" vexpand="true">
<ledchannel id="tp_m" min="-36 db" max="12 db" log="true" bg.color="bg_schema" value.color="reference_mix_1" activity=":mixvis"/>
<ledchannel id="tp_r" min="-36 db" max="12 db" log="true" bg.color="bg_schema" value.color="reference_ref_1" activity=":refvis"/>
</ledmeter>
<ledmeter angle="1" balance.visibility="false" text.visibility="true" header.visibility="false" type="peak" vexpand="true">
<ledchannel id="rms_m" min="-36 db" max="12 db" log="true" bg.color="bg_schema" value.color="reference_mix_1" activity=":mixvis"/>
<ledchannel id="rms_r" min="-36 db" max="12 db" log="true" bg.color="bg_schema" value.color="reference_ref_1" activity=":refvis"/>
</ledmeter>
<ledmeter angle="1" balance.visibility="false" text.visibility="true" header.visibility="false" type="peak" vexpand="true">
<ledchannel id="mlufs_m" min="-36 db" max="12 db" log="true" bg.color="bg_schema" value.color="reference_mix_1" activity=":mixvis"/>
<ledchannel id="mlufs_r" min="-36 db" max="12 db" log="true" bg.color="bg_schema" value.color="reference_ref_1" activity=":refvis"/>
</ledmeter>
<ledmeter angle="1" balance.visibility="false" text.visibility="true" header.visibility="false" type="peak" vexpand="true">
<ledchannel id="slufs_m" min="-36 db" max="12 db" log="true" bg.color="bg_schema" value.color="reference_mix_1" activity=":mixvis"/>
<ledchannel id="slufs_r" min="-36 db" max="12 db" log="true" bg.color="bg_schema" value.color="reference_ref_1" activity=":refvis"/>
</ledmeter>
<ledmeter angle="1" balance.visibility="false" text.visibility="true" header.visibility="false" type="peak" vexpand="true">
<ledchannel id="ilufs_m" min="-36 db" max="12 db" log="true" bg.color="bg_schema" value.color="reference_mix_1" activity=":mixvis"/>
<ledchannel id="ilufs_r" min="-36 db" max="12 db" log="true" bg.color="bg_schema" value.color="reference_ref_1" activity=":refvis"/>
</ledmeter>
</grid>
<group ui:group="overview_loudness" ui:inject="GraphGroup" ipadding="0" text="lists.referencer.tab.loudness" vexpand="true" hexpand="false">
<ui:with ui:group="overview_loudness">
<grid rows="2" cols="6" expand="true">
<ui:with bg.color="bg_schema" pad.t="2">
<label text="labels.referencer.peak" vreduce="true"/>
<label text="labels.referencer.true_peak" vreduce="true"/>
<label text="labels.referencer.rms" vreduce="true"/>
<label text="labels.referencer.mlufs" vreduce="true"/>
<label text="labels.referencer.slufs" vreduce="true"/>
<label text="labels.referencer.ilufs" vreduce="true"/>
</ui:with>
<ledmeter angle="1" balance.visibility="false" text.visibility="true" header.visibility="false" type="peak" vexpand="true">
<ledchannel id="pk_m" min="-36 db" max="12 db" log="true" bg.color="bg_schema" value.color="reference_mix_1" activity=":mixvis"/>
<ledchannel id="pk_r" min="-36 db" max="12 db" log="true" bg.color="bg_schema" value.color="reference_ref_1" activity=":refvis"/>
</ledmeter>
<ledmeter angle="1" balance.visibility="false" text.visibility="true" header.visibility="false" type="peak" vexpand="true">
<ledchannel id="tp_m" min="-36 db" max="12 db" log="true" bg.color="bg_schema" value.color="reference_mix_1" activity=":mixvis"/>
<ledchannel id="tp_r" min="-36 db" max="12 db" log="true" bg.color="bg_schema" value.color="reference_ref_1" activity=":refvis"/>
</ledmeter>
<ledmeter angle="1" balance.visibility="false" text.visibility="true" header.visibility="false" type="peak" vexpand="true">
<ledchannel id="rms_m" min="-36 db" max="12 db" log="true" bg.color="bg_schema" value.color="reference_mix_1" activity=":mixvis"/>
<ledchannel id="rms_r" min="-36 db" max="12 db" log="true" bg.color="bg_schema" value.color="reference_ref_1" activity=":refvis"/>
</ledmeter>
<ledmeter angle="1" balance.visibility="false" text.visibility="true" header.visibility="false" type="peak" vexpand="true">
<ledchannel id="mlufs_m" min="-36 db" max="12 db" log="true" bg.color="bg_schema" value.color="reference_mix_1" activity=":mixvis"/>
<ledchannel id="mlufs_r" min="-36 db" max="12 db" log="true" bg.color="bg_schema" value.color="reference_ref_1" activity=":refvis"/>
</ledmeter>
<ledmeter angle="1" balance.visibility="false" text.visibility="true" header.visibility="false" type="peak" vexpand="true">
<ledchannel id="slufs_m" min="-36 db" max="12 db" log="true" bg.color="bg_schema" value.color="reference_mix_1" activity=":mixvis"/>
<ledchannel id="slufs_r" min="-36 db" max="12 db" log="true" bg.color="bg_schema" value.color="reference_ref_1" activity=":refvis"/>
</ledmeter>
<ledmeter angle="1" balance.visibility="false" text.visibility="true" header.visibility="false" type="peak" vexpand="true">
<ledchannel id="ilufs_m" min="-36 db" max="12 db" log="true" bg.color="bg_schema" value.color="reference_mix_1" activity=":mixvis"/>
<ledchannel id="ilufs_r" min="-36 db" max="12 db" log="true" bg.color="bg_schema" value.color="reference_ref_1" activity=":refvis"/>
</ledmeter>
</grid>
</ui:with>
</group>

<ui:if test="ex :in_r">
<!-- Correllation -->
<group ui:inject="GraphGroup" ipadding="0" text="lists.referencer.tab.correlation" expand="true">
<group ui:group="overview_correlation" ui:inject="GraphGroup" ipadding="0" text="lists.referencer.tab.correlation" expand="true">
<hbox expand="true">
<graph width.min="200" height.min="200" expand="true" fill="true">
<graph ui:group="overview_correlation" width.min="200" height.min="200" expand="true" fill="true">
<origin hpos="-1" vpos="0" visibility="false"/>

<!-- Secondary grid -->
Expand Down Expand Up @@ -330,7 +332,7 @@
</ui:for>
<text x="10" y="0" text="0" halign="1" valign="1" cgroup="0" priority="0"/>
</graph>
<ui:with angle="1" min="-1" max="1" balance="0" balance.visibility="true" log="false" type="peak" text.visibility="true" header.visibility="false" vexpand="true">
<ui:with ui:group="overview_correlation" angle="1" min="-1" max="1" balance="0" balance.visibility="true" log="false" type="peak" text.visibility="true" header.visibility="false" vexpand="true">
<ledchannel id="corr_m" bg.color="bg_schema" balance.color="reference_mix_1" value.color="reference_mix_1" activity=":mixvis"/>
<ledchannel id="corr_r" bg.color="bg_schema" balance.color="reference_ref_1" value.color="reference_ref_1" activity=":refvis"/>
</ui:with>
Expand All @@ -343,9 +345,9 @@
<hbox spacing="4" expand="true">

<!-- Waveform -->
<group ui:inject="GraphGroup" ipadding="0" text="lists.referencer.tab.waveform" expand="true">
<group ui:group="overview_waveform" ui:inject="GraphGroup" ipadding="0" text="lists.referencer.tab.waveform" expand="true">
<vbox>
<graph width.min="300" height.min="200" expand="true" fill="true">
<graph ui:group="overview_waveform" width.min="300" height.min="200" expand="true" fill="true">
<origin hpos="1" vpos="0" visible="false"/>

<!-- Main grid -->
Expand Down Expand Up @@ -407,10 +409,10 @@
</group>

<!-- Dynamics -->
<group ui:inject="GraphGroup" ipadding="0" text="lists.referencer.tab.dynamics" expand="true">
<group ui:group="overview_dynamics" ui:inject="GraphGroup" ipadding="0" text="lists.referencer.tab.dynamics" expand="true">
<vbox expand="true">
<hbox expand="true" width.min="200" height.min="200">
<graph width.min="150" height.min="200" expand="true" fill="true">
<graph ui:group="overview_dynamics" width.min="150" height.min="200" expand="true" fill="true">
<origin hpos="1" vpos="-1" visible="false"/>
<!-- Additional grid -->
<ui:for id="i" first="2" last="16" step="2">
Expand Down Expand Up @@ -460,12 +462,12 @@
</ui:with>
</graph>

<ui:with angle="1" min="0 db" max="18 db" balance.visibility="false" log="true" type="peak" text.visibility="true" header.visibility="false" vexpand="true">
<ui:with ui:group="overview_dynamics" angle="1" min="0 db" max="18 db" balance.visibility="false" log="true" type="peak" text.visibility="true" header.visibility="false" vexpand="true">
<ledchannel id="psr_m" bg.color="bg_schema" value.color="reference_mix_1" activity=":mixvis"/>
<ledchannel id="psr_r" bg.color="bg_schema" value.color="reference_ref_1" activity=":refvis"/>
</ui:with>

<graph width.min="100" height.min="200" vexpand="true" fill="true">
<graph ui:group="overview_dynamics" width.min="100" height.min="200" vexpand="true" fill="true">
<origin hpos="1" vpos="-1" visible="false"/>

<!-- Additional grid -->
Expand Down Expand Up @@ -532,8 +534,8 @@
<ui:if test="ex :in_r">

<!-- Goniometer -->
<group ui:inject="GraphGroup" ipadding="0" text="labels.referencer.goniometer" expand="true">
<graph width.min="200" height.min="200" expand="true" fill="true">
<group ui:group="overview_goniometer" ui:inject="GraphGroup" ipadding="0" text="labels.referencer.goniometer" expand="true">
<graph ui:group="overview_goniometer" width.min="200" height.min="200" expand="true" fill="true">
<!-- Origin -->
<origin halign="0.0" valign="0.0" visible="false"/>

Expand Down
84 changes: 84 additions & 0 deletions src/main/ui/referencer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,45 @@ namespace lsp
return p;
}

status_t referencer_ui::init_overview_group(const char *id, lltl::parray<tk::Widget> *items)
{
lltl::parray<tk::Widget> widgets;
status_t res = pWrapper->controller()->widgets()->query_group(id, &widgets);
if (res != STATUS_OK)
return res;

if (!items->add(&widgets))
return STATUS_NO_MEM;

for (size_t i=0, n=widgets.size(); i<n; ++i)
{
tk::Widget *w = widgets.uget(i);
if (w != NULL)
w->slots()->bind(tk::SLOT_MOUSE_CLICK, slot_overview_mouse_click, this);
}

return STATUS_OK;
}

status_t referencer_ui::init_overview()
{
overview_t *ov = &sOverview;

status_t res = init_overview_group("overview_spectrum", &ov->vSpectrum);
if (res == STATUS_OK)
res = init_overview_group("overview_loudness", &ov->vLoudness);
if (res == STATUS_OK)
res = init_overview_group("overview_correlation", &ov->vCorrelation);
if (res == STATUS_OK)
res = init_overview_group("overview_waveform", &ov->vWaveform);
if (res == STATUS_OK)
res = init_overview_group("overview_dynamics", &ov->vDynamics);
if (res == STATUS_OK)
res = init_overview_group("overview_goniometer", &ov->vGoniometer);

return res;
}

status_t referencer_ui::init_waveform_graphs()
{
static const char * const graph_ids[] =
Expand Down Expand Up @@ -304,6 +343,7 @@ namespace lsp
if (res != STATUS_OK)
return res;

LSP_STATUS_ASSERT(init_overview());
LSP_STATUS_ASSERT(init_playback_matrix());
LSP_STATUS_ASSERT(init_waveform_graphs());
LSP_STATUS_ASSERT(init_fft_meters());
Expand Down Expand Up @@ -588,6 +628,40 @@ namespace lsp
return true;
}

status_t referencer_ui::on_overview_click(tk::Widget *sender, const ws::event_t *ev)
{
if (ev->nCode != ws::MCB_LEFT)
return STATUS_OK;

overview_t *ov = &sOverview;
play_matrix_t *pm = &sPlayMatrix;

if (pm->pTabSel == NULL)
return STATUS_OK;

ssize_t index = -1;
if (ov->vSpectrum.contains(sender))
index = meta::referencer::TAB_SPECTRUM;
else if (ov->vLoudness.contains(sender))
index = meta::referencer::TAB_LOUDNESS;
else if (ov->vCorrelation.contains(sender))
index = meta::referencer::TAB_CORRELATION;
else if (ov->vWaveform.contains(sender))
index = meta::referencer::TAB_WAVEFORM;
else if (ov->vDynamics.contains(sender))
index = meta::referencer::TAB_DYNAMICS;
else if (ov->vGoniometer.contains(sender))
index = meta::referencer::TAB_STEREO;

if (index >= 0)
{
pm->pTabSel->set_value(index);
pm->pTabSel->notify_all(ui::PORT_USER_EDIT);
}

return STATUS_OK;
}

status_t referencer_ui::on_matrix_change(tk::Button *btn)
{
if (sPlayMatrix.pPlaySample == NULL)
Expand Down Expand Up @@ -651,6 +725,16 @@ namespace lsp
return STATUS_OK;
}

status_t referencer_ui::slot_overview_mouse_click(tk::Widget *sender, void *ptr, void *data)
{
const ws::event_t *ev = static_cast<ws::event_t *>(data);
if (data == NULL)
return STATUS_OK;

referencer_ui *self = static_cast<referencer_ui *>(ptr);
return (self != NULL) ? self->on_overview_click(sender, ev) : STATUS_OK;
}

status_t referencer_ui::slot_matrix_change(tk::Widget *sender, void *ptr, void *data)
{
tk::Button *btn = tk::widget_cast<tk::Button>(sender);
Expand Down

0 comments on commit 4e49fa4

Please sign in to comment.