mirror of
https://github.com/cookiengineer/audacity
synced 2025-08-10 09:01:13 +02:00
Store popup sub-menu caption with its item table
This commit is contained in:
parent
1e37172e6d
commit
9435e97fb8
@ -152,7 +152,9 @@ enum {
|
|||||||
// Table class for a sub-menu
|
// Table class for a sub-menu
|
||||||
class WaveColorMenuTable : public PopupMenuTable
|
class WaveColorMenuTable : public PopupMenuTable
|
||||||
{
|
{
|
||||||
WaveColorMenuTable() : mpData(NULL) {}
|
WaveColorMenuTable()
|
||||||
|
: PopupMenuTable( XO("&Wave Color") )
|
||||||
|
{}
|
||||||
DECLARE_POPUP_MENU(WaveColorMenuTable);
|
DECLARE_POPUP_MENU(WaveColorMenuTable);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -167,7 +169,7 @@ private:
|
|||||||
mpData = NULL;
|
mpData = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayableTrackControls::InitMenuData *mpData;
|
PlayableTrackControls::InitMenuData *mpData{};
|
||||||
|
|
||||||
int IdOfWaveColor(int WaveColor);
|
int IdOfWaveColor(int WaveColor);
|
||||||
void OnWaveColorChange(wxCommandEvent & event);
|
void OnWaveColorChange(wxCommandEvent & event);
|
||||||
@ -249,7 +251,9 @@ void WaveColorMenuTable::OnWaveColorChange(wxCommandEvent & event)
|
|||||||
// Table class for a sub-menu
|
// Table class for a sub-menu
|
||||||
class FormatMenuTable : public PopupMenuTable
|
class FormatMenuTable : public PopupMenuTable
|
||||||
{
|
{
|
||||||
FormatMenuTable() : mpData(NULL) {}
|
FormatMenuTable()
|
||||||
|
: PopupMenuTable{ XO("&Format") }
|
||||||
|
{}
|
||||||
DECLARE_POPUP_MENU(FormatMenuTable);
|
DECLARE_POPUP_MENU(FormatMenuTable);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -264,7 +268,7 @@ private:
|
|||||||
mpData = NULL;
|
mpData = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayableTrackControls::InitMenuData *mpData;
|
PlayableTrackControls::InitMenuData *mpData{};
|
||||||
|
|
||||||
int IdOfFormat(int format);
|
int IdOfFormat(int format);
|
||||||
|
|
||||||
@ -370,7 +374,9 @@ void FormatMenuTable::OnFormatChange(wxCommandEvent & event)
|
|||||||
// Table class for a sub-menu
|
// Table class for a sub-menu
|
||||||
class RateMenuTable : public PopupMenuTable
|
class RateMenuTable : public PopupMenuTable
|
||||||
{
|
{
|
||||||
RateMenuTable() : mpData(NULL) {}
|
RateMenuTable()
|
||||||
|
: PopupMenuTable{ XO("Rat&e") }
|
||||||
|
{}
|
||||||
DECLARE_POPUP_MENU(RateMenuTable);
|
DECLARE_POPUP_MENU(RateMenuTable);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -385,7 +391,7 @@ private:
|
|||||||
mpData = NULL;
|
mpData = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayableTrackControls::InitMenuData *mpData;
|
PlayableTrackControls::InitMenuData *mpData{};
|
||||||
|
|
||||||
int IdOfRate(int rate);
|
int IdOfRate(int rate);
|
||||||
void SetRate(WaveTrack * pTrack, double rate);
|
void SetRate(WaveTrack * pTrack, double rate);
|
||||||
@ -800,14 +806,14 @@ BEGIN_POPUP_MENU(WaveTrackMenuTable)
|
|||||||
) );
|
) );
|
||||||
if( hasWaveform ){
|
if( hasWaveform ){
|
||||||
POPUP_MENU_SEPARATOR()
|
POPUP_MENU_SEPARATOR()
|
||||||
POPUP_MENU_SUB_MENU(XO("&Wave Color"), WaveColorMenuTable)
|
POPUP_MENU_SUB_MENU(WaveColorMenuTable)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
POPUP_MENU_SEPARATOR()
|
POPUP_MENU_SEPARATOR()
|
||||||
POPUP_MENU_SUB_MENU(XO("&Format"), FormatMenuTable)
|
POPUP_MENU_SUB_MENU(FormatMenuTable)
|
||||||
POPUP_MENU_SEPARATOR()
|
POPUP_MENU_SEPARATOR()
|
||||||
POPUP_MENU_SUB_MENU(XO("Rat&e"), RateMenuTable)
|
POPUP_MENU_SUB_MENU(RateMenuTable)
|
||||||
END_POPUP_MENU()
|
END_POPUP_MENU()
|
||||||
|
|
||||||
|
|
||||||
|
@ -56,7 +56,8 @@ void PopupMenuTable::Menu::Extend(PopupMenuTable *pTable)
|
|||||||
{
|
{
|
||||||
const auto subTable = pEntry->subTable;
|
const auto subTable = pEntry->subTable;
|
||||||
auto subMenu = BuildMenu( this->pParent, subTable, pUserData );
|
auto subMenu = BuildMenu( this->pParent, subTable, pUserData );
|
||||||
this->AppendSubMenu( subMenu.release(), pEntry->caption.Translation());
|
this->AppendSubMenu(
|
||||||
|
subMenu.release(), subTable->Caption().Translation());
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -55,7 +55,12 @@ struct PopupMenuTableEntry
|
|||||||
class PopupMenuTable : public wxEvtHandler
|
class PopupMenuTable : public wxEvtHandler
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef PopupMenuTableEntry Entry;
|
using Entry = PopupMenuTableEntry;
|
||||||
|
|
||||||
|
// Supply a nonempty caption for sub-menu tables
|
||||||
|
PopupMenuTable( const TranslatableString &caption = {} )
|
||||||
|
: mCaption{ caption }
|
||||||
|
{}
|
||||||
|
|
||||||
class Menu
|
class Menu
|
||||||
: public wxMenu
|
: public wxMenu
|
||||||
@ -95,6 +100,8 @@ public:
|
|||||||
static std::unique_ptr<Menu> BuildMenu
|
static std::unique_ptr<Menu> BuildMenu
|
||||||
(wxEvtHandler *pParent, PopupMenuTable *pTable, void *pUserData = NULL);
|
(wxEvtHandler *pParent, PopupMenuTable *pTable, void *pUserData = NULL);
|
||||||
|
|
||||||
|
const TranslatableString &Caption() const { return mCaption; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void Populate() = 0;
|
virtual void Populate() = 0;
|
||||||
void Clear() { mContents.clear(); }
|
void Clear() { mContents.clear(); }
|
||||||
@ -108,6 +115,7 @@ protected:
|
|||||||
}
|
}
|
||||||
|
|
||||||
Entries mContents;
|
Entries mContents;
|
||||||
|
TranslatableString mCaption;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -173,7 +181,7 @@ That's all!
|
|||||||
// begins function
|
// begins function
|
||||||
#define BEGIN_POPUP_MENU(HandlerClass) \
|
#define BEGIN_POPUP_MENU(HandlerClass) \
|
||||||
void HandlerClass::Populate() { \
|
void HandlerClass::Populate() { \
|
||||||
typedef HandlerClass My;
|
using My = HandlerClass;
|
||||||
|
|
||||||
#define POPUP_MENU_APPEND(type, id, string, memFn, subTable) \
|
#define POPUP_MENU_APPEND(type, id, string, memFn, subTable) \
|
||||||
mContents.push_back( Entry { \
|
mContents.push_back( Entry { \
|
||||||
@ -202,9 +210,9 @@ void HandlerClass::Populate() { \
|
|||||||
POPUP_MENU_APPEND_ITEM(Entry::CheckItem, id, string, memFn);
|
POPUP_MENU_APPEND_ITEM(Entry::CheckItem, id, string, memFn);
|
||||||
|
|
||||||
// classname names a class that derives from MenuTable and defines Instance()
|
// classname names a class that derives from MenuTable and defines Instance()
|
||||||
#define POPUP_MENU_SUB_MENU(string, classname) \
|
#define POPUP_MENU_SUB_MENU(classname) \
|
||||||
POPUP_MENU_APPEND( \
|
POPUP_MENU_APPEND( \
|
||||||
Entry::SubMenu, -1, string, nullptr, &classname::Instance() );
|
Entry::SubMenu, -1, classname::Instance().Caption(), nullptr, &classname::Instance() );
|
||||||
|
|
||||||
#define POPUP_MENU_SEPARATOR() \
|
#define POPUP_MENU_SEPARATOR() \
|
||||||
POPUP_MENU_APPEND( \
|
POPUP_MENU_APPEND( \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user