Skip to content

Commit 283c7a6

Browse files
committed
[Bug 15439] Make possible to set the enabledTracks of a player in LC 7.0
1 parent 7d7b79e commit 283c7a6

8 files changed

Lines changed: 48 additions & 71 deletions

File tree

docs/notes/bugfix-15439.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# enabledTracks "can't set this property" in LC 7

engine/src/exec-interface-player.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -743,6 +743,14 @@ void MCPlayer::GetEnabledTracks(MCExecContext& ctxt, uindex_t& r_count, uinteger
743743
getenabledtracks(r_count, r_tracks);
744744
}
745745

746+
void MCPlayer::SetEnabledTracks(MCExecContext& ctxt, uindex_t p_count, uinteger_t* p_tracks)
747+
{
748+
// PM-2015-06-01: [[ PlatformPlayer ]]
749+
// P_ENABLED_TRACKS setter refactored to the MCPlayer implementations
750+
setenabledtracks(p_count, p_tracks);
751+
752+
}
753+
746754
void MCPlayer::GetForeColor(MCExecContext &ctxt, MCInterfaceNamedColor &r_color)
747755
{
748756
getforegrouncolor(r_color);

engine/src/player-interface.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,6 @@ class MCPlayerInterface
108108
virtual MCRectangle getpreferredrect() = 0;
109109
virtual uint2 getloudness() = 0;
110110
virtual void setloudness() = 0;
111-
virtual Boolean setenabledtracks(MCStringRef s) = 0;
112111

113112
#ifdef LEGACY_EXEC
114113
void gettracks(MCExecPoint &ep);
@@ -184,6 +183,8 @@ class MCPlayerInterface
184183
virtual void gethotspots(MCStringRef &r_nodes) = 0;
185184
virtual void getconstraints(MCMultimediaQTVRConstraints &r_constraints) = 0;
186185
virtual void getenabledtracks(uindex_t &r_count, uint32_t *&r_tracks_id) = 0;
186+
virtual void setenabledtracks(uindex_t p_count, uint32_t *p_tracks_id) = 0;
187+
187188
virtual void updatevisibility() = 0;
188189
virtual void updatetraversal() = 0;
189190

@@ -266,6 +267,7 @@ class MCPlayerInterface
266267
virtual void SetTraversalOn(MCExecContext& ctxt, bool setting) = 0;
267268

268269
virtual void GetEnabledTracks(MCExecContext& ctxt, uindex_t& r_count, uinteger_t*& r_tracks) = 0;
270+
virtual void SetEnabledTracks(MCExecContext& ctxt, uindex_t p_count, uinteger_t* p_tracks) = 0;
269271

270272
virtual void SetForeColor(MCExecContext& ctxt, const MCInterfaceNamedColor& p_color) = 0;
271273
virtual void GetForeColor(MCExecContext& ctxt, MCInterfaceNamedColor& r_color) = 0;

engine/src/player-legacy.cpp

Lines changed: 15 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1789,18 +1789,19 @@ void MCPlayer::getenabledtracks(MCExecPoint &ep)
17891789
}
17901790
#endif
17911791

1792-
Boolean MCPlayer::setenabledtracks(MCStringRef s)
1792+
//Boolean MCPlayer::setenabledtracks(MCStringRef s)
1793+
void MCPlayer::setenabledtracks(uindex_t p_count, uint32_t *p_tracks_id)
17931794
{
17941795
if (getstate(CS_PREPARED))
17951796
#ifdef FEATURE_QUICKTIME
17961797
if (usingQT())
1797-
return qt_setenabledtracks(s);
1798+
qt_setenabledtracks(p_count, p_tracks_id);
17981799
#ifdef TARGET_PLATFORM_WINDOWS
17991800
else
1800-
return avi_setenabledtracks(s);
1801+
avi_setenabledtracks(p_count, p_tracks_id);
18011802
#endif
18021803
#elif defined(X11)
1803-
return x11_setenabledtracks(s);
1804+
x11_setenabledtracks(p_count, p_tracks_id);
18041805
#else
18051806
0 == 0;
18061807
#endif
@@ -3522,7 +3523,7 @@ void MCPlayer::qt_getenabledtracks(uindex_t& r_count, uinteger_t*& r_tracks)
35223523
t_tracks . Take(r_tracks, r_count);
35233524
}
35243525

