1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-04-29 23:29:41 +02:00

Define BasicUI::WindowPlacement and subclass for wxWidgets...

... An elaborate way to hold a wxWindow* as parent of a window, but avoiding
mention of wxWindow* in the member functions of BasicUI::Services, to be defined
next

Original commit: 2facbe0d535733a4011a394f77ccdfba3d6a0c61

Signed-off-by: Panagiotis Vasilopoulos <hello@alwayslivid.com>
This commit is contained in:
Paul Licameli 2021-06-06 08:15:35 -04:00 committed by Panagiotis Vasilopoulos
parent e5cffb7620
commit 2364504437
No known key found for this signature in database
GPG Key ID: 9E541BDE43B99F44
4 changed files with 43 additions and 1 deletions

View File

@ -13,6 +13,8 @@ Paul Licameli
#include <vector>
namespace BasicUI {
WindowPlacement::~WindowPlacement() = default;
Services::~Services() = default;
static Services *theInstance = nullptr;

View File

@ -20,6 +20,20 @@ namespace BasicUI {
using Action = std::function<void()>;
//! Subclasses may hold information such as a parent window pointer for a dialog.
/*! The default-constructed empty value of this base class must be accepted by overrides of methods of
Services */
class BASIC_UI_API WindowPlacement {
public:
WindowPlacement() = default;
//! Don't slice
WindowPlacement( const WindowPlacement& ) PROHIBITED;
//! Don't slice
WindowPlacement &operator=( const WindowPlacement& ) PROHIBITED;
virtual ~WindowPlacement();
};
//! @}
//! Abstract class defines a few user interface services, not mentioning particular toolkits

View File

@ -12,6 +12,8 @@ Paul Licameli
using namespace BasicUI;
wxWidgetsWindowPlacement::~wxWidgetsWindowPlacement() = default;
wxWidgetsBasicUI::~wxWidgetsBasicUI() = default;
void wxWidgetsBasicUI::DoCallAfter(const Action &action)
@ -23,3 +25,13 @@ void wxWidgetsBasicUI::DoYield()
{
wxTheApp->Yield();
}
namespace {
wxWindow *GetParent(const BasicUI::WindowPlacement &placement)
{
if (auto *pPlacement =
dynamic_cast<const wxWidgetsWindowPlacement*>(&placement))
return pPlacement->pWindow;
return nullptr;
}
}

View File

@ -13,8 +13,22 @@ Paul Licameli
#include "BasicUI.h"
class wxWindow;
//! Window placement information for wxWidgetsBasicUI can be constructed from a wxWindow pointer
struct TENACITY_DLL_API wxWidgetsWindowPlacement final
: BasicUI::WindowPlacement {
wxWidgetsWindowPlacement() = default;
explicit wxWidgetsWindowPlacement( wxWindow *pWindow )
: pWindow{ pWindow }
{}
~wxWidgetsWindowPlacement() override;
wxWindow *pWindow{};
};
//! An implementation of BasicUI::Services in terms of the wxWidgets toolkit
/*! This is a singleton that doesn't need AUDACITY_DLL_API visibility */
/*! This is a singleton that doesn't need TENACITY_DLL_API visibility */
class wxWidgetsBasicUI final : public BasicUI::Services {
public:
~wxWidgetsBasicUI() override;