aboutsummaryrefslogblamecommitdiffstats
path: root/src/screens/UScreenEditHeader.pas
blob: 1d697bc9cee839487f68597a901e7816f86d92e6 (plain) (tree)
























                                                                        



                       



                

                 




         
        
          
































                                                

                                                                                                             





                                        





           

                
 
                                                                                                               



                 

                                      

                                   







                          
                  
             

                                




                          
                                 
               
                   






                               
                                   





                             
                                   






                               


                                    





                             


                                     





                                           
                                                                                            
               
                                     





                                        
              
             
                                                            
               
                                                     
                                                                                  


















                                                                  


                                                      
 


                                                          
 


                                                           
 


                                                      
 


                                                             
 


                                                                 
 


                                                                  
 


                                                              
 











                                                                                                                           














                                        
                                   


            

                                             



























                                                                        



                   



                         

                      
                     

                                           




                            

                                      

                                                                                                

                                  
                                                                   

                                                                              

















                                                                                                             
                                                                                         















                                            
                                          
                                        
      
                                          

                                           
                                         
      
                                           

                                        
                                      
       
                                        

                                               
                                             
      
                                               

                                          
                                        
      
                                          


                                        
                                                   
                                             
        
                                               
        
                                             

      
                                                    
                                           
      
                                             


                                        
                                                                                                     
                                               
        
                                                 
        
                                               



                                      
                                            
        
                                             




                                     
                                                  
                                          
        
                                            
        
                                          




                                   
                                       
        
                                        




                                   
                                                
                                        
        
                                          
        
                                        









                               
{* UltraStar Deluxe - Karaoke Game
 *
 * UltraStar Deluxe is the legal property of its developers, whose names
 * are too numerous to list here. Please refer to the COPYRIGHT
 * file distributed with this source distribution.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; see the file COPYING. If not, write to
 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA 02110-1301, USA.
 *
 * $URL$
 * $Id$
 *}

unit UScreenEditHeader;

interface

{$IFDEF FPC}
  {$MODE Delphi}
{$ENDIF}

{$I switches.inc}

uses
  UMenu,
  SDL,
  USongs,
  USong,
  UPath,
  UThemes;

type
  TScreenEditHeader = class(TMenu)
    public
      CurrentSong:      TSong;
      TextTitle:        integer;
      TextArtist:       integer;
      TextMp3:          integer;
      TextBackground:   integer;
      TextVideo:        integer;
      TextVideoGAP:     integer;
      TextRelative:     integer;
      TextResolution:   integer;
      TextNotesGAP:     integer;
      TextStart:        integer;
      TextGAP:          integer;
      TextBPM:          integer;
      StaticTitle:      integer;
      StaticArtist:     integer;
      StaticMp3:        integer;
      StaticBackground: integer;
      StaticVideo:      integer;
      StaticVideoGAP:   integer;
      StaticRelative:   integer;
      StaticResolution: integer;
      StaticNotesGAP:   integer;
      StaticStart:      integer;
      StaticGAP:        integer;
      StaticBPM:        integer;
      Sel:              array[0..11] of boolean;
      procedure SetRoundButtons;

      constructor Create; override;
      procedure OnShow; override;
      function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override;
{      function Draw: boolean; override;
      procedure Finish;}
  end;

implementation

uses
  UGraphic,
  UMusic,
  SysUtils,
  UFiles,
  USkins,
  UTexture,
  UUnicodeUtils;

function TScreenEditHeader.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean;
var
  T:    integer;
begin
  Result := true;
  if (PressedDown) then    // Key Down
   begin   // check normal keys
    case UCS4UpperCase(CharCode) of
      Ord('Q'):
        begin
          Result := false;
          Exit;
        end;
    end;
    
    // check special keys
    case PressedKey of
      SDLK_ESCAPE:
        begin
          //Music.PlayBack;
          //FadeTo(@MainScreen);
          Result := false;
        end;

      SDLK_RETURN:
        begin
          if Interaction = 1 then
          begin
            //Save;
          end;
        end;

      SDLK_RIGHT:
        begin
          case Interaction of
            0..0: InteractNext;
            1:    Interaction := 0;
          end;
        end;

      SDLK_LEFT:
        begin
          case Interaction of
            0:    Interaction := 1;
            1..1: InteractPrev;
          end;
        end;

      SDLK_DOWN:
        begin
          case Interaction of
            0..1:  Interaction := 2;
            2..12: InteractNext;
            13:    Interaction := 0;
          end;
        end;

      SDLK_UP:
        begin
          case Interaction of
            0..1:  Interaction := 13;
            2:     Interaction := 0;
            3..13: InteractPrev;
          end;
        end;

      SDLK_BACKSPACE:
        begin
          T := Interaction - 2 + TextTitle;
          if (Interaction >= 2) and (Interaction <= 13) and (Length(Text[T].Text) >= 1) then
          begin
            Text[T].DeleteLastLetter;
            SetRoundButtons;            
          end;
        end;

    end;
    case CharCode of
      32..255:
        begin
          if (Interaction >= 2) and (Interaction <= 13) then
          begin
            Text[Interaction - 2 + TextTitle].Text :=
              Text[Interaction - 2 + TextTitle].Text + UCS4ToUTF8String(CharCode);
            SetRoundButtons;
          end;
        end;
    end;
  end;