3525-
Boolean MCPlayer::qt_setenabledtracks(MCStringRef s)
3526+
void MCPlayer::qt_setenabledtracks(uindex_t p_count, uinteger_t* p_tracks)
35263527
{
35273528
uint2 trackcount = (uint2)GetMovieTrackCount((Movie)theMovie);
35283529
uint2 i;
@@ -3531,35 +3532,16 @@ Boolean MCPlayer::qt_setenabledtracks(MCStringRef s)
35313532
Track trak = GetMovieIndTrack((Movie)theMovie,i);
35323533
SetTrackEnabled(trak, False);
35333534
}
3534-
uindex_t t_start, t_end;
3535-
t_start = 0;
3536-
t_end = t_start;
3537-
uint2 offset = 0;
3538-
while (t_start != MCStringGetLength(s))
3535+
3536+
for (uindex_t j = 0; j < trackcount; j++)
35393537
{
3540-
MCAutoStringRef t_substring;
3541-
if (!MCStringFirstIndexOfChar(s, '\n', t_start, kMCCompareExact, t_end))
3542-
{
3543-
MCStringCopySubstring(s, MCRangeMake(t_start, MCStringGetLength(s) - t_start), &t_substring);
3544-
t_start = MCStringGetLength(s);
3545-
}
3546-
else
3547-
{
3548-
/* UNCHECKED */ MCStringCopySubstring(s, MCRangeMake(t_start, t_end - t_start), &t_substring);
3549-
t_start = t_end + 1;
3550-
}
3551-
3552-
integer_t t_integer;
3553-
/* UNCHECKED */ MCStringToInteger(*t_substring, t_integer);
3554-
Track trak = GetMovieTrack((Movie)theMovie, t_integer);
3538+
Track trak = GetMovieTrack((Movie)theMovie, p_tracks[j]);
35553539
if (trak == NULL)
3556-
{
3557-
return False;
3558-
}
3540+
return;
3541+
35593542
SetTrackEnabled(trak, True);
3560-
if (++offset >= trackcount)
3561-
break;
3562-
}
3543+
}
3544+
35633545
MCMovieChanged((MovieController)theMC, (Movie)theMovie);
35643546
Rect movieRect;
35653547
GetMovieBox((Movie)theMovie, &movieRect);
@@ -4101,14 +4083,13 @@ void MCPlayer::avi_gettracks(MCStringRef &r_tracks)
41014083
r_tracks = MCValueRetain(kMCEmptyString);
41024084
}
41034085

4104-
void MCPlayer::avi_getenabledtracks(uindex_t& r_count, uinteger_t*& r_tracks)
4086+
void MCPlayer::avi_getenabledtracks(uindex_t& r_count, uint32_t*& r_tracks)
41054087
{
41064088
r_count = 0;
41074089
}
41084090

4109-
Boolean MCPlayer::avi_setenabledtracks(MCStringRef s)
4091+
void MCPlayer::avi_setenabledtracks(uindex_t p_count, uint32_t* p_tracks)
41104092
{
4111-
return True;
41124093
}
41134094

41144095
void MCPlayer::avi_draw(MCDC *dc, const MCRectangle& dirty)

engine/src/player-legacy.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,6 @@ class MCPlayer : public MCControl, public MCPlayerInterface
163163
virtual MCRectangle getpreferredrect();
164164
virtual uint2 getloudness();
165165
virtual void setloudness();
166-
virtual Boolean setenabledtracks(MCStringRef s);
167166

168167
virtual Boolean prepare(MCStringRef options);
169168
virtual Boolean playstart(MCStringRef options);
@@ -208,6 +207,8 @@ class MCPlayer : public MCControl, public MCPlayerInterface
208207
virtual void gethotspots(MCStringRef &r_nodes);
209208
virtual void getconstraints(MCMultimediaQTVRConstraints &r_constraints);
210209
virtual void getenabledtracks(uindex_t &r_count, uint32_t *&r_tracks_id);
210+
virtual void setenabledtracks(uindex_t p_count, uint32_t *p_tracks_id);
211+
211212

212213
virtual void updatevisibility();
213214
virtual void updatetraversal();
@@ -331,7 +332,7 @@ class MCPlayer : public MCControl, public MCPlayerInterface
331332
#endif
332333
void qt_gettracks(MCStringRef &r_tracks);
333334
void qt_getenabledtracks(uindex_t &r_count, uint32_t *&r_tracks_id);
334-
Boolean qt_setenabledtracks(MCStringRef s);
335+
void qt_setenabledtracks(uindex_t p_count, uint32_t* p_tracks);
335336
void qt_draw(MCDC *dc, const MCRectangle& dirty);
336337
void qt_move(int2 x, int2 y);
337338
void qt_click(bool p_state, uint4 p_button);
@@ -367,7 +368,7 @@ class MCPlayer : public MCControl, public MCPlayerInterface
367368
#endif
368369
void avi_gettracks(MCStringRef &r_tracks);
369370
void avi_getenabledtracks(uindex_t &r_count, uint32_t *&r_tracks_id);
370-
Boolean avi_setenabledtracks(MCStringRef s);
371+
void avi_setenabledtracks(uindex_t p_count, uint32_t* p_tracks);
371372
void avi_draw(MCDC *dc, const MCRectangle& dirty);
372373

