• R/O
  • SSH
  • HTTPS

id3v2editorplus: Commit


Commit MetaInfo

Revision19 (tree)
Zeit2019-08-29 06:51:18
Autorderekwildstar

Log Message

- Classe Mediadora de APIC concluída
- Início da implementação da lista de reprodução (que ficará para o final)

Ändern Zusammenfassung

Diff

--- trunk/V2/src/UClassesMediadoras.pas (nonexistent)
+++ trunk/V2/src/UClassesMediadoras.pas (revision 19)
@@ -0,0 +1,245 @@
1+unit UClassesMediadoras;
2+
3+interface
4+
5+uses
6+ System.SysUtils, System.Classes, Vcl.ExtCtrls, Vcl.StdCtrls, UPngImageList,
7+ Vcl.ActnList, Vcl.ExtDlgs;
8+
9+type
10+ TPNGImageCollection = class (UPngImageList.TPNGImageCollection)
11+ private
12+ FIndice: SmallInt;
13+ FImagem: TImage;
14+ FDescricao: TLabeledEdit;
15+ FTipo: TComboBox;
16+ FProximaImagem: TAction;
17+ FImagemAnterior: TAction;
18+ FSalvarImagem: TAction;
19+ FRemoverImagem: TAction;
20+ FSubstituirImagem: TAction;
21+ FContador: TLabel;
22+ FContadorSombra: TLabel;
23+
24+ procedure AtualizarEstadoDosComponentesDeSaida;
25+// procedure CodificarInformacoesDaImagem(AIndiceDaImagem: SmallInt; ADescricao, AMime: String; ATipo: Byte);
26+ public
27+ constructor Create(AOwner: TComponent); override;
28+ procedure ConfigurarComponentesDeSaida(AImagem: TImage; ADescricao: TLabeledEdit; ATipo: TComboBox; AProximaImagem: TAction; AImagemAnterior: TAction; ASalvarImagem: TAction; ARemoverImagem: TAction; ASubstituirImagem: TAction; AContador: TLabel; AContadorSombra: TLabel);
29+ function ExcluirAtual: Boolean;
30+ procedure SalvarImagemComo(ACaixaDeDialogoParaSalvarImagem: TSavePictureDialog);
31+ function AdicionarImagem(ACaixaDeDialogoParaAbrirImagem: TOpenPictureDialog): Boolean;
32+ function SubstituirImagem(ACaixaDeDialogoParaAbrirImagem: TOpenPictureDialog): Boolean;
33+ procedure Limpar;
34+ procedure ExibirImagem(AIndiceDaImagem: Word);
35+ procedure ProximaImagem(AUltima: Boolean = False);
36+ procedure ImagemAnterior(APrimeira: Boolean = False);
37+ procedure ConfirmarInformacoesDaImagem;
38+
39+ end;
40+
41+implementation
42+
43+uses
44+ Vcl.Forms, WinApi.Windows;
45+
46+{ TPNGImageCollectionItemsHelper }
47+
48+procedure TPNGImageCollection.Limpar;
49+begin
50+ Items.Clear;
51+ FIndice := -1;
52+
53+ AtualizarEstadoDosComponentesDeSaida;
54+end;
55+
56+//procedure TPNGImageCollection.CodificarInformacoesDaImagem(AIndiceDaImagem: SmallInt; ADescricao: String; AMime: String; ATipo: Byte);
57+//begin
58+// if (Items.Count = 0) or (AIndiceDaImagem = -1) then
59+// Exit;
60+//
61+// Items[AIndiceDaImagem].Name := ADescricao + '¬' + AMime + '¬' + ATipo.ToString;
62+//end;
63+
64+procedure TPNGImageCollection.ProximaImagem(AUltima: Boolean = False);
65+begin
66+ if (Items.Count = 0) or (Succ(FIndice) = Items.Count) then
67+ Exit;
68+
69+ // Salva no item da imagem atual suas informações
70+ ConfirmarInformacoesDaImagem;
71+
72+ if AUltima then
73+ FIndice := Pred(Items.Count)
74+ else
75+ Inc(FIndice);
76+
77+ ExibirImagem(FIndice);
78+end;
79+
80+procedure TPNGImageCollection.SalvarImagemComo(ACaixaDeDialogoParaSalvarImagem: TSavePictureDialog);
81+begin
82+ if ACaixaDeDialogoParaSalvarImagem.Execute then
83+ Items[FIndice].PngImage.SaveToFile(ACaixaDeDialogoParaSalvarImagem.FileName);
84+end;
85+
86+function TPNGImageCollection.SubstituirImagem(ACaixaDeDialogoParaAbrirImagem: TOpenPictureDialog): Boolean;
87+begin
88+ Result := ACaixaDeDialogoParaAbrirImagem.Execute;
89+
90+ if Result then
91+ begin
92+ Items[FIndice].PngImage.LoadFromFile(ACaixaDeDialogoParaAbrirImagem.FileName);
93+ ExibirImagem(FIndice);
94+ end;
95+end;
96+
97+procedure TPNGImageCollection.ImagemAnterior(APrimeira: Boolean = False);
98+begin
99+ if (Items.Count = 0) or (FIndice = 0) then
100+ Exit;
101+
102+ // Salva no item da imagem atual suas informações
103+ ConfirmarInformacoesDaImagem;
104+
105+ if APrimeira then
106+ FIndice := 0
107+ else
108+ Dec(FIndice);
109+
110+ ExibirImagem(FIndice);
111+end;
112+
113+
114+function TPNGImageCollection.AdicionarImagem(ACaixaDeDialogoParaAbrirImagem: TOpenPictureDialog): Boolean;
115+begin
116+ Result := ACaixaDeDialogoParaAbrirImagem.Execute;
117+ if Result then
118+ begin
119+ Items.Add.PngImage.LoadFromFile(ACaixaDeDialogoParaAbrirImagem.FileName);
120+ ProximaImagem(True);
121+ end;
122+end;
123+
124+procedure TPNGImageCollection.AtualizarEstadoDosComponentesDeSaida;
125+begin
126+ FProximaImagem.Enabled := (Items.Count > 0) and (FIndice < Pred(Items.Count));
127+ FImagemAnterior.Enabled := (Items.Count > 0) and (FIndice > 0);
128+ FSalvarImagem.Enabled := Items.Count > 0;
129+ FRemoverImagem.Enabled := FSalvarImagem.Enabled;
130+ FSubstituirImagem.Enabled := FSalvarImagem.Enabled;
131+ FContador.Caption := Succ(FIndice).ToString + ' / ' + Items.Count.ToString;
132+ FContadorSombra.Caption := FContador.Caption;
133+ FDescricao.Enabled := FSalvarImagem.Enabled;
134+ FTipo.Enabled := FSalvarImagem.Enabled;
135+
136+ if Items.Count = 0 then
137+ begin
138+ FImagem.Picture := nil;
139+ FDescricao.Text := '';
140+ FTipo.ItemIndex := 0;
141+ end;
142+end;
143+
144+procedure TPNGImageCollection.ConfigurarComponentesDeSaida(AImagem: TImage; ADescricao: TLabeledEdit; ATipo: TComboBox; AProximaImagem: TAction; AImagemAnterior: TAction; ASalvarImagem: TAction; ARemoverImagem: TAction; ASubstituirImagem: TAction; AContador: TLabel; AContadorSombra: TLabel);
145+begin
146+ FImagem := AImagem;
147+ FDescricao := ADescricao;
148+ FTipo := ATipo;
149+ FProximaImagem := AProximaImagem;
150+ FImagemAnterior := AImagemAnterior;
151+ FSalvarImagem := ASalvarImagem;
152+ FRemoverImagem := ARemoverImagem;
153+ FSubstituirImagem := ASubstituirImagem;
154+ FContador := AContador;
155+ FContadorSombra := AContadorSombra;
156+end;
157+
158+procedure TPNGImageCollection.ConfirmarInformacoesDaImagem;
159+begin
160+ if (Items.Count = 0) or (FIndice = -1) then
161+ Exit;
162+
163+ Items[FIndice].Name := FDescricao.Text + '¬image/png¬' + FTipo.ItemIndex.ToString;
164+end;
165+
166+constructor TPNGImageCollection.Create(AOwner: TComponent);
167+begin
168+ inherited;
169+ FIndice := -1;
170+end;
171+
172+function TPNGImageCollection.ExcluirAtual: Boolean;
173+begin
174+ Result := False;
175+
176+ if FIndice = -1 then
177+ Exit;
178+
179+ Result := Application.MessageBox('Deseja mesmo excluir esta imagem?','Tem certeza?',MB_ICONQUESTION or MB_YESNO) = IDYES;
180+
181+ if not Result then
182+ Exit;
183+
184+ Items.Delete(FIndice);
185+
186+ // Caso tenhamos excluído uma imagem que não tenha sido a última imagem da
187+ // lista basta recarregar o índice atual, que está contido no Tag de PNICAPIC.
188+ // Isso vai, invariavelmente, carregar a imagem que estava após a imagem
189+ // excluída
190+ if FIndice < Items.Count then
191+ ExibirImagem(FIndice)
192+ // Caso contrário, se tivermos excluído a última imagem
193+ else
194+ begin
195+ // Ajusta o indice da última imagem
196+ Dec(FIndice);
197+
198+ // Caso ainda existam imagens na lista, precisamos carregar a última imagem
199+ if Items.Count > 0 then
200+ ExibirImagem(FIndice)
201+ // Por fim, se o fluxo chega aqui é porque a lista de imagens está vazia,
202+ // neste caso apenas ajustamos a tela para refletir essa nova realidade
203+ else
204+ AtualizarEstadoDosComponentesDeSaida;
205+ end;
206+end;
207+
208+procedure TPNGImageCollection.ExibirImagem(AIndiceDaImagem: Word);
209+begin
210+ if (not Assigned(FImagem)) or (Items.Count = 0) or (AIndiceDaImagem > Pred(Items.Count)) then
211+ Exit;
212+
213+ FImagem.Picture.Assign(Items[AIndiceDaImagem].PngImage);
214+
215+ var OnChangeOriginal: TNotifyEvent;
216+
217+ OnChangeOriginal := FDescricao.OnChange;
218+ try
219+ FDescricao.OnChange := nil;
220+ FTipo.OnChange := nil;
221+
222+ with TStringList.Create do
223+ try
224+ StrictDelimiter := True;
225+ Delimiter := '¬';
226+ DelimitedText := Items[AIndiceDaImagem].Name;
227+
228+ FDescricao.Text := Strings[0];
229+ FTipo.ItemIndex := 0;
230+
231+ if Count > 1 then
232+ FTipo.ItemIndex := Strings[2].ToInteger;
233+ finally
234+ Free;
235+ end;
236+ finally
237+ FDescricao.OnChange := OnChangeOriginal;
238+ FTipo.OnChange := OnChangeOriginal
239+ end;
240+
241+ FIndice := AIndiceDaImagem;
242+ AtualizarEstadoDosComponentesDeSaida;
243+end;
244+
245+end.
--- trunk/V2/src/UDAMOPrincipal.pas (revision 18)
+++ trunk/V2/src/UDAMOPrincipal.pas (revision 19)
@@ -20,7 +20,7 @@
2020 ACTNSalvarID3v2: TAction;
2121 ACTNRemoverID3v2: TAction;
2222 ACTNCopiarDoID3v1: TAction;
23- TIMEMarquee: TTimer;
23+ TIMELetreiro: TTimer;
2424 OPDIMP3: TOpenDialog;
2525 TIMEReprodutor: TTimer;
2626 ACTNSobre: TAction;
@@ -43,7 +43,7 @@
4343 OPDIAPIC: TOpenPictureDialog;
4444 ACTNReverterID3v1: TAction;
4545 ACTNReverterID3v2: TAction;
46- procedure TIMEMarqueeTimer(Sender: TObject);
46+ procedure TIMELetreiroTimer(Sender: TObject);
4747 procedure DataModuleCreate(Sender: TObject);
4848 procedure DataModuleDestroy(Sender: TObject);
4949 procedure ACTNAbrirMP3Execute(Sender: TObject);
@@ -71,7 +71,6 @@
7171 { Private declarations }
7272 FID3v1Tag: TID3v1Tag;
7373 FID3v2Tag: TID3v2Tag;
74- FListaDeReproducao: TStringList;
7574 FIndiceDoArquivoAtual: SmallInt;
7675 FTempoTotalDoArquivoAtual: Double;
7776 FPosicaoHorizontalDoLetreiro: SmallInt;
@@ -101,13 +100,6 @@
101100 procedure CopiarDadosDoID3v1;
102101 procedure CarregarGenerosID3;
103102 procedure AtualizarBotoesDoReprodutor;
104-// procedure CarregarImagem(AIndiceDaImagem: Word);
105-// procedure DecodificarInformacoesDaImagem(AIndiceDaImagem: Word);
106- procedure CodificarInformacoesDaImagem(AIndiceDaImagem: Word; ADescricao: String; AMime: String; ATipo: Byte);
107-// procedure ProximaImagem(AUltima: Boolean = False);
108-// procedure ImagemAnterior;
109- procedure AtualizarBotoesDoNavegadorDeImagens;
110- procedure SalvarImagemComo;
111103 procedure RemoverImagem;
112104 procedure AdicionarImagem;
113105 procedure SubstituirImagem;
@@ -136,8 +128,8 @@
136128 if FIndiceDoArquivoAtual = -1 then
137129 Exit;
138130
139- FPosicaoHorizontalDoLetreiro := - TFORMPrincipal(Owner).PABOLetreiro.Canvas.TextWidth(FListaDeReproducao[FIndiceDoArquivoAtual]);
140- FPosicaoVerticalDoLetreiro := TFORMPrincipal(Owner).PABOLetreiro.Height div 2 - TFORMPrincipal(Owner).PABOLetreiro.Canvas.TextHeight(FListaDeReproducao[FIndiceDoArquivoAtual]) div 2;
131+ FPosicaoHorizontalDoLetreiro := - TFORMPrincipal(Owner).PABOLetreiro.Canvas.TextWidth(ExtractFileName(TFORMPrincipal(Owner).LIBOListaDeReproducao.Items[FIndiceDoArquivoAtual]));
132+ FPosicaoVerticalDoLetreiro := TFORMPrincipal(Owner).PABOLetreiro.Height div 2 - TFORMPrincipal(Owner).PABOLetreiro.Canvas.TextHeight(ExtractFileName(TFORMPrincipal(Owner).LIBOListaDeReproducao.Items[FIndiceDoArquivoAtual])) div 2;
141133 end;
142134
143135 procedure TDAMOPrincipal.ReiniciarStatusDeModificacao(AContexto: TContexto);
@@ -161,10 +153,10 @@
161153 if FIndiceDoArquivoAtual = -1 then
162154 Exit;
163155
164- if Application.MessageBox(PChar('Tem certeza que deseja remover completamente o ID3v1 do arquivo "' + ExtractFileName(FListaDeReproducao[FIndiceDoArquivoAtual]) + '"? Esta operação não poderá see desfeita'),'Tem certeza?',MB_YESNO or MB_ICONQUESTION) = IDNO then
156+ if Application.MessageBox(PChar('Tem certeza que deseja remover completamente o ID3v1 do arquivo "' + ExtractFileName(TFORMPrincipal(Owner).LIBOListaDeReproducao.Items[FIndiceDoArquivoAtual]) + '"? Esta operação não poderá see desfeita'),'Tem certeza?',MB_YESNO or MB_ICONQUESTION) = IDNO then
165157 Exit;
166158
167- Erro := RemoveID3v1TagFromFile(FListaDeReproducao[FIndiceDoArquivoAtual]);
159+ Erro := RemoveID3v1TagFromFile(TFORMPrincipal(Owner).LIBOListaDeReproducao.Items[FIndiceDoArquivoAtual]);
168160
169161 if (Erro <> ID3V2LIBRARY_SUCCESS) and (Erro <> ID3V1LIBRARY_ERROR) then
170162 raise Exception.CreateFmt('Não foi possível excluir o tag ID3v1 do arquivo. Código de erro: %d',[Erro]);
@@ -181,13 +173,13 @@
181173 if FIndiceDoArquivoAtual = -1 then
182174 Exit;
183175
184- if Application.MessageBox(PChar('Tem certeza que deseja remover completamente o ID3v2 do arquivo "' + ExtractFileName(FListaDeReproducao[FIndiceDoArquivoAtual]) + '"? Esta operação não poderá see desfeita.'#13#10#13#10'Atenção: A reprodução atual será interrompida para que a remoção seja realizada'),'Tem certeza?',MB_YESNO or MB_ICONQUESTION) = IDNO then
176+ if Application.MessageBox(PChar('Tem certeza que deseja remover completamente o ID3v2 do arquivo "' + ExtractFileName(TFORMPrincipal(Owner).LIBOListaDeReproducao.Items[FIndiceDoArquivoAtual]) + '"? Esta operação não poderá see desfeita.'#13#10#13#10'Atenção: A reprodução atual será interrompida para que a remoção seja realizada'),'Tem certeza?',MB_YESNO or MB_ICONQUESTION) = IDNO then
185177 Exit;
186178
187179 PararReproducao;
188180 DescarregarStream;
189181 try
190- Erro := RemoveID3v2TagFromFile(FListaDeReproducao[FIndiceDoArquivoAtual]);
182+ Erro := RemoveID3v2TagFromFile(TFORMPrincipal(Owner).LIBOListaDeReproducao.Items[FIndiceDoArquivoAtual]);
191183 finally
192184 CarregarStream;
193185 end;
@@ -202,30 +194,8 @@
202194
203195 procedure TDAMOPrincipal.RemoverImagem;
204196 begin
205- PNICAPIC.ExcluirAtual;
206-
207-// // Caso tenhamos excluído uma imagem que não tenha sido a última imagem da
208-// // lista basta recarregar o índice atual, que está contido no Tag de PNICAPIC.
209-// // Isso vai, invariavelmente, carregar a imagem que estava após a imagem
210-// // excluída
211-// if PNICAPIC.Tag < PNICAPIC.Items.Count then
212-// CarregarImagem(PNICAPIC.Tag)
213-// // Caso contrário, se tivermos excluído a última imagem
214-// else
215-// begin
216-// // Ajusta o indice da última imagem
217-// PNICAPIC.Tag := PNICAPIC.Tag - 1;
218-//
219-// // Caso ainda existam imagens na lista, precisamos carregar a última imagem
220-// if PNICAPIC.Items.Count > 0 then
221-// CarregarImagem(PNICAPIC.Tag)
222-// // Por fim, se o fluxo chega aqui é porque a lista de imagens está vazia,
223-// // neste caso apenas ajustamos a tela para refletir essa nova realidade
224-// else
225-// AtualizarBotoesDoNavegadorDeImagens;
226-// end;
227-
228- DefinirStatusDeModificado(cId3v2);
197+ if PNICAPIC.ExcluirAtual then
198+ DefinirStatusDeModificado(cId3v2);
229199 end;
230200
231201 function TDAMOPrincipal.ReproducaoConcluida: Boolean;
@@ -259,7 +229,7 @@
259229 FID3v1Tag.Year := LAEDID3v1Ano.Text;
260230 FID3v1Tag.Comment := MEMOID3v1Comentarios.Text;
261231 FID3v1Tag.Genre := CMBXID3v1Genero.Items[CMBXID3v1Genero.ItemIndex];
262- FID3v1Tag.SaveToFile(FListaDeReproducao[FIndiceDoArquivoAtual]);
232+ FID3v1Tag.SaveToFile(TFORMPrincipal(Owner).LIBOListaDeReproducao.Items[FIndiceDoArquivoAtual]);
263233 ReiniciarStatusDeModificacao(cId3v1);
264234 end;
265235 end;
@@ -291,7 +261,7 @@
291261 { Imagens }
292262 // Salva no item da imagem suas informações. Isso é necessário aqui porque o
293263 // item da imagem só é atualizado normalmente ao se navegar entre as imagens
294- CodificarInformacoesDaImagem(PNICAPIC.Tag,LAEDDescricaoDaImagem.Text,'image/png',CMBXTipoDaImagem.ItemIndex);
264+ PNICAPIC.ConfirmarInformacoesDaImagem;
295265
296266 AdicionarTodasAsImagens;
297267
@@ -300,7 +270,7 @@
300270 PararReproducao;
301271 DescarregarStream;
302272 try
303- if FID3v2Tag.SaveToFile(FListaDeReproducao[FIndiceDoArquivoAtual]) <> ID3V2LIBRARY_SUCCESS then
273+ if FID3v2Tag.SaveToFile(TFORMPrincipal(Owner).LIBOListaDeReproducao.Items[FIndiceDoArquivoAtual]) <> ID3V2LIBRARY_SUCCESS then
304274 raise Exception.Create('Não foi possível salvar o tag ID3v2');
305275 finally
306276 CarregarStream;
@@ -310,20 +280,10 @@
310280 end;
311281 end;
312282
313-procedure TDAMOPrincipal.SalvarImagemComo;
314-begin
315- if SPIDAPIC.Execute then
316- PNICAPIC.Items[PNICAPIC.Tag].PngImage.SaveToFile(SPIDAPIC.FileName);
317-end;
318-
319283 procedure TDAMOPrincipal.SubstituirImagem;
320284 begin
321- if OPDIAPIC.Execute then
322- begin
323- PNICAPIC.Items[PNICAPIC.Tag].PngImage.LoadFromFile(OPDIAPIC.FileName);
324- TFORMPrincipal(Owner).IMAGAPIC.Picture.LoadFromFile(OPDIAPIC.FileName);
285+ if PNICAPIC.SubstituirImagem(OPDIAPIC) then
325286 DefinirStatusDeModificado(cId3v2);
326- end;
327287 end;
328288
329289 procedure TDAMOPrincipal.PararReproducao;
@@ -341,28 +301,11 @@
341301 AtualizarBotoesDoReprodutor;
342302 end;
343303
344-//procedure TDAMOPrincipal.ProximaImagem(AUltima: Boolean = False);
345-//begin
346-// if (PNICAPIC.Items.Count = 0) or (Succ(PNICAPIC.Tag) = PNICAPIC.Items.Count) then
347-// Exit;
348-//
349-// // Salva no item da imagem suas informações
350-// if PNICAPIC.Tag > -1 then
351-// CodificarInformacoesDaImagem(PNICAPIC.Tag,TFORMPrincipal(Owner).LAEDDescricaoDaImagem.Text,'image/png',TFORMPrincipal(Owner).CMBXTipoDaImagem.ItemIndex);
352-//
353-// if AUltima then
354-// PNICAPIC.Tag := Pred(PNICAPIC.Items.Count)
355-// else
356-// PNICAPIC.Tag := PNICAPIC.Tag + 1;
357-//
358-// CarregarImagem(PNICAPIC.Tag);
359-//end;
360-
361304 procedure TDAMOPrincipal.ProximaMusica(AUltima: Boolean = False; AForcarReproducao: Boolean = False);
362305 var
363306 ContinuarReproducao: Boolean;
364307 begin
365- if (FIndiceDoArquivoAtual = -1) or (Succ(FIndiceDoArquivoAtual) = FListaDeReproducao.Count) then
308+ if (FIndiceDoArquivoAtual = -1) or (Succ(FIndiceDoArquivoAtual) = TFORMPrincipal(Owner).LIBOListaDeReproducao.Count) then
366309 begin
367310 // Garante a parada do timer quando a última música termina e ainda zera o
368311 // contador de tempo, mas isso só será feito se a mudança de faixa ocorrer
@@ -377,7 +320,7 @@
377320 DescarregarStream;
378321
379322 if AUltima then
380- FIndiceDoArquivoAtual := Pred(FListaDeReproducao.Count)
323+ FIndiceDoArquivoAtual := Pred(TFORMPrincipal(Owner).LIBOListaDeReproducao.Count)
381324 else
382325 Inc(FIndiceDoArquivoAtual);
383326
@@ -414,7 +357,7 @@
414357
415358 with TFORMPrincipal(Owner) do
416359 begin
417- Erro := FID3v1Tag.LoadFromFile(FListaDeReproducao[FIndiceDoArquivoAtual]);
360+ Erro := FID3v1Tag.LoadFromFile(LIBOListaDeReproducao.Items[FIndiceDoArquivoAtual]);
418361
419362 case Erro of
420363 ID3V2LIBRARY_ERROR: { O tag não existe no arquivo! };
@@ -450,7 +393,7 @@
450393
451394 with TFORMPrincipal(Owner) do
452395 begin
453- Erro := FID3v2Tag.LoadFromFile(FListaDeReproducao[FIndiceDoArquivoAtual]);
396+ Erro := FID3v2Tag.LoadFromFile(LIBOListaDeReproducao.Items[FIndiceDoArquivoAtual]);
454397
455398 case Erro of
456399 ID3V2LIBRARY_ERROR: raise Exception.Create('Não foi possível obter o tag ID3v2: Erro desconhecido');
@@ -502,9 +445,7 @@
502445 end;
503446 end;
504447 PNICAPIC.ImagemAnterior(True);
505- end
506- else
507- AtualizarBotoesDoNavegadorDeImagens;
448+ end;
508449 end;
509450 end;
510451
@@ -512,15 +453,6 @@
512453 end;
513454 end;
514455
515-//procedure TDAMOPrincipal.CarregarImagem(AIndiceDaImagem: Word);
516-//begin
517-// if PNICAPIC.Items.Count > 0 then
518-// TFORMPrincipal(Owner).IMAGAPIC.Picture.Assign(PNICAPIC.Items[AIndiceDaImagem].PngImage);
519-//
520-// DecodificarInformacoesDaImagem(AIndiceDaImagem);
521-// AtualizarBotoesDoNavegadorDeImagens;
522-//end;
523-
524456 procedure TDAMOPrincipal.CarregarMP3;
525457 begin
526458 if not ExistemModificacoes or (Application.MessageBox('Você fez alterações nas informações do arquivo atual mas não as salvou, deseja mesmo carragar outro(s) MP3 e perder as alterações realizadas?','Tem certeza?',MB_ICONQUESTION or MB_YESNO) = IDYES) then
@@ -527,7 +459,7 @@
527459 if OPDIMP3.Execute then
528460 begin
529461 PararReproducao;
530- FListaDeReproducao.Assign(OPDIMP3.Files);
462+ TFORMPrincipal(Owner).LIBOListaDeReproducao.Items.Assign(OPDIMP3.Files);
531463 FIndiceDoArquivoAtual := 0;
532464 CarregarStream;
533465 AtualizarContadorDaListaDeReproducao;
@@ -548,7 +480,7 @@
548480 CarregarID3v1;
549481 CarregarID3v2;
550482
551- FManipuladorDoStream := BASS_StreamCreateFile(False, PChar(FListaDeReproducao[FIndiceDoArquivoAtual]), 0, 0, BASS_STREAM_PRESCAN or BASS_UNICODE);
483+ FManipuladorDoStream := BASS_StreamCreateFile(False, PChar(TFORMPrincipal(Owner).LIBOListaDeReproducao.Items[FIndiceDoArquivoAtual]), 0, 0, BASS_STREAM_PRESCAN or BASS_UNICODE);
552484
553485 if FManipuladorDoStream = 0 then
554486 raise Exception.CreateFmt('A biblioteca BASS não foi capaz de carregar o arquivo. Código de erro %d',[BASS_ErrorGetCode]);
@@ -565,12 +497,6 @@
565497
566498 end;
567499
568-//procedure TDAMOPrincipal.CodificarInformacoesDaImagem(AIndiceDaImagem: Word; ADescricao: String; AMime: String; ATipo: Byte);
569-//begin
570-// if (PNICAPIC.Items.Count > 0) and (AIndiceDaImagem < PNICAPIC.Items.Count) then
571-// PNICAPIC.Items[AIndiceDaImagem].Name := ADescricao + '¬' + AMime + '¬' + ATipo.ToString;
572-//end;
573-
574500 procedure TDAMOPrincipal.CopiarDadosDoID3v1;
575501 begin
576502 showmessage(FID3v1Tag.Loaded.ToString(False));
@@ -578,11 +504,22 @@
578504
579505 procedure TDAMOPrincipal.DataModuleCreate(Sender: TObject);
580506 begin
581-// PNICAPIC.ConfigurarImagemDeSaida(TFORMPrincipal(Owner).IMAGAPIC);
507+ PNICAPIC.ConfigurarComponentesDeSaida(TFORMPrincipal(Owner).IMAGAPIC
508+ ,TFORMPrincipal(Owner).LAEDDescricaoDaImagem
509+ ,TFORMPrincipal(Owner).CMBXTipoDaImagem
510+ ,ACTNProximaImagem
511+ ,ACTNImagemAnterior
512+ ,ACTNSalvarImagemComo
513+ ,ACTNRemoverImagem
514+ ,ACTNSubstituirImagem
515+ ,TFORMPrincipal(Owner).LABEImagens
516+ ,TFORMPrincipal(Owner).LABEImagensSombra);
517+
518+
519+
582520 FID3v1Tag := TID3v1Tag.Create;
583521 FID3v2Tag := TID3v2Tag.Create;
584522
585- FListaDeReproducao := TStringList.Create;
586523 FIndiceDoArquivoAtual := -1;
587524 FManipuladorDoStream := 0;
588525 FMudouAutomaticamente := False;
@@ -600,37 +537,10 @@
600537 if not BASS_Free then
601538 raise Exception.CreateFmt('Não foi possível liberar os recursos alocados pela biblioteca BASS. Código de erro %d',[BASS_ErrorGetCode]);
602539
603- FListaDeReproducao.Free;
604540 FID3v2Tag.Free;
605541 FID3v1Tag.Free;
606542 end;
607543
608-//procedure TDAMOPrincipal.DecodificarInformacoesDaImagem(AIndiceDaImagem: Word);
609-//var
610-// NaoFoiModificado: Boolean;
611-//begin
612-// if PNICAPIC.Items.Count > 0 then
613-// with TStringList.Create do
614-// try
615-// StrictDelimiter := True;
616-// Delimiter := '¬';
617-// DelimitedText := PNICAPIC.Items[AIndiceDaImagem].Name;
618-//
619-// NaoFoiModificado := not ExistemModificacoes;
620-//
621-// TFORMPrincipal(Owner).LAEDDescricaoDaImagem.Text := Strings[0];
622-// TFORMPrincipal(Owner).CMBXTipoDaImagem.ItemIndex := 0;
623-//
624-// if Count > 1 then
625-// TFORMPrincipal(Owner).CMBXTipoDaImagem.ItemIndex := Strings[2].ToInteger;
626-//
627-// if NaoFoiModificado then
628-// ReiniciarStatusDeModificacao(cId3v2);
629-// finally
630-// Free;
631-// end;
632-//end;
633-
634544 procedure TDAMOPrincipal.DefinirStatusDeModificado(AContexto: TContexto);
635545 begin
636546 if AContexto = cId3v1 then
@@ -685,19 +595,6 @@
685595 Result := (Pos('*',TFORMPrincipal(Owner).TASHID3v1.Caption) > 0) or (Pos('*',TFORMPrincipal(Owner).TASHID3v2.Caption) > 0);
686596 end;
687597
688-//procedure TDAMOPrincipal.ImagemAnterior;
689-//begin
690-// if (PNICAPIC.Items.Count = 0) or (PNICAPIC.Tag = 0) then
691-// Exit;
692-//
693-// // Salva no item da imagem suas informações
694-// CodificarInformacoesDaImagem(PNICAPIC.Tag,TFORMPrincipal(Owner).LAEDDescricaoDaImagem.Text,'image/png',TFORMPrincipal(Owner).CMBXTipoDaImagem.ItemIndex);
695-//
696-// PNICAPIC.Tag := PNICAPIC.Tag - 1;
697-//
698-// CarregarImagem(PNICAPIC.Tag);
699-//end;
700-
701598 procedure TDAMOPrincipal.LimparCamposDaAplicacao(ACamposALimpar: TContexto);
702599 begin
703600 with TFORMPrincipal(Owner) do
@@ -727,9 +624,7 @@
727624 CMBXIdiomaDoComentario.ItemIndex := -1;
728625 LAEDTipoDoComentario.Clear;
729626 { Imagens }
730- PNICAPIC.Items.Clear;
731- PNICAPIC.Tag := -1;
732- IMAGAPIC.Picture := nil;
627+ PNICAPIC.Limpar;
733628 LAEDDescricaoDaImagem.Text := '';
734629 CMBXTipoDaImagem.ItemIndex := 0;
735630 ACTNRemoverImagem.Enabled := False;
@@ -795,8 +690,7 @@
795690
796691 procedure TDAMOPrincipal.ACTNImagemAnteriorExecute(Sender: TObject);
797692 begin
798- continue aqui
799- ImagemAnterior;
693+ PNICAPIC.ImagemAnterior;
800694 end;
801695
802696 procedure TDAMOPrincipal.ACTNMusicaAnteriorExecute(Sender: TObject);
@@ -816,7 +710,7 @@
816710
817711 procedure TDAMOPrincipal.ACTNProximaImagemExecute(Sender: TObject);
818712 begin
819- ProximaImagem;
713+ PNICAPIC.ProximaImagem;
820714 end;
821715
822716 procedure TDAMOPrincipal.ACTNProximaMusicaExecute(Sender: TObject);
@@ -868,7 +762,7 @@
868762
869763 procedure TDAMOPrincipal.ACTNSalvarImagemComoExecute(Sender: TObject);
870764 begin
871- SalvarImagemComo;
765+ PNICAPIC.SalvarImagemComo(SPIDAPIC);
872766 end;
873767
874768 procedure TDAMOPrincipal.ACTNSubstituirImagemExecute(Sender: TObject);
@@ -883,12 +777,8 @@
883777
884778 procedure TDAMOPrincipal.AdicionarImagem;
885779 begin
886- if OPDIAPIC.Execute then
887- begin
888- PNICAPIC.Items.Add.PngImage.LoadFromFile(OPDIAPIC.FileName);
780+ if PNICAPIC.AdicionarImagem(OPDIAPIC) then
889781 DefinirStatusDeModificado(cId3v2);
890- ProximaImagem(True);
891- end;
892782 end;
893783
894784 procedure TDAMOPrincipal.AdicionarTodasAsImagens;
@@ -922,27 +812,6 @@
922812 end;
923813 end;
924814
925-//procedure TDAMOPrincipal.AtualizarBotoesDoNavegadorDeImagens;
926-//begin
927-// ACTNProximaImagem.Enabled := (PNICAPIC.Items.Count > 0) and (PNICAPIC.Tag < Pred(PNICAPIC.Items.Count));
928-// ACTNImagemAnterior.Enabled := (PNICAPIC.Items.Count > 0) and (PNICAPIC.Tag > 0);
929-// ACTNSalvarImagemComo.Enabled := PNICAPIC.Items.Count > 0;
930-// ACTNRemoverImagem.Enabled := ACTNSalvarImagemComo.Enabled;
931-// ACTNSubstituirImagem.Enabled := ACTNSalvarImagemComo.Enabled;
932-// TFORMPrincipal(Owner).LABEImagens.Caption := Succ(PNICAPIC.Tag).ToString + ' / ' + PNICAPIC.Items.Count.ToString;
933-// TFORMPrincipal(Owner).LABEImagensSombra.Caption := TFORMPrincipal(Owner).LABEImagens.Caption;
934-//
935-// TFORMPrincipal(Owner).LAEDDescricaoDaImagem.Enabled := ACTNSalvarImagemComo.Enabled;
936-// TFORMPrincipal(Owner).CMBXTipoDaImagem.Enabled := ACTNSalvarImagemComo.Enabled;
937-//
938-// if PNICAPIC.Items.Count = 0 then
939-// begin
940-// TFORMPrincipal(Owner).IMAGAPIC.Picture := nil;
941-// TFORMPrincipal(Owner).LAEDDescricaoDaImagem.Text := '';
942-// TFORMPrincipal(Owner).CMBXTipoDaImagem.ItemIndex := 0;
943-// end;
944-//end;
945-
946815 procedure TDAMOPrincipal.AtualizarBotoesDoReprodutor;
947816 begin
948817 ACTNPrimeiraMusica.Enabled := (FIndiceDoArquivoAtual > -1) and (FIndiceDoArquivoAtual > 0);
@@ -949,7 +818,7 @@
949818 ACTNMusicaAnterior.Enabled := ACTNPrimeiraMusica.Enabled;
950819 ACTNReproduzir.Enabled := (FIndiceDoArquivoAtual > -1) and not EstaReproduzindo;
951820 ACTNPararReproducao.Enabled := (FIndiceDoArquivoAtual > -1) and EstaReproduzindo;
952- ACTNProximaMusica.Enabled := (FIndiceDoArquivoAtual > -1) and (FIndiceDoArquivoAtual < Pred(FListaDeReproducao.Count));
821+ ACTNProximaMusica.Enabled := (FIndiceDoArquivoAtual > -1) and (FIndiceDoArquivoAtual < Pred(TFORMPrincipal(Owner).LIBOListaDeReproducao.Count));
953822 ACTNUltimaMusica.Enabled := ACTNProximaMusica.Enabled;
954823 end;
955824
@@ -958,7 +827,7 @@
958827 TFORMPrincipal(Owner).LABEPlaylist.Caption := '000 / 000';
959828
960829 if FIndiceDoArquivoAtual > -1 then
961- TFORMPrincipal(Owner).LABEPlaylist.Caption := Format('%.3d / %.3d',[Succ(FIndiceDoArquivoAtual),FListaDeReproducao.Count]);
830+ TFORMPrincipal(Owner).LABEPlaylist.Caption := Format('%.3d / %.3d',[Succ(FIndiceDoArquivoAtual),TFORMPrincipal(Owner).LIBOListaDeReproducao.Count]);
962831 end;
963832
964833 procedure TDAMOPrincipal.AtualizarLetreiro;
@@ -967,7 +836,7 @@
967836 Exit;
968837
969838 TFORMPrincipal(Owner).PABOLetreiro.Canvas.Brush.Style := bsClear;
970- TFORMPrincipal(Owner).PABOLetreiro.Canvas.TextOut(FPosicaoHorizontalDoLetreiro,FPosicaoVerticalDoLetreiro,FListaDeReproducao[FIndiceDoArquivoAtual]);
839+ TFORMPrincipal(Owner).PABOLetreiro.Canvas.TextOut(FPosicaoHorizontalDoLetreiro,FPosicaoVerticalDoLetreiro,ExtractFileName(TFORMPrincipal(Owner).LIBOListaDeReproducao.Items[FIndiceDoArquivoAtual]));
971840 end;
972841
973842 procedure TDAMOPrincipal.AtualizarTempoDecorrido(AZero: Boolean = False);
@@ -990,7 +859,7 @@
990859 Result := BASS_ChannelBytes2Seconds(FManipuladorDoStream, BASS_ChannelGetPosition(FManipuladorDoStream,BASS_POS_BYTE));
991860 end;
992861
993-procedure TDAMOPrincipal.TIMEMarqueeTimer(Sender: TObject);
862+procedure TDAMOPrincipal.TIMELetreiroTimer(Sender: TObject);
994863 begin
995864 if FIndiceDoArquivoAtual = -1 then
996865 Exit;
--- trunk/V2/src/UFORMPrincipal.pas (revision 18)
+++ trunk/V2/src/UFORMPrincipal.pas (revision 19)
@@ -81,6 +81,8 @@
8181 PNSBReverterID3v1: TPngSpeedButton;
8282 TASHListaDeReproducao: TTabSheet;
8383 SHAPLetreiro: TShape;
84+ LIBOListaDeReproducao: TListBox;
85+ Panel1: TPanel;
8486 procedure PABOLetreiroPaint(Sender: TObject);
8587 procedure IMAGID3v2Click(Sender: TObject);
8688 procedure ID3v1Modificado(Sender: TObject);
Show on old repository browser