end;

constructor TScreenEditHeader.Create;
begin
  inherited Create;

  AddButton(40, 20, 100, 40, Skin.GetTextureFileName('ButtonF'));
  AddButtonText(15, 5, 'Open');

  AddButton(160, 20, 100, 40, Skin.GetTextureFileName('ButtonF'));
  AddButtonText(20, 5, 'Save');

  AddBox(80, 60, 640, 550);

  AddText(160, 110 + 0*30, 0, 30, 0, 0, 0, 'Title:');
  AddText(160, 110 + 1*30, 0, 30, 0, 0, 0, 'Artist:');
  AddText(160, 110 + 2*30, 0, 30, 0, 0, 0, 'MP3:');

  AddText(160, 110 + 4*30, 0, 30, 0, 0, 0, 'Background:');
  AddText(160, 110 + 5*30, 0, 30, 0, 0, 0, 'Video:');
  AddText(160, 110 + 6*30, 0, 30, 0, 0, 0, 'VideoGAP:');

  AddText(160, 110 + 8*30,  0, 30, 0, 0, 0, 'Relative:');
  AddText(160, 110 + 9*30,  0, 30, 0, 0, 0, 'Resolution:');
  AddText(160, 110 + 10*30, 0, 30, 0, 0, 0, 'NotesGAP:');

  AddText(160, 110 + 12*30, 0, 30, 0, 0, 0, 'Start:');
  AddText(160, 110 + 13*30, 0, 30, 0, 0, 0, 'GAP:');
  AddText(160, 110 + 14*30, 0, 30, 0, 0, 0, 'BPM:');

  TextTitle  := AddText(340, 110 + 0*30, 0, 30, 0, 0, 0, '');
  TextArtist := AddText(340, 110 + 1*30, 0, 30, 0, 0, 0, '');
  TextMp3    := AddText(340, 110 + 2*30, 0, 30, 0, 0, 0, '');

  TextBackground := AddText(340, 110 + 4*30, 0, 30, 0, 0, 0, '');
  TextVideo      := AddText(340, 110 + 5*30, 0, 30, 0, 0, 0, '');
  TextVideoGAP   := AddText(340, 110 + 6*30, 0, 30, 0, 0, 0, '');

  TextRelative   := AddText(340, 110 + 8*30, 0, 30, 0, 0, 0, '');
  TextResolution := AddText(340, 110 + 9*30, 0, 30, 0, 0, 0, '');
  TextNotesGAP   := AddText(340, 110 + 10*30, 0, 30, 0, 0, 0, '');

  TextStart :=  AddText(340, 110 + 12*30, 0, 30, 0, 0, 0, '');
  TextGAP   :=  AddText(340, 110 + 13*30, 0, 30, 0, 0, 0, '');
  TextBPM   :=  AddText(340, 110 + 14*30, 0, 30, 0, 0, 0, '');

  StaticTitle      := AddStatic(130, 115 + 0*30, 20, 20, 1, 1, 1, Path('RoundButton'), TEXTURE_TYPE_TRANSPARENT, $FF00FF);
  StaticArtist     := AddStatic(130, 115 + 1*30, 20, 20, 1, 1, 1, Path('RoundButton'), TEXTURE_TYPE_TRANSPARENT, $FF00FF);
  StaticMp3        := AddStatic(130, 115 + 2*30, 20, 20, 1, 1, 1, Path('RoundButton'), TEXTURE_TYPE_TRANSPARENT, $FF00FF);
  StaticBackground := AddStatic(130, 115 + 4*30, 20, 20, 1, 1, 1, Path('RoundButton'), TEXTURE_TYPE_TRANSPARENT, $FF00FF);
  StaticVideo      := AddStatic(130, 115 + 5*30, 20, 20, 1, 1, 1, Path('RoundButton'), TEXTURE_TYPE_TRANSPARENT, $FF00FF);
  StaticVideoGAP   := AddStatic(130, 115 + 6*30, 20, 20, 1, 1, 1, Path('RoundButton'), TEXTURE_TYPE_TRANSPARENT, $FF00FF);
  StaticRelative   := AddStatic(130, 115 + 8*30, 20, 20, 1, 1, 1, Path('RoundButton'), TEXTURE_TYPE_TRANSPARENT, $FF00FF);
  StaticResolution := AddStatic(130, 115 + 9*30, 20, 20, 1, 1, 1, Path('RoundButton'), TEXTURE_TYPE_TRANSPARENT, $FF00FF);
  StaticNotesGAP   := AddStatic(130, 115 + 10*30, 20, 20, 1, 1, 1, Path('RoundButton'), TEXTURE_TYPE_TRANSPARENT, $FF00FF);
  StaticStart      := AddStatic(130, 115 + 12*30, 20, 20, 1, 1, 1, Path('RoundButton'), TEXTURE_TYPE_TRANSPARENT, $FF00FF);
  StaticGAP        := AddStatic(130, 115 + 13*30, 20, 20, 1, 1, 1, Path('RoundButton'), TEXTURE_TYPE_TRANSPARENT, $FF00FF);
  StaticBPM        := AddStatic(130, 115 + 14*30, 20, 20, 1, 1, 1, Path('RoundButton'), TEXTURE_TYPE_TRANSPARENT, $FF00FF);

  AddInteraction(iText, TextTitle);
  AddInteraction(iText, TextArtist);
  AddInteraction(iText, TextMp3);
  AddInteraction(iText, TextBackground);
  AddInteraction(iText, TextVideo);
  AddInteraction(iText, TextVideoGAP);
  AddInteraction(iText, TextRelative);
  AddInteraction(iText, TextResolution);
  AddInteraction(iText, TextNotesGAP);
  AddInteraction(iText, TextStart);
  AddInteraction(iText, TextGAP);
  AddInteraction(iText, TextBPM);
