0
저는 오디오가 재생 중이거나 일시 중지되어있는 경우 여러 개의 열을 포함하는 treeview와 함께 Pixbuf를 표시하는 하나의 열을 포함하고 있습니다. 사용자가 한 행을 두 번 클릭하면 오디오 재생이 시작되고 pixbuf 아이콘을 표시하기 위해 행을 다시 렌더링해야합니다. 이 때문에 QueueDraw를 사용했지만, 커서가 현재 행을 벗어나면 작동합니다. Pixbuf를 직접 업데이트하려면 어떻게해야합니까?Treeviews QueueDraw가 현재 행을 렌더링하지 않습니까?
CODE :
protected void trvMainCuesheetRowActivated (object o, RowActivatedArgs args)
{
log.debug("trvMainCuesheetRowActivated called");
TreeIter ti = TreeIter.Zero;
this.lsCuesheetData.GetIter(out ti,args.Path);
if (this.lsCuesheetData.GetValue(ti,0) != null)
{
Track tCurTrack = (Track)this.lsCuesheetData.GetValue(ti,0);
if (this.objProgram.getAudioManager().getPlayState() == AudioCuesheetEditor.AudioBackend.PlayState.Stopped)
{
this.objProgram.getAudioManager().play(tCurTrack);
this.refresh();
}
else
{
if (this.objProgram.getAudioManager().getPlayState() == AudioCuesheetEditor.AudioBackend.PlayState.Playing)
{
this.objProgram.getAudioManager().seek(tCurTrack);
this.refresh();
}
}
}
}
private void renderPlaying(TreeViewColumn _tvcColumn, CellRenderer _crCell, TreeModel _tmModel, TreeIter _tiIter)
{
Track tCurTrack = (Track)_tmModel.GetValue (_tiIter, 0);
//Just display an icon, if we are playing
if (this.objProgram.getAudioManager().getPlayState() == AudioCuesheetEditor.AudioBackend.PlayState.Playing)
{
if (this.objProgram.getAudioManager().getCurrentlyPlayingTrack() == tCurTrack)
{
Gdk.Pixbuf icon = this.RenderIcon(Stock.MediaPlay, IconSize.SmallToolbar, null);
(_crCell as CellRendererPixbuf).Pixbuf = icon;
}
else
{
(_crCell as CellRendererPixbuf).Pixbuf = null;
}
}
else
{
if (this.objProgram.getAudioManager().getPlayState() == AudioCuesheetEditor.AudioBackend.PlayState.Paused)
{
if (this.objProgram.getAudioManager().getCurrentlyPlayingTrack() == tCurTrack)
{
Gdk.Pixbuf icon = this.RenderIcon(Stock.MediaPause, IconSize.SmallToolbar, null);
(_crCell as CellRendererPixbuf).Pixbuf = icon;
}
else
{
(_crCell as CellRendererPixbuf).Pixbuf = null;
}
}
else
{
(_crCell as CellRendererPixbuf).Pixbuf = null;
}
}
}
//Purpose: Function used to refresh the MainWindow depending on new options set.
public void refresh()
{
//QueueDraw is needed since it fires a signal to cellrenderers to update
this.trvMainCuesheet.QueueDraw();
this.sbMainWindow.Visible = this.objProgram.getObjOption().getBShowStatusbar();
this.mwToolbar.Visible = this.objProgram.getObjOption().getBToolbarVisible();
}
인사말 스벤
몇 가지 코드를 게시하는 마음입니까? – drahnr
당신이 간다;). [link] (http://sourceforge.net/p/audiocuesheet/code/HEAD/tree/)에서 svn을 확인할 수도 있습니다. – Sven
README가 없습니까? Fedora 20 x86_64에서'mdtool build AudioCuesheetEditor.sln'을 사용하여 (프로젝트 루트 나 src 디렉토리에서) 컴파일 할 때 283 개의 에러와 5 개의 경고를받습니다. 'monodevelop' IDE와 동일합니다. – drahnr