373374
bool mode_avi_closewindowonplaystop();
@@ -404,7 +405,7 @@ class MCPlayer : public MCControl, public MCPlayerInterface
404405
#endif
405406
void x11_gettracks(MCStringRef &r_tracks) { r_tracks = MCValueRetain(kMCEmptyString); }
406407
void x11_getenabledtracks(uindex_t &r_count, uint32_t *&r_tracks_id) { r_count = 0; }
407-
Boolean x11_setenabledtracks(MCStringRef & s) { return False;}
408+
void x11_setenabledtracks(uindex_t p_count, uint32_t *p_tracks_id) {}
408409
void x11_draw(MCDC *dc, const MCRectangle& dirty) {}
409410

410411
pid_t getpid(void);
@@ -479,6 +480,7 @@ class MCPlayer : public MCControl, public MCPlayerInterface
479480
virtual void SetTraversalOn(MCExecContext& ctxt, bool setting);
480481

481482
virtual void GetEnabledTracks(MCExecContext& ctxt, uindex_t& r_count, uinteger_t*& r_tracks);
483+
virtual void SetEnabledTracks(MCExecContext& ctxt, uindex_t p_count, uinteger_t* p_tracks);
482484

483485
virtual void SetForeColor(MCExecContext& ctxt, const MCInterfaceNamedColor& p_color);
484486
virtual void GetForeColor(MCExecContext& ctxt, MCInterfaceNamedColor& r_color);

engine/src/player-platform.cpp

Lines changed: 11 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2520,7 +2520,8 @@ void MCPlayer::getenabledtracks(MCExecPoint &ep)
25202520
}
25212521
#endif
25222522

2523-
Boolean MCPlayer::setenabledtracks(MCStringRef s)
2523+
//Boolean MCPlayer::setenabledtracks(MCStringRef s)
2524+
void MCPlayer::setenabledtracks(uindex_t p_count, uint32_t *p_tracks_id)
25242525
{
25252526
if (getstate(CS_PREPARED))
25262527
if (m_platform_player != nil)
@@ -2534,34 +2535,16 @@ Boolean MCPlayer::setenabledtracks(MCStringRef s)
25342535
MCPlatformSetPlayerTrackProperty(m_platform_player, i, kMCPlatformPlayerTrackPropertyEnabled, kMCPlatformPropertyTypeBool, &t_enabled);
25352536
}
25362537

2537-
uindex_t t_si, t_ei;
2538-
t_si = t_ei = 0;
2539-
2540-
while (t_ei < MCStringGetLength(s))
2538+
for (uindex_t i = 0; i < t_track_count; i++)
25412539
{
2542-
MCAutoStringRef t_track;
2543-
2544-
if (!MCStringFirstIndexOfChar(s, '\n', t_si, kMCStringOptionCompareExact, t_ei))
2545-
t_ei = MCStringGetLength(s);
2540+
uindex_t t_index;
2541+
if (!MCPlatformFindPlayerTrackWithId(m_platform_player, p_tracks_id[i], t_index))
2542+
return;
25462543

2547-
/* UNCHECKED */ MCStringCopySubstring(s, MCRangeMake(t_si, t_ei - t_si), &t_track);
2548-
2549-
if (!MCStringIsEmpty(*t_track))
2550-
{
2551-
uindex_t t_index;
2552-
MCAutoNumberRef t_id;
2553-
2554-
if (!MCNumberParse(*t_track, &t_id) ||
2555-
!MCPlatformFindPlayerTrackWithId(m_platform_player, MCNumberFetchAsUnsignedInteger(*t_id), t_index))
2556-
return False;
2557-
2558-
bool t_enabled;
2559-
t_enabled = true;
2560-
MCPlatformSetPlayerTrackProperty(m_platform_player, t_index, kMCPlatformPlayerTrackPropertyEnabled, kMCPlatformPropertyTypeBool, &t_enabled);
2561-
}
2562-
t_ei++;
2563-
t_si = t_ei;
2564-
}
2544+
bool t_enabled;
2545+
t_enabled = true;
2546+
MCPlatformSetPlayerTrackProperty(m_platform_player, t_index, kMCPlatformPlayerTrackPropertyEnabled, kMCPlatformPropertyTypeBool, &t_enabled);
2547+
}
25652548