end;

procedure TScreenEditHeader.OnShow;
begin
  inherited;

{  if FileExists(FileName) then  // load file
  begin
    CurrentSong.FileName := FileName;
    SkanujPlik(CurrentSong);

    SetLength(TrueBoolStrs, 1);
    TrueBoolStrs[0] := 'yes';
    SetLength(FalseBoolStrs, 1);
    FalseBoolStrs[0] := 'no';

    Text[TextTitle].Text :=   CurrentSong.Title;
    Text[TextArtist].Text :=  CurrentSong.Artist;
    Text[TextMP3].Text :=     CurrentSong.Mp3;
    Text[TextBackground].Text :=  CurrentSong.Background;
    Text[TextVideo].Text :=       CurrentSong.Video;
    Text[TextVideoGAP].Text :=    FloatToStr(CurrentSong.VideoGAP);
    Text[TextRelative].Text :=    BoolToStr(CurrentSong.Relative, true);
    Text[TextResolution].Text :=  IntToStr(CurrentSong.Resolution);
    Text[TextNotesGAP].Text :=    IntToStr(CurrentSong.NotesGAP);
    Text[TextStart].Text := FloatToStr(CurrentSong.Start);
    Text[TextGAP].Text :=   FloatToStr(CurrentSong.GAP);
    Text[TextBPM].Text :=   FloatToStr(CurrentSong.BPM[0].BPM);
    SetRoundButtons;
  end;}

  Interaction := 0;
end;

