mirror of
https://github.com/tuxbox-neutrino/neutrino.git
synced 2025-08-28 16:01:20 +02:00
*neutrino record: reworked some code parts from last multirec commits
- avoids using of boolean structures for record modes calls, handling of enum calls from record manager class should be easier - remove boolean structure from infoviewer - use commonly member name for count of recordings, GetRecordCount should be more plausible than GetRecmapSize git-svn-id: file:///home/bas/coolstream_public_svn/THIRDPARTY/applications/neutrino-beta@1693 e54a6e83-5905-42d5-8d5c-058d10e6a962
This commit is contained in:
@@ -73,6 +73,7 @@ bool sectionsd_getComponentTagsUniqueKey(const event_id_t uniqueKey, CSectionsdC
|
|||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#include <driver/genpsi.h>
|
#include <driver/genpsi.h>
|
||||||
|
#include "record.h"
|
||||||
}
|
}
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
@@ -682,6 +683,24 @@ const std::string CRecordManager::GetFileName(t_channel_id channel_id)
|
|||||||
return filename;
|
return filename;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int CRecordManager::GetRecordMode()
|
||||||
|
{
|
||||||
|
if (RecordingStatus() || IsTimeshift())
|
||||||
|
{
|
||||||
|
int records = GetRecmapSize();
|
||||||
|
if (RecordingStatus() && !IsTimeshift())
|
||||||
|
return RECMODE_REC;
|
||||||
|
else if (IsTimeshift() && (records == 1))
|
||||||
|
return RECMODE_TSHIFT;
|
||||||
|
else if (IsTimeshift() && (records > 1))
|
||||||
|
return RECMODE_REC_TSHIFT;
|
||||||
|
else
|
||||||
|
return RECMODE_OFF;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return RECMODE_OFF;
|
||||||
|
}
|
||||||
|
|
||||||
bool CRecordManager::Record(const t_channel_id channel_id, const char * dir, bool timeshift)
|
bool CRecordManager::Record(const t_channel_id channel_id, const char * dir, bool timeshift)
|
||||||
{
|
{
|
||||||
CTimerd::RecordingInfo eventinfo;
|
CTimerd::RecordingInfo eventinfo;
|
||||||
@@ -708,7 +727,7 @@ bool CRecordManager::Record(const t_channel_id channel_id, const char * dir, boo
|
|||||||
|
|
||||||
bool CRecordManager::Record(const CTimerd::RecordingInfo * const eventinfo, const char * dir, bool timeshift)
|
bool CRecordManager::Record(const CTimerd::RecordingInfo * const eventinfo, const char * dir, bool timeshift)
|
||||||
{
|
{
|
||||||
CRecordInstance * inst;
|
CRecordInstance * inst = NULL;
|
||||||
record_error_msg_t error_msg = RECORD_OK;
|
record_error_msg_t error_msg = RECORD_OK;
|
||||||
/* for now, empty eventinfo.recordingDir means this is direct record, FIXME better way ?
|
/* for now, empty eventinfo.recordingDir means this is direct record, FIXME better way ?
|
||||||
* neutrino check if this channel_id already recording, may be not needed */
|
* neutrino check if this channel_id already recording, may be not needed */
|
||||||
@@ -751,7 +770,9 @@ bool CRecordManager::Record(const CTimerd::RecordingInfo * const eventinfo, cons
|
|||||||
else
|
else
|
||||||
newdir = Directory;
|
newdir = Directory;
|
||||||
|
|
||||||
inst = new CRecordInstance(eventinfo, newdir, timeshift, StreamVTxtPid, StreamPmtPid);
|
if (inst == NULL)
|
||||||
|
inst = new CRecordInstance(eventinfo, newdir, timeshift, StreamVTxtPid, StreamPmtPid);
|
||||||
|
|
||||||
error_msg = inst->Record();
|
error_msg = inst->Record();
|
||||||
if(error_msg == RECORD_OK) {
|
if(error_msg == RECORD_OK) {
|
||||||
recmap.insert(std::pair<t_channel_id, CRecordInstance*>(eventinfo->channel_id, inst));
|
recmap.insert(std::pair<t_channel_id, CRecordInstance*>(eventinfo->channel_id, inst));
|
||||||
@@ -782,7 +803,7 @@ bool CRecordManager::Record(const CTimerd::RecordingInfo * const eventinfo, cons
|
|||||||
RunStopScript();
|
RunStopScript();
|
||||||
RestoreNeutrino();
|
RestoreNeutrino();
|
||||||
|
|
||||||
printf("%s: error code: %d\n", __FUNCTION__, error_msg);
|
printf("[recordmanager] %s: error code: %d\n", __FUNCTION__, error_msg);
|
||||||
//FIXME: Use better error message
|
//FIXME: Use better error message
|
||||||
DisplayErrorMessage(g_Locale->getText(
|
DisplayErrorMessage(g_Locale->getText(
|
||||||
error_msg == RECORD_BUSY ? LOCALE_STREAMING_BUSY :
|
error_msg == RECORD_BUSY ? LOCALE_STREAMING_BUSY :
|
||||||
@@ -1099,7 +1120,7 @@ int CRecordManager::exec(CMenuTarget* parent, const std::string & actionKey )
|
|||||||
char rec_msg[256];
|
char rec_msg[256];
|
||||||
char rec_msg1[256];
|
char rec_msg1[256];
|
||||||
int records = recmap.size();
|
int records = recmap.size();
|
||||||
int i = 0;
|
|
||||||
snprintf(rec_msg1, sizeof(rec_msg1)-1, "%s", g_Locale->getText(LOCALE_RECORDINGMENU_MULTIMENU_ASK_STOP_ALL));
|
snprintf(rec_msg1, sizeof(rec_msg1)-1, "%s", g_Locale->getText(LOCALE_RECORDINGMENU_MULTIMENU_ASK_STOP_ALL));
|
||||||
snprintf(rec_msg, sizeof(rec_msg)-1, rec_msg1, records);
|
snprintf(rec_msg, sizeof(rec_msg)-1, rec_msg1, records);
|
||||||
if(ShowMsgUTF(LOCALE_SHUTDOWN_RECODING_QUERY, rec_msg,
|
if(ShowMsgUTF(LOCALE_SHUTDOWN_RECODING_QUERY, rec_msg,
|
||||||
@@ -1109,6 +1130,7 @@ int CRecordManager::exec(CMenuTarget* parent, const std::string & actionKey )
|
|||||||
snprintf(rec_msg, sizeof(rec_msg)-1, rec_msg1, records);
|
snprintf(rec_msg, sizeof(rec_msg)-1, rec_msg1, records);
|
||||||
CHintBox * hintBox = new CHintBox(LOCALE_MESSAGEBOX_INFO, rec_msg);
|
CHintBox * hintBox = new CHintBox(LOCALE_MESSAGEBOX_INFO, rec_msg);
|
||||||
hintBox->paint();
|
hintBox->paint();
|
||||||
|
int i = 0;
|
||||||
int recording_ids[RECORD_MAX_COUNT];
|
int recording_ids[RECORD_MAX_COUNT];
|
||||||
t_channel_id channel_ids[RECORD_MAX_COUNT];
|
t_channel_id channel_ids[RECORD_MAX_COUNT];
|
||||||
t_channel_id channel_id;
|
t_channel_id channel_id;
|
||||||
@@ -1167,7 +1189,7 @@ int CRecordManager::exec(CMenuTarget* parent, const std::string & actionKey )
|
|||||||
|
|
||||||
bool CRecordManager::ShowMenu(void)
|
bool CRecordManager::ShowMenu(void)
|
||||||
{
|
{
|
||||||
int select = -1, i = 0, shortcut = 1, recmap_size = recmap.size();
|
int select = -1, recmap_size = recmap.size();
|
||||||
char cnt[5];
|
char cnt[5];
|
||||||
CMenuForwarderNonLocalized * item;
|
CMenuForwarderNonLocalized * item;
|
||||||
CMenuForwarder * iteml;
|
CMenuForwarder * iteml;
|
||||||
@@ -1194,6 +1216,8 @@ bool CRecordManager::ShowMenu(void)
|
|||||||
{
|
{
|
||||||
menu.addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_MAINMENU_RECORDING_STOP));
|
menu.addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_MAINMENU_RECORDING_STOP));
|
||||||
mutex.lock();
|
mutex.lock();
|
||||||
|
|
||||||
|
int i = 0 , shortcut = 1;
|
||||||
for(recmap_iterator_t it = recmap.begin(); it != recmap.end(); it++) {
|
for(recmap_iterator_t it = recmap.begin(); it != recmap.end(); it++) {
|
||||||
t_channel_id channel_id = it->first;
|
t_channel_id channel_id = it->first;
|
||||||
CRecordInstance * inst = it->second;
|
CRecordInstance * inst = it->second;
|
||||||
|
@@ -156,6 +156,14 @@ class CRecordManager : public CMenuTarget, public CChangeObserver
|
|||||||
void SetTimeshiftMode(CRecordInstance * inst=NULL, int mode=TSHIFT_MODE_OFF);
|
void SetTimeshiftMode(CRecordInstance * inst=NULL, int mode=TSHIFT_MODE_OFF);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
enum record_modes_t
|
||||||
|
{
|
||||||
|
RECMODE_OFF = 0,
|
||||||
|
RECMODE_REC = 1,
|
||||||
|
RECMODE_TSHIFT = 2,
|
||||||
|
RECMODE_REC_TSHIFT = 3,
|
||||||
|
};
|
||||||
|
|
||||||
CRecordManager();
|
CRecordManager();
|
||||||
~CRecordManager();
|
~CRecordManager();
|
||||||
|
|
||||||
@@ -198,8 +206,9 @@ class CRecordManager : public CMenuTarget, public CChangeObserver
|
|||||||
int recordingstatus;
|
int recordingstatus;
|
||||||
bool doGuiRecord();
|
bool doGuiRecord();
|
||||||
bool changeNotify(const neutrino_locale_t OptionName, void * /*data*/);
|
bool changeNotify(const neutrino_locale_t OptionName, void * /*data*/);
|
||||||
int GetRecmapSize() { return recmap.size(); };
|
int GetRecordCount() { return recmap.size(); };
|
||||||
bool IsTimeshift(t_channel_id channel_id=0);
|
bool IsTimeshift(t_channel_id channel_id=0);
|
||||||
void StartTimeshift();
|
void StartTimeshift();
|
||||||
|
int GetRecordMode();
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
@@ -289,48 +289,51 @@ void CInfoViewer::paintTime (bool show_dot, bool firstPaint)
|
|||||||
void CInfoViewer::showRecordIcon (const bool show)
|
void CInfoViewer::showRecordIcon (const bool show)
|
||||||
{
|
{
|
||||||
CRecordManager * crm = CRecordManager::getInstance();
|
CRecordManager * crm = CRecordManager::getInstance();
|
||||||
recordModeActive = crm->RecordingStatus() || crm->IsTimeshift();
|
int rec_mode = crm->GetRecordMode();
|
||||||
|
|
||||||
|
recordModeActive = rec_mode != CRecordManager::RECMODE_OFF; /*crm->RecordingStatus() || crm->IsTimeshift();*/
|
||||||
if (recordModeActive)
|
if (recordModeActive)
|
||||||
{
|
{
|
||||||
std::string Icon_Rec = NEUTRINO_ICON_REC_GRAY, Icon_Ts = NEUTRINO_ICON_AUTO_SHIFT_GRAY;
|
std::string Icon_Rec = NEUTRINO_ICON_REC_GRAY, Icon_Ts = NEUTRINO_ICON_AUTO_SHIFT_GRAY;
|
||||||
t_channel_id cci = g_RemoteControl->current_channel_id;
|
|
||||||
bool status_ts = crm->IsTimeshift(cci);
|
|
||||||
bool status_rec = crm->RecordingStatus(cci) && !status_ts;
|
|
||||||
if (status_ts)
|
|
||||||
Icon_Ts = NEUTRINO_ICON_AUTO_SHIFT;
|
|
||||||
if (status_rec)
|
|
||||||
Icon_Rec = NEUTRINO_ICON_REC;
|
|
||||||
|
|
||||||
int records = crm->GetRecmapSize();
|
if (rec_mode == CRecordManager::RECMODE_TSHIFT)
|
||||||
bool modus_rec = crm->RecordingStatus() && !crm->IsTimeshift();
|
Icon_Ts = NEUTRINO_ICON_AUTO_SHIFT;
|
||||||
bool modus_ts = crm->IsTimeshift() && (records == 1);
|
|
||||||
bool modus_ts_rec = crm->IsTimeshift() && (records > 1);
|
if (rec_mode == CRecordManager::RECMODE_REC)
|
||||||
|
Icon_Rec = NEUTRINO_ICON_REC;
|
||||||
|
|
||||||
|
int records = crm->GetRecordCount();
|
||||||
|
|
||||||
int rec_icon_w = 0, rec_icon_h = 0, ts_icon_w = 0, ts_icon_h = 0;
|
|
||||||
const int radius = RADIUS_MIN;
|
const int radius = RADIUS_MIN;
|
||||||
const int ChanName_X = BoxStartX + ChanWidth + SHADOW_OFFSET;
|
const int ChanName_X = BoxStartX + ChanWidth + SHADOW_OFFSET;
|
||||||
const int icon_space = 3, box_posY = 12;
|
const int icon_space = 3, box_posY = 12;
|
||||||
int box_len = 0, rec_icon_posX = 0, ts_icon_posX = 0;
|
int box_len = 0, rec_icon_posX = 0, ts_icon_posX = 0;
|
||||||
|
|
||||||
|
int rec_icon_w = 0, rec_icon_h = 0, ts_icon_w = 0, ts_icon_h = 0;
|
||||||
frameBuffer->getIconSize(Icon_Rec.c_str(), &rec_icon_w, &rec_icon_h);
|
frameBuffer->getIconSize(Icon_Rec.c_str(), &rec_icon_w, &rec_icon_h);
|
||||||
frameBuffer->getIconSize(Icon_Ts.c_str(), &ts_icon_w, &ts_icon_h);
|
frameBuffer->getIconSize(Icon_Ts.c_str(), &ts_icon_w, &ts_icon_h);
|
||||||
int chanH = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight ()
|
|
||||||
* (g_settings.screen_yres / 100);
|
int chanH = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight () * (g_settings.screen_yres / 100);
|
||||||
if (chanH < rec_icon_h)
|
if (chanH < rec_icon_h)
|
||||||
chanH = rec_icon_h;
|
chanH = rec_icon_h;
|
||||||
const int box_posX = ChanName_X + SHADOW_OFFSET;
|
const int box_posX = ChanName_X + SHADOW_OFFSET;
|
||||||
|
|
||||||
char records_msg[8];
|
char records_msg[8];
|
||||||
snprintf(records_msg, sizeof(records_msg)-1, "%d%s", records, "x");
|
snprintf(records_msg, sizeof(records_msg)-1, "%d%s", records, "x");
|
||||||
int TextWidth = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getRenderWidth(records_msg)
|
int TextWidth = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getRenderWidth(records_msg)
|
||||||
* (g_settings.screen_xres / 100);
|
* (g_settings.screen_xres / 100);
|
||||||
if (modus_rec)
|
|
||||||
|
if (rec_mode == CRecordManager::RECMODE_REC)
|
||||||
{
|
{
|
||||||
box_len = rec_icon_w + TextWidth + icon_space*5;
|
box_len = rec_icon_w + TextWidth + icon_space*5;
|
||||||
rec_icon_posX = box_posX + icon_space*2;
|
rec_icon_posX = box_posX + icon_space*2;
|
||||||
}else if (modus_ts)
|
}
|
||||||
|
else if (rec_mode == CRecordManager::RECMODE_TSHIFT)
|
||||||
{
|
{
|
||||||
box_len = ts_icon_w + icon_space*4;
|
box_len = ts_icon_w + icon_space*4;
|
||||||
ts_icon_posX = box_posX + icon_space*2;
|
ts_icon_posX = box_posX + icon_space*2;
|
||||||
}else if (modus_ts_rec)
|
}
|
||||||
|
else if (rec_mode == CRecordManager::RECMODE_REC_TSHIFT)
|
||||||
{
|
{
|
||||||
box_len = ts_icon_w + rec_icon_w + TextWidth + icon_space*7;
|
box_len = ts_icon_w + rec_icon_w + TextWidth + icon_space*7;
|
||||||
ts_icon_posX = box_posX + icon_space*2;
|
ts_icon_posX = box_posX + icon_space*2;
|
||||||
@@ -338,30 +341,35 @@ void CInfoViewer::showRecordIcon (const bool show)
|
|||||||
records--;
|
records--;
|
||||||
snprintf(records_msg, sizeof(records_msg)-1, "%d%s", records, "x");
|
snprintf(records_msg, sizeof(records_msg)-1, "%d%s", records, "x");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (show)
|
if (show)
|
||||||
{
|
{
|
||||||
frameBuffer->paintBoxRel(box_posX + SHADOW_OFFSET, BoxStartY + box_posY + SHADOW_OFFSET, box_len, chanH, COL_INFOBAR_SHADOW_PLUS_0, radius);
|
frameBuffer->paintBoxRel(box_posX + SHADOW_OFFSET, BoxStartY + box_posY + SHADOW_OFFSET, box_len, chanH, COL_INFOBAR_SHADOW_PLUS_0, radius);
|
||||||
frameBuffer->paintBoxRel(box_posX, BoxStartY + box_posY , box_len, chanH, COL_INFOBAR_PLUS_0, radius);
|
frameBuffer->paintBoxRel(box_posX, BoxStartY + box_posY , box_len, chanH, COL_INFOBAR_PLUS_0, radius);
|
||||||
if (modus_rec)
|
|
||||||
|
if (rec_mode == CRecordManager::RECMODE_REC)
|
||||||
{
|
{
|
||||||
g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString (rec_icon_posX + rec_icon_w + icon_space, BoxStartY + box_posY + chanH, box_len, records_msg, COL_INFOBAR, 0, true);
|
g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString (rec_icon_posX + rec_icon_w + icon_space, BoxStartY + box_posY + chanH, box_len, records_msg, COL_INFOBAR, 0, true);
|
||||||
frameBuffer->paintIcon(Icon_Rec, rec_icon_posX, BoxStartY + box_posY + (chanH - rec_icon_h)/2);
|
frameBuffer->paintIcon(Icon_Rec, rec_icon_posX, BoxStartY + box_posY + (chanH - rec_icon_h)/2);
|
||||||
}else if (modus_ts)
|
}
|
||||||
|
else if (rec_mode == CRecordManager::RECMODE_TSHIFT)
|
||||||
{
|
{
|
||||||
frameBuffer->paintIcon(Icon_Ts, ts_icon_posX, BoxStartY + box_posY + (chanH - ts_icon_h)/2);
|
frameBuffer->paintIcon(Icon_Ts, ts_icon_posX, BoxStartY + box_posY + (chanH - ts_icon_h)/2);
|
||||||
}else if (modus_ts_rec)
|
}
|
||||||
|
else if (rec_mode == CRecordManager::RECMODE_REC_TSHIFT)
|
||||||
{
|
{
|
||||||
g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(rec_icon_posX + rec_icon_w + icon_space, BoxStartY + box_posY + chanH, box_len, records_msg, COL_INFOBAR, 0, true);
|
g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(rec_icon_posX + rec_icon_w + icon_space, BoxStartY + box_posY + chanH, box_len, records_msg, COL_INFOBAR, 0, true);
|
||||||
frameBuffer->paintIcon(Icon_Rec, rec_icon_posX, BoxStartY + box_posY + (chanH - rec_icon_h)/2);
|
frameBuffer->paintIcon(Icon_Rec, rec_icon_posX, BoxStartY + box_posY + (chanH - rec_icon_h)/2);
|
||||||
frameBuffer->paintIcon(Icon_Ts, ts_icon_posX, BoxStartY + box_posY + (chanH - ts_icon_h)/2);
|
frameBuffer->paintIcon(Icon_Ts, ts_icon_posX, BoxStartY + box_posY + (chanH - ts_icon_h)/2);
|
||||||
}
|
}
|
||||||
}else
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
if (modus_rec)
|
if (rec_mode == CRecordManager::RECMODE_REC)
|
||||||
frameBuffer->paintBoxRel(rec_icon_posX, BoxStartY + box_posY + (chanH - rec_icon_h)/2, rec_icon_w, rec_icon_h, COL_INFOBAR_PLUS_0);
|
frameBuffer->paintBoxRel(rec_icon_posX, BoxStartY + box_posY + (chanH - rec_icon_h)/2, rec_icon_w, rec_icon_h, COL_INFOBAR_PLUS_0);
|
||||||
else if (modus_ts)
|
else if (rec_mode == CRecordManager::RECMODE_TSHIFT)
|
||||||
frameBuffer->paintBoxRel(ts_icon_posX, BoxStartY + box_posY + (chanH - ts_icon_h)/2, ts_icon_w, ts_icon_h, COL_INFOBAR_PLUS_0);
|
frameBuffer->paintBoxRel(ts_icon_posX, BoxStartY + box_posY + (chanH - ts_icon_h)/2, ts_icon_w, ts_icon_h, COL_INFOBAR_PLUS_0);
|
||||||
else if (modus_ts_rec)
|
else if (rec_mode == CRecordManager::RECMODE_REC_TSHIFT)
|
||||||
frameBuffer->paintBoxRel(ts_icon_posX, BoxStartY + box_posY + (chanH - rec_icon_h)/2, ts_icon_w + rec_icon_w + icon_space*2, rec_icon_h, COL_INFOBAR_PLUS_0);
|
frameBuffer->paintBoxRel(ts_icon_posX, BoxStartY + box_posY + (chanH - rec_icon_h)/2, ts_icon_w + rec_icon_w + icon_space*2, rec_icon_h, COL_INFOBAR_PLUS_0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -109,11 +109,13 @@ CStreamInfo2::~CStreamInfo2 ()
|
|||||||
ts_close();
|
ts_close();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CStreamInfo2::exec()
|
int CStreamInfo2::exec()
|
||||||
{
|
{
|
||||||
paint(paint_mode);
|
paint(paint_mode);
|
||||||
doSignalStrengthLoop();
|
doSignalStrengthLoop();
|
||||||
hide();
|
hide();
|
||||||
|
|
||||||
|
return menu_return::RETURN_EXIT_ALL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int CStreamInfo2::exec (CMenuTarget * parent, const std::string &)
|
int CStreamInfo2::exec (CMenuTarget * parent, const std::string &)
|
||||||
@@ -125,7 +127,7 @@ int CStreamInfo2::exec (CMenuTarget * parent, const std::string &)
|
|||||||
paint (paint_mode);
|
paint (paint_mode);
|
||||||
doSignalStrengthLoop ();
|
doSignalStrengthLoop ();
|
||||||
hide ();
|
hide ();
|
||||||
return menu_return::RETURN_REPAINT;
|
return menu_return::RETURN_EXIT_ALL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int CStreamInfo2::doSignalStrengthLoop ()
|
int CStreamInfo2::doSignalStrengthLoop ()
|
||||||
|
@@ -103,7 +103,7 @@ class CStreamInfo2 : public CMenuTarget
|
|||||||
|
|
||||||
CStreamInfo2();
|
CStreamInfo2();
|
||||||
~CStreamInfo2();
|
~CStreamInfo2();
|
||||||
void exec();
|
int exec();
|
||||||
|
|
||||||
void hide();
|
void hide();
|
||||||
int exec(CMenuTarget* parent, const std::string & actionKey);
|
int exec(CMenuTarget* parent, const std::string & actionKey);
|
||||||
|
Reference in New Issue
Block a user