25662549
MCRectangle t_movie_rect;
25672550
MCPlatformGetPlayerProperty(m_platform_player, kMCPlatformPlayerPropertyMovieRect, kMCPlatformPropertyTypeRectangle, &t_movie_rect);
@@ -2570,8 +2553,6 @@ Boolean MCPlayer::setenabledtracks(MCStringRef s)
25702553
trect = MCU_reduce_rect(trect, -borderwidth);
25712554
setrect(trect);
25722555
}
2573-
2574-
return True;
25752556
}
25762557

25772558
MCRectangle MCPlayer::resize(MCRectangle movieRect)
@@ -2794,7 +2775,7 @@ void MCPlayer::getenabledtracks(uindex_t &r_count, uint32_t *&r_tracks_id)
27942775
for(uindex_t i = 0; i < t_track_count; i++)
27952776
{
27962777
uint32_t t_id;
2797-
uint32_t t_enabled;
2778+
bool t_enabled;
27982779
MCPlatformGetPlayerTrackProperty(m_platform_player, i, kMCPlatformPlayerTrackPropertyId, kMCPlatformPropertyTypeUInt32, &t_id);
27992780
MCPlatformGetPlayerTrackProperty(m_platform_player, i, kMCPlatformPlayerTrackPropertyEnabled, kMCPlatformPropertyTypeBool, &t_enabled);
28002781
if (t_enabled)

engine/src/player-platform.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,6 @@ class MCPlayer : public MCControl, public MCPlayerInterface
161161

162162
virtual void gettracks(MCStringRef& r_tracks);
163163

164-
virtual Boolean setenabledtracks(MCStringRef s);
165164
virtual MCRectangle getpreferredrect();
166165
virtual uint2 getloudness();
167166
virtual void updateloudness(int2 newloudness);
@@ -256,6 +255,7 @@ class MCPlayer : public MCControl, public MCPlayerInterface
256255
virtual void gethotspots(MCStringRef &r_nodes);
257256
virtual void getconstraints(MCMultimediaQTVRConstraints &r_constraints);
258257
virtual void getenabledtracks(uindex_t &r_count, uint32_t *&r_tracks_id);
258+
virtual void setenabledtracks(uindex_t p_count, uint32_t *p_tracks_id);
259259

260260
virtual void updatevisibility();
261261
virtual void updatetraversal();
@@ -342,6 +342,7 @@ class MCPlayer : public MCControl, public MCPlayerInterface
342342
virtual void SetTraversalOn(MCExecContext& ctxt, bool setting);
343343

344344
virtual void GetEnabledTracks(MCExecContext& ctxt, uindex_t& r_count, uinteger_t*& r_tracks);
345+
virtual void SetEnabledTracks(MCExecContext& ctxt, uindex_t p_count, uinteger_t* p_tracks);
345346

346347
virtual void SetForeColor(MCExecContext& ctxt, const MCInterfaceNamedColor& p_color);
347348
virtual void GetForeColor(MCExecContext& ctxt, MCInterfaceNamedColor& r_color);

engine/src/player.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ MCPropertyInfo MCPlayer::kProperties[] =
6363
DEFINE_RO_OBJ_PROPERTY(P_NODES, String, MCPlayer, Nodes)
6464
DEFINE_RO_OBJ_PROPERTY(P_HOT_SPOTS, String, MCPlayer, HotSpots)
6565
DEFINE_RO_OBJ_CUSTOM_PROPERTY(P_CONSTRAINTS, MultimediaQTVRConstraints, MCPlayer, Constraints)
66-
DEFINE_RO_OBJ_LIST_PROPERTY(P_ENABLED_TRACKS, LinesOfUInt, MCPlayer, EnabledTracks)
66+
// PM-2015-06-01: [[ Bug 15439 ]] EnabledTracks should be RW
67+
DEFINE_RW_OBJ_LIST_PROPERTY(P_ENABLED_TRACKS, LinesOfUInt, MCPlayer, EnabledTracks)
6768
DEFINE_RW_OBJ_PROPERTY(P_PLAY_LOUDNESS, UInt16, MCPlayer, PlayLoudness)
6869
DEFINE_RO_OBJ_PROPERTY(P_TIME_SCALE, UInt32, MCPlayer, TimeScale)
6970
DEFINE_RW_OBJ_CUSTOM_PROPERTY(P_FORE_COLOR, InterfaceNamedColor, MCPlayer, ForeColor)

0 commit comments

Comments
 (0)