(*function TScreenEdit.Draw: boolean;
var
  Min:     integer;
  Sec:     integer;
  Count:   integer;
  AktBeat: integer;
begin
{  glClearColor(1,1,1,1);

  // control music
  if PlaySentence then
  begin
    // stop the music
    if (Music.Position > PlayStopTime) then
    begin
      Music.Stop;
      PlaySentence := false;
    end;

    // click
    if (Click) and (PlaySentence) then
    begin
      AktBeat := Floor(CurrentSong.BPM[0].BPM * (Music.Position - CurrentSong.GAP / 1000) / 60);
      Text[TextDebug].Text := IntToStr(AktBeat);
      if AktBeat <> LastClick then
      begin
        for Count := 0 to Czesci[0].Czesc[Czesci[0].Akt].HighNut do
          if (Czesci[0].Czesc[Czesci[0].Akt].Nuta[Count].Start = AktBeat) then
          begin
            Music.PlayClick;
            LastClick := AktBeat;
          end;
      end;
    end; // click
  end; // if PlaySentence

  Text[TextSentence].Text := IntToStr(Czesci[0].Akt + 1) + ' / ' + IntToStr(Czesci[0].Ilosc);
  Text[TextNote].Text := IntToStr(AktNuta + 1) + ' / ' + IntToStr(Czesci[0].Czesc[Czesci[0].Akt].LengthNote);

  // Song info
  Text[TextBPM].Text := FloatToStr(CurrentSong.BPM[0].BPM / 4);
  Text[TextGAP].Text := FloatToStr(CurrentSong.GAP);

  // Note info
  Text[TextNStart].Text :=    IntToStr(Czesci[0].Czesc[Czesci[0].Akt].Nuta[AktNuta].Start);
  Text[TextNDlugosc].Text :=  IntToStr(Czesci[0].Czesc[Czesci[0].Akt].Nuta[AktNuta].Dlugosc);
  Text[TextNTon].Text :=      IntToStr(Czesci[0].Czesc[Czesci[0].Akt].Nuta[AktNuta].Ton);
  Text[TextNText].Text :=              Czesci[0].Czesc[Czesci[0].Akt].Nuta[AktNuta].Text;

  // draw static menu
  inherited Draw;

  // draw notes
  SingDrawNoteLines(20, 300, 780, 15);
  SingDrawBeatDelimeters(40, 300, 760, 0);
  SingDrawCzesc(40, 405, 760, 0);

  // draw text
  Lyric.Draw;}

end;*)

procedure TScreenEditHeader.SetRoundButtons;
begin
  if Length(Text[TextTitle].Text) > 0 then
    Statics[StaticTitle].Visible := true
  else
    Statics[StaticTitle].Visible := false;

  if Length(Text[TextArtist].Text) > 0 then
    Statics[StaticArtist].Visible := true
  else
    Statics[StaticArtist].Visible := false;

  if Length(Text[TextMp3].Text) > 0 then
    Statics[StaticMp3].Visible := true
  else 
    Statics[StaticMp3].Visible := false;

  if Length(Text[TextBackground].Text) > 0 then
    Statics[StaticBackground].Visible := true
  else
    Statics[StaticBackground].Visible := false;

  if Length(Text[TextVideo].Text) > 0 then
    Statics[StaticVideo].Visible := true
  else
    Statics[StaticVideo].Visible := false;

  try
    StrToFloat(Text[TextVideoGAP].Text);
    if StrToFloat(Text[TextVideoGAP].Text)<> 0 then
      Statics[StaticVideoGAP].Visible := true
    else
      Statics[StaticVideoGAP].Visible := false;
  except
    Statics[StaticVideoGAP].Visible := false;
  end;

  if LowerCase(Text[TextRelative].Text) = 'yes' then
    Statics[StaticRelative].Visible := true
  else
    Statics[StaticRelative].Visible := false;

  try
    StrToInt(Text[TextResolution].Text);
    if (StrToInt(Text[TextResolution].Text) <> 0) and (StrToInt(Text[TextResolution].Text) >= 1) then
      Statics[StaticResolution].Visible := true
    else
      Statics[StaticResolution].Visible := false;
  except
    Statics[StaticResolution].Visible := false;
  end;

  try
    StrToInt(Text[TextNotesGAP].Text);
    Statics[StaticNotesGAP].Visible := true;
  except
    Statics[StaticNotesGAP].Visible := false;
  end;

  // start
  try
    StrToFloat(Text[TextStart].Text);
    if (StrToFloat(Text[TextStart].Text) > 0) then
      Statics[StaticStart].Visible := true
    else
      Statics[StaticStart].Visible := false;
  except
    Statics[StaticStart].Visible := false;
  end;

  // GAP
  try
    StrToFloat(Text[TextGAP].Text);
    Statics[StaticGAP].Visible := true;
  except
    Statics[StaticGAP].Visible := false;
  end;

  // BPM
  try
    StrToFloat(Text[TextBPM].Text);
    if (StrToFloat(Text[TextBPM].Text) > 0) then
      Statics[StaticBPM].Visible := true
    else
      Statics[StaticBPM].Visible := false;
  except
    Statics[StaticBPM].Visible := false;
  end;

end;

(*procedure TScreenEdit.Finish;
begin
//
end;*)

end.