Skip to content

Commit 88fc0ec

Browse files
committed
Modified corners tab
1 parent ce69293 commit 88fc0ec

File tree

9 files changed

+2361
-2275
lines changed

9 files changed

+2361
-2275
lines changed

src/gui/DynaRangeFrame.cpp

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,24 +26,28 @@ wxDEFINE_EVENT(wxEVT_COMMAND_PREVIEW_UPDATE_COMPLETE, wxCommandEvent);
2626
// =============================================================================
2727
// CONSTRUCTOR & DESTRUCTOR
2828
// =============================================================================
29-
DynaRangeFrame::DynaRangeFrame(wxWindow* parent)
29+
DynaRangeFrame::DynaRangeFrame(wxWindow* parent)
3030
: MyFrameBase(parent), m_currentPreviewFile("")
3131
{
3232
// --- Create Controllers for each tab ---
3333
m_inputController = std::make_unique<InputController>(this);
3434
m_logController = std::make_unique<LogController>(m_logOutputTextCtrl);
3535
m_resultsController = std::make_unique<ResultsController>(this);
3636
m_chartController = std::make_unique<ChartController>(this);
37-
m_rawImagePreviewPanel->SetBackgroundStyle(wxBG_STYLE_PAINT);
3837

39-
// --- Manual UI Component Creation ---
38+
// --- Set background styles for custom-drawn panels ---
39+
m_rawImagePreviewPanel->SetBackgroundStyle(wxBG_STYLE_PAINT);
4040
m_resultsCanvasPanel = new wxPanel(m_webViewPlaceholderPanel, wxID_ANY);
4141
m_resultsCanvasPanel->SetBackgroundStyle(wxBG_STYLE_PAINT);
4242
wxBoxSizer* placeholderSizer = new wxBoxSizer(wxVERTICAL);
4343
placeholderSizer->Add(m_resultsCanvasPanel, 1, wxEXPAND, 0);
4444
m_webViewPlaceholderPanel->SetSizer(placeholderSizer);
4545
m_chartPreviewPanel = new wxPanel(m_webView2PlaceholderPanel, wxID_ANY);
4646
m_chartPreviewPanel->SetBackgroundStyle(wxBG_STYLE_PAINT);
47+
48+
// The new loupe panel must also be configured for custom painting.
49+
m_loupePanel->SetBackgroundStyle(wxBG_STYLE_PAINT);
50+
4751
wxBoxSizer* chartPlaceholderSizer = new wxBoxSizer(wxVERTICAL);
4852
chartPlaceholderSizer->Add(m_chartPreviewPanel, 1, wxEXPAND, 0);
4953
m_webView2PlaceholderPanel->SetSizer(chartPlaceholderSizer);
@@ -108,8 +112,8 @@ DynaRangeFrame::DynaRangeFrame(wxWindow* parent)
108112
chartButtonCreate->Bind(wxEVT_BUTTON, &ChartController::OnCreateClick, m_chartController.get());
109113
m_InvGammaValue->Bind(wxEVT_TEXT, &ChartController::OnInputChanged, m_chartController.get());
110114
m_chartDimXValue->Bind(wxEVT_TEXT, &ChartController::OnInputChanged, m_chartController.get());
111-
m_chartDimWValue->Bind(wxEVT_TEXT, &ChartController::OnInputChanged, m_chartController.get());
112-
m_chartDimHValue->Bind(wxEVT_TEXT, &ChartController::OnInputChanged, m_chartController.get());
115+
m_chartDimWValue->Bind(wxEVT_TEXT, &InputController::OnInputChanged, m_inputController.get());
116+
m_chartDimHValue->Bind(wxEVT_TEXT, &InputController::OnInputChanged, m_inputController.get());
113117
m_chartPatchRowValue->Bind(wxEVT_TEXT, &ChartController::OnChartChartPatchChanged, m_chartController.get());
114118
m_chartPatchColValue->Bind(wxEVT_TEXT, &ChartController::OnChartChartPatchChanged, m_chartController.get());
115119
m_cvsGrid->Bind(wxEVT_GRID_CELL_LEFT_CLICK, &ResultsController::OnGridCellClick, m_resultsController.get());
@@ -166,7 +170,13 @@ void DynaRangeFrame::SetUiState(bool is_processing, int num_threads) {
166170
if (is_processing) {
167171
m_executeButton->SetLabel(_("Stop Processing"));
168172
m_executeButton->Enable(true);
169-
m_mainNotebook->SetSelection(1);
173+
174+
// Se cambia la selección de la pestaña usando el puntero del panel en lugar de un índice fijo.
175+
int page_index = m_mainNotebook->FindPage(m_logPanel);
176+
if (page_index != wxNOT_FOUND) {
177+
m_mainNotebook->SetSelection(page_index);
178+
}
179+
170180
m_logController->Clear();
171181
m_gaugeTimer->Start(100);
172182

@@ -190,6 +200,7 @@ void DynaRangeFrame::SetUiState(bool is_processing, int num_threads) {
190200
m_inputPanel->Layout();
191201
m_resultsController->SetUiState(is_processing);
192202
}
203+
193204
void DynaRangeFrame::OnExecuteClick(wxCommandEvent& event) {
194205
// Delegate all logic to the Presenter.
195206
m_presenter->OnExecuteButtonClicked();

src/gui/controllers/PreviewController.cpp

Lines changed: 46 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ PreviewController::PreviewController(DynaRangeFrame *frame) : m_frame(frame) {
1818
m_interactor = std::make_unique<ChartCornerInteractor>();
1919
m_renderer = std::make_unique<PreviewOverlayRenderer>();
2020

21-
// Bind events for the preview panel
21+
// Bind events for the main preview panel
2222
m_frame->m_rawImagePreviewPanel->Bind(wxEVT_PAINT, &PreviewController::OnPaintPreview, this);
2323
m_frame->m_rawImagePreviewPanel->Bind(wxEVT_SIZE, &PreviewController::OnSizePreview, this);
2424
m_frame->m_rawImagePreviewPanel->Bind(wxEVT_LEFT_DOWN, &PreviewController::OnPreviewMouseDown, this);
@@ -27,6 +27,9 @@ PreviewController::PreviewController(DynaRangeFrame *frame) : m_frame(frame) {
2727
m_frame->m_rawImagePreviewPanel->Bind(wxEVT_MOUSE_CAPTURE_LOST, &PreviewController::OnPreviewMouseCaptureLost, this);
2828
m_frame->m_rawImagePreviewPanel->Bind(wxEVT_KEY_DOWN, &PreviewController::OnPreviewKeyDown, this);
2929

30+
// Bind the new paint event for the dedicated loupe panel
31+
m_frame->m_loupePanel->Bind(wxEVT_PAINT, &PreviewController::OnPaintLoupe, this);
32+
3033
// Bind gamma slider event
3134
m_frame->m_gammaThumbSlider->Bind(wxEVT_SCROLL_CHANGED, &PreviewController::OnGammaSliderChanged, this);
3235
}
@@ -118,6 +121,19 @@ void PreviewController::OnPaintPreview(wxPaintEvent &event) {
118121
}
119122
}
120123

124+
void PreviewController::OnPaintLoupe(wxPaintEvent& event)
125+
{
126+
wxAutoBufferedPaintDC dc(m_frame->m_loupePanel);
127+
dc.Clear();
128+
wxGraphicsContext* gc = wxGraphicsContext::Create(dc);
129+
if (gc) {
130+
// The renderer's DrawLoupe function can be called directly here.
131+
// We pass {0, 0} as the position because we are drawing relative to the loupe panel itself.
132+
m_renderer->DrawLoupe(gc, *m_interactor, m_displayPreviewImage, wxPoint(0,0));
133+
delete gc;
134+
}
135+
}
136+
121137
void PreviewController::OnSizePreview(wxSizeEvent &event) {
122138
UpdatePreviewTransform();
123139
m_frame->m_rawImagePreviewPanel->Refresh();
@@ -143,6 +159,7 @@ void PreviewController::OnPreviewMouseDown(wxMouseEvent &event) {
143159
}
144160

145161
m_frame->m_rawImagePreviewPanel->Refresh();
162+
m_frame->m_loupePanel->Refresh(); // Refresh loupe as well
146163
event.Skip();
147164
}
148165

@@ -165,6 +182,7 @@ void PreviewController::OnPreviewMouseMove(wxMouseEvent &event) {
165182
wxPoint2DDouble imageCoords = PanelToImageCoords(event.GetPosition());
166183
m_interactor->UpdateDraggedCorner(wxPoint(imageCoords.m_x, imageCoords.m_y));
167184
m_frame->m_rawImagePreviewPanel->Refresh();
185+
m_frame->m_loupePanel->Refresh(); // Refresh loupe on move
168186
}
169187
event.Skip();
170188
}
@@ -269,9 +287,11 @@ void PreviewController::UpdatePreviewTransform() {
269287
m_previewOffset.m_y = (panel_size.GetHeight() - final_height) / 2.0;
270288
}
271289

272-
void PreviewController::OnGammaSliderChanged(wxScrollEvent &event) {
273-
ApplyGammaCorrection();
274-
m_frame->m_rawImagePreviewPanel->Refresh();
290+
void PreviewController::OnGammaSliderChanged(wxScrollEvent &event)
291+
{
292+
ApplyGammaCorrection();
293+
m_frame->m_rawImagePreviewPanel->Refresh();
294+
m_frame->m_loupePanel->Refresh(); // Also refresh the loupe as its source image changed
275295
}
276296

277297
void PreviewController::ApplyGammaCorrection() {
@@ -306,34 +326,28 @@ void PreviewController::ApplyGammaCorrection() {
306326
m_displayPreviewImage = GuiHelpers::CvMatToWxImage(dst_mat);
307327
}
308328

309-
void PreviewController::OnPreviewKeyDown(wxKeyEvent &event) {
310-
if (m_interactor->GetSelectedCorner() == ChartCornerInteractor::Corner::None) {
311-
event.Skip();
312-
return;
313-
}
329+
void PreviewController::OnPreviewKeyDown(wxKeyEvent &event)
330+
{
331+
if (m_interactor->GetSelectedCorner() == ChartCornerInteractor::Corner::None) {
332+
event.Skip();
333+
return;
334+
}
314335

315-
int dx = 0;
316-
int dy = 0;
317-
switch (event.GetKeyCode()) {
318-
case WXK_UP:
319-
dy = -1;
320-
break;
321-
case WXK_DOWN:
322-
dy = 1;
323-
break;
324-
case WXK_LEFT:
325-
dx = -1;
326-
break;
327-
case WXK_RIGHT:
328-
dx = 1;
329-
break;
330-
default:
331-
event.Skip();
332-
return;
333-
}
336+
int dx = 0;
337+
int dy = 0;
338+
switch (event.GetKeyCode()) {
339+
case WXK_UP: dy = -1; break;
340+
case WXK_DOWN: dy = 1; break;
341+
case WXK_LEFT: dx = -1; break;
342+
case WXK_RIGHT: dx = 1; break;
343+
default:
344+
event.Skip();
345+
return;
346+
}
334347

335-
m_interactor->MoveSelectedCorner(dx, dy);
336-
UpdateCoordTextCtrls();
337-
m_frame->m_presenter->UpdateCommandPreview();
338-
m_frame->m_rawImagePreviewPanel->Refresh();
348+
m_interactor->MoveSelectedCorner(dx, dy);
349+
UpdateCoordTextCtrls();
350+
m_frame->m_presenter->UpdateCommandPreview();
351+
m_frame->m_rawImagePreviewPanel->Refresh();
352+
m_frame->m_loupePanel->Refresh(); // Refresh loupe on move
339353
}

src/gui/controllers/PreviewController.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
*/
99
#pragma once
1010

11-
#include "../../core/arguments/ArgumentsOptions.hpp"
1211
#include "../preview_interaction/ChartCornerInteractor.hpp"
1312
#include "../preview_interaction/PreviewOverlayRenderer.hpp"
1413
#include "wx/image.h"
@@ -43,6 +42,7 @@ class PreviewController {
4342
private:
4443
// --- Event Handling Logic ---
4544
void OnPaintPreview(wxPaintEvent &event);
45+
void OnPaintLoupe(wxPaintEvent &event);
4646
void OnSizePreview(wxSizeEvent &event);
4747
void OnPreviewMouseDown(wxMouseEvent &event);
4848
void OnPreviewMouseUp(wxMouseEvent &event);

src/gui/controllers/ResultsController.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,12 @@ bool ResultsController::DisplayResults(const std::string& csv_path) {
6666
// Force the sizer of the parent panel to recalculate the layout.
6767
// This makes the scrollbars appear immediately if the grid is too large.
6868
m_frame->m_leftPanel->Layout();
69+
70+
// Se cambia la selección de la pestaña usando el puntero del panel en lugar de un índice fijo.
71+
int page_index = m_frame->m_mainNotebook->FindPage(m_frame->m_resultsPanel);
72+
if (page_index != wxNOT_FOUND) {
73+
m_frame->m_mainNotebook->SetSelection(page_index);
74+
}
6975
}
7076
return success;
7177
}

0 commit comments

Comments
 (0)