Skip to content

Commit

Permalink
#5537: Refactor SoundShaderSelector to manage the preview on its own
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Sep 17, 2022
1 parent 2e403a6 commit 4b6a716
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 21 deletions.
22 changes: 6 additions & 16 deletions radiant/ui/common/SoundChooser.cpp
Expand Up @@ -26,8 +26,7 @@ namespace
// Constructor
SoundChooser::SoundChooser(wxWindow* parent) :
DialogBase(_("Choose sound"), parent),
_selector(nullptr),
_preview(new SoundShaderPreview(this))
_selector(nullptr)
{
SetSizer(new wxBoxSizer(wxVERTICAL));

Expand All @@ -47,8 +46,7 @@ SoundChooser::SoundChooser(wxWindow* parent) :
_selector->Bind(wxEVT_DATAVIEW_ITEM_ACTIVATED, &SoundChooser::_onItemActivated, this);

GetSizer()->Add(_selector, 1, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12);
GetSizer()->Add(_preview, 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, 12);
GetSizer()->Add(grid, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 12);
GetSizer()->Add(grid, 0, wxEXPAND | wxALL, 12);

_windowPosition.initialise(this, RKEY_WINDOW_STATE, 0.5f, 0.7f);

Expand All @@ -73,23 +71,15 @@ void SoundChooser::setSelectedShader(const std::string& shader)

void SoundChooser::_onItemActivated(wxDataViewEvent& ev)
{
auto selectedItem = _selector->GetSelectedDeclName();;
auto selectedItem = _selector->GetSelectedDeclName();

if (selectedItem.empty())
{
ev.Skip();
return;
}

if (!wxGetKeyState(WXK_CONTROL))
if (!selectedItem.empty() && !wxGetKeyState(WXK_CONTROL))
{
// simple double click closes modal, ctrl+dblclk plays sound
EndModal(wxID_OK);
return;
}

// It's a regular item, try to play it back
_preview->playRandomSoundFile();
ev.Skip();
}

int SoundChooser::ShowModal()
Expand All @@ -109,7 +99,7 @@ int SoundChooser::ShowModal()

void SoundChooser::_onReloadSounds(wxCommandEvent& ev)
{
_preview->ClearPreview();
_selector->SetSelectedDeclName({});

// Send the command to the SoundManager
// After parsing it will fire the sounds reloaded signal => onShadersReloaded()
Expand Down
5 changes: 1 addition & 4 deletions radiant/ui/common/SoundChooser.h
Expand Up @@ -22,10 +22,7 @@ class SoundChooser :
private:
SoundShaderSelector* _selector;

// The preview widget group
SoundShaderPreview* _preview;

sigc::connection _shadersReloaded;
sigc::connection _shadersReloaded;

wxutil::WindowPosition _windowPosition;

Expand Down
22 changes: 21 additions & 1 deletion radiant/ui/common/SoundShaderSelector.h
@@ -1,6 +1,7 @@
#pragma once

#include "DeclarationSelector.h"
#include "SoundShaderPreview.h"

#include "wxutil/dataview/ThreadedDeclarationTreePopulator.h"
#include "wxutil/dataview/VFSTreePopulator.h"
Expand Down Expand Up @@ -64,19 +65,38 @@ class ThreadedSoundShaderLoader :
class SoundShaderSelector :
public DeclarationSelector
{
private:
// The preview widget group
SoundShaderPreview* _preview;

public:
SoundShaderSelector(wxWindow* parent) :
DeclarationSelector(parent, decl::Type::SoundShader)
DeclarationSelector(parent, decl::Type::SoundShader),
_preview(new SoundShaderPreview(this))
{
GetTreeView()->SetExpandTopLevelItemsAfterPopulation(true);

LoadSoundShaders();

AddPreviewToBottom(_preview);
}

void LoadSoundShaders()
{
PopulateTreeView(std::make_shared<ThreadedSoundShaderLoader>(GetColumns()));
}

protected:
void onTreeViewItemActivated() override
{
auto selectedItem = GetSelectedDeclName();

// Ctrl-Double-Click plays back a random file
if (wxGetKeyState(WXK_CONTROL))
{
_preview->playRandomSoundFile();
}
}
};

}

0 comments on commit 4b6a716

Please sign in to comment.