unit UOptionsWindow;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, ExtCtrls, cUtils, cWinSock, Menus, Spin,
  cWindows, ShellAPI, Buttons, ExtDlgs, ImgList, GIFImage, UTextFileStream,
  ActnList, XPStyleActnCtrls, ActnMan, UMainWindow;

const
  SmileysDefFile = 'Smileys\Smileys.def';

type
  TOptionsWindow = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    Label1: TLabel;
    Button1: TButton;
    Edit1: TEdit;
    TabSheet3: TTabSheet;
    Label2: TLabel;
    TrackBar1: TTrackBar;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    CheckBox4: TCheckBox;
    CheckBox5: TCheckBox;
    CheckBox6: TCheckBox;
    CheckBox7: TCheckBox;
    CheckBox8: TCheckBox;
    Label4: TLabel;
    Edit2: TEdit;
    Label5: TLabel;
    Shape1: TShape;
    ColorDialog1: TColorDialog;
    CheckBox9: TCheckBox;
    CheckBox10: TCheckBox;
    CheckBox11: TCheckBox;
    CheckBox13: TCheckBox;
    CheckBox14: TCheckBox;
    CheckBox15: TCheckBox;
    TabSheet4: TTabSheet;
    Label7: TLabel;
    ListBox1: TListBox;
    GroupBox1: TGroupBox;
    CheckBox16: TCheckBox;
    CheckBox17: TCheckBox;
    Edit3: TEdit;
    Button2: TButton;
    CheckBox18: TCheckBox;
    Edit4: TEdit;
    Button3: TButton;
    CheckBox19: TCheckBox;
    CheckBox20: TCheckBox;
    CheckBox21: TCheckBox;
    Edit5: TEdit;
    OpenDialog1: TOpenDialog;
    Button4: TButton;
    CheckBox22: TCheckBox;
    Edit6: TEdit;
    Label8: TLabel;
    Label10: TLabel;
    SpinEdit3: TSpinEdit;
    Button6: TButton;
    SpinEdit1: TSpinEdit;
    Label6: TLabel;
    Label11: TLabel;
    Button7: TButton;
    SaveDialog1: TSaveDialog;
    Label12: TLabel;
    CheckBox12: TCheckBox;
    SpinEdit4: TSpinEdit;
    GroupBox2: TGroupBox;
    TrackBar2: TTrackBar;
    SpeedButton4: TSpeedButton;
    TabSheet5: TTabSheet;
    Label13: TLabel;
    ListBox2: TListBox;
    GroupBox3: TGroupBox;
    SpeedButton5: TSpeedButton;
    CheckBox23: TCheckBox;
    CheckBox24: TCheckBox;
    Edit7: TEdit;
    Button5: TButton;
    CheckBox25: TCheckBox;
    Edit8: TEdit;
    Button8: TButton;
    CheckBox27: TCheckBox;
    CheckBox28: TCheckBox;
    Edit9: TEdit;
    GroupBox4: TGroupBox;
    SpeedButton3: TSpeedButton;
    SpeedButton2: TSpeedButton;
    SpeedButton1: TSpeedButton;
    Edit10: TEdit;
    FontDialog1: TFontDialog;
    RichEdit1: TRichEdit;
    Label15: TLabel;
    Button9: TButton;
    CheckBox26: TCheckBox;
    ComboBox2: TComboBox;
    CheckBox29: TCheckBox;
    CheckBox30: TCheckBox;
    Edit11: TEdit;
    GroupBox5: TGroupBox;
    Label3: TLabel;
    ComboBox1: TComboBox;
    SpinEdit2: TSpinEdit;
    Label9: TLabel;
    Label14: TLabel;
    ComboBox3: TComboBox;
    SpeedButton7: TSpeedButton;
    Edit12: TEdit;
    Button10: TButton;
    Edit13: TEdit;
    Label16: TLabel;
    Label17: TLabel;
    ComboBox4: TComboBox;
    CheckBox31: TCheckBox;
    Button11: TButton;
    OpenPictureDialog1: TOpenPictureDialog;
    CheckBox32: TCheckBox;
    Edit14: TEdit;
    Button12: TButton;
    CheckBox33: TCheckBox;
    SpeedButton8: TSpeedButton;
    PopupMenu1: TPopupMenu;
    Pidat1: TMenuItem;
    Zmnitjmnoudlosti1: TMenuItem;
    S1: TMenuItem;
    Posunoutudlostnahoru1: TMenuItem;
    Posunoutudlostdol1: TMenuItem;
    Nastudlostisobrzkyzesouboru1: TMenuItem;
    ActionManager1: TActionManager;
    ActionAddUserEvent: TAction;
    ActionDeleteUserEvent: TAction;
    ActionMoveUserEventUp: TAction;
    ActionMoveUserEventDown: TAction;
    ActionImportUserEventList: TAction;
    ActionEditUserEventCaption: TAction;
    ActionInsertToMessage: TAction;
    ActionDeleteAllUserEvents: TAction;
    SpeedButton6: TSpeedButton;
    Smazatvechnyudlosti1: TMenuItem;
    Vloittextdozprvy1: TMenuItem;
    ActionSaveUserEventsList: TAction;
    Uloitseznamudlostdosouboru1: TMenuItem;
    RadioGroup1: TRadioGroup;
    Label18: TLabel;
    Label19: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Shape1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure TrackBar1Change(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Edit2KeyPress(Sender: TObject; var Key: Char);
    procedure ListBox1Click(Sender: TObject);
    procedure CheckBox16Click(Sender: TObject);
    procedure CheckBox19Click(Sender: TObject);
    procedure CheckBox20Click(Sender: TObject);
    procedure CheckBox17Click(Sender: TObject);
    procedure CheckBox18Click(Sender: TObject);
    procedure CheckBox21Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Edit3Change(Sender: TObject);
    procedure Edit4Change(Sender: TObject);
    procedure Edit5Change(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure CheckBox22Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure SpeedButton4Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure Edit12Change(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure CheckBox9Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure ListBox2Click(Sender: TObject);
    procedure CheckBox29Click(Sender: TObject);
    procedure Edit10Change(Sender: TObject);
    procedure CheckBox26Click(Sender: TObject);
    procedure ComboBox2Change(Sender: TObject);
    procedure CheckBox30Click(Sender: TObject);
    procedure Edit11Change(Sender: TObject);
    procedure CheckBox23Click(Sender: TObject);
    procedure CheckBox27Click(Sender: TObject);
    procedure CheckBox24Click(Sender: TObject);
    procedure CheckBox33Click(Sender: TObject);
    procedure Edit7Change(Sender: TObject);
    procedure CheckBox25Click(Sender: TObject);
    procedure Edit8Change(Sender: TObject);
    procedure CheckBox28Click(Sender: TObject);
    procedure Edit9Change(Sender: TObject);
    procedure CheckBox32Click(Sender: TObject);
    procedure Edit14Change(Sender: TObject);
    procedure SpeedButton5Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    procedure Button14Click(Sender: TObject);
    procedure ListBox2DblClick(Sender: TObject);
    procedure ActionAddUserEventExecute(Sender: TObject);
    procedure ActionDeleteUserEventExecute(Sender: TObject);
    procedure ActionMoveUserEventUpExecute(Sender: TObject);
    procedure ActionMoveUserEventDownExecute(Sender: TObject);
    procedure ActionImportUserEventListExecute(Sender: TObject);
    procedure ActionEditUserEventCaptionExecute(Sender: TObject);
    procedure ActionInsertToMessageExecute(Sender: TObject);
    procedure ActionDeleteAllUserEventsExecute(Sender: TObject);
    procedure ActionSaveUserEventsListExecute(Sender: TObject);
    procedure TrackBar2Change(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    AppEvents: array of TAppEvent;
    AppUserEvents: array of TAppUserEvent;
    procedure LoadEventOptions;
    procedure LoadUserEventOptions;
    procedure ListBox2Reload;
    procedure SaveUserEvents;
  end;

var
  OptionsWindow: TOptionsWindow;

implementation

uses
  ULocalization, DateUtils, UJobProgressView, SunriseChatNetworkCoreUnit,
  SunriseChatCoreUnit;

{$R *.dfm}

// Closing dialog and saving options
procedure TOptionsWindow.Button1Click(Sender: TObject);
var
  I: Integer;
  DiffrentAppUserEvents: Boolean;
begin
  with MainWindow, SunriseChatNetworkCore1, OptionsWindow do begin
    if LocalUser.Nick <> Edit1.Text then LocalUser.Nick := Edit1.Text;
    if NetworkInterface <> TNetworkInterface(NetworkInterfaces[ComboBox1.ItemIndex]).GUID then begin
      SelectNetworkInterfaceByGUID(TNetworkInterface(NetworkInterfaces[ComboBox1.ItemIndex]).GUID);
      NetworkInterface := TNetworkInterface(NetworkInterfaces[ComboBox1.ItemIndex]).GUID;
    end;

    NetworkPort:= SpinEdit2.Value;
    if UDPPort <> NetworkPort then begin
      UDPPort := NetworkPort;
      ShowMessage('Změna se projeví až po restartu aplikace!');
      //SunriseChatCore.StartNetwork;
    end;
    LocalUser.Color := Shape1.Brush.Color;
    ShowMainMenu := CheckBox1.Checked;
    MainMenu1.Items.Visible := ShowMainMenu;
    RunOnLogon := CheckBox2.Checked;
    ChangeRunOnLogon;
    MinimizeToTray := CheckBox3.Checked;
    MainWindow.InitTrayIcon;
    StartInTray := CheckBox4.Checked;
    OnTop := CheckBox5.Checked;
    ToolButton5.Marked := OnTop;
    ShowOnMessage := CheckBox6.Checked;
    ShowMessageTime := CheckBox7.Checked;
    TabControl1Change(Self);
    ShowBallonHint := CheckBox8.Checked;
    ServiceFunction := CheckBox9.Checked;
    MinimalizeOnCloseWindow := CheckBox10.Checked;
    ShowRightToolBar := CheckBox11.Checked;
    AutoAwayDelay := SpinEdit1.Value;
    OneAppInstance := CheckBox13.Checked;
    SoundDisable := CheckBox14.Checked;
    SnapWindow := CheckBox15.Checked;
    MainWindow.ScreenSnap := SnapWindow;
    ToolButton4.Marked := SoundDisable;
    LocalUser.DetailInfo := Edit6.Text;
    if MinimumVisibleUsersCount <> SpinEdit4.Value then begin
      MinimumVisibleUsersCount := SpinEdit4.Value;
      ListView1.Items.Clear;
      MainWindow.ShowUserList;
    end;
    SoundVolume := 1000-TrackBar2.Position;
    InvisibledOnStart := CheckBox31.Checked;
    AutoChangeWindowHeight := CheckBox12.Checked;
    AutoChangeWindowHeightDirectionDown := ComboBox4.ItemIndex = 1;
    MinimumVisibleUsersCount := SpinEdit4.Value;
    if MaxNumberOfRoomLines <> SpinEdit3.Value then begin
      MaxNumberOfRoomLines := SpinEdit3.Value;
      MaxRoomLines := MaxNumberOfRoomLines;
      TabControl1Change(Self);
    end;

    Panel5.Visible := ShowRightToolBar;
    //Panel2.Visible := False;
    //Panel2.Visible := True;
    AlphaBlendWindow := TrackBar1.Position;
    MainWindow.AlphaBlendValue := AlphaBlendWindow;
    AlphaBlend := AlphaBlendValue < 255;

//    ChangeMenuVisibility(ShowMainMenu);
    DefaultReason:= Edit2.Text;
    InitTrayIcon;

    BroadcastType := TBroadCastType(RadioGroup1.ItemIndex);
    BroadcastTypeI := RadioGroup1.ItemIndex;

    SetLength(MainWindow.AppEvents,Length(AppEvents));
    for I:= 0 to High(AppEvents) do
      MainWindow.AppEvents[I]:= AppEvents[I];
    MainWindow.SaveAppEventsToRegistry;

    // Save user events
    DiffrentAppUserEvents := False;
    if Length(AppUserEvents) <> Length(MainWindow.AppUserEvents) then
      DiffrentAppUserEvents := True
    else begin
      for I := 0 to High(AppUserEvents) do begin
        if (MainWindow.AppUserEvents[I].ConditionTextEnable <> AppUserEvents[I].ConditionTextEnable) or
        (MainWindow.AppUserEvents[I].ConditionText <> AppUserEvents[I].ConditionText) or
        (MainWindow.AppUserEvents[I].ConditionUserEnable <> AppUserEvents[I].ConditionUserEnable) or
        (MainWindow.AppUserEvents[I].ConditionUser <> AppUserEvents[I].ConditionUser) or
        (MainWindow.AppUserEvents[I].ConditionAppEventEnable <> AppUserEvents[I].ConditionAppEventEnable) or
        (MainWindow.AppUserEvents[I].ConditionAppEvent <> AppUserEvents[I].ConditionAppEvent) or
        (MainWindow.AppUserEvents[I].EventName <> AppUserEvents[I].EventName) or
        (MainWindow.AppUserEvents[I].ShowWindow <> AppUserEvents[I].ShowWindow) or
        (MainWindow.AppUserEvents[I].ShowBalloonHint <> AppUserEvents[I].ShowBalloonHint) or
        (MainWindow.AppUserEvents[I].PlaySound <> AppUserEvents[I].PlaySound) or
        (MainWindow.AppUserEvents[I].ShowAlertIcon <> AppUserEvents[I].ShowAlertIcon) or
        (MainWindow.AppUserEvents[I].IconFile <> AppUserEvents[I].IconFile) or
        (MainWindow.AppUserEvents[I].PlayBeep <> AppUserEvents[I].PlayBeep) or
        (MainWindow.AppUserEvents[I].SoundFile <> AppUserEvents[I].SoundFile) or
        (MainWindow.AppUserEvents[I].ExecuteApplication <> AppUserEvents[I].ExecuteApplication) or
        (MainWindow.AppUserEvents[I].ApplicationFile <> AppUserEvents[I].ApplicationFile) or
        (MainWindow.AppUserEvents[I].ShowImage <> AppUserEvents[I].ShowImage) or
        (MainWindow.AppUserEvents[I].ImageFile <> AppUserEvents[I].ImageFile) then
        DiffrentAppUserEvents := True;
      end;
    end;
    if DiffrentAppUserEvents then begin
      SetLength(MainWindow.AppUserEvents, Length(AppUserEvents));
      for I := 0 to High(AppUserEvents) do
        MainWindow.AppUserEvents[I] := AppUserEvents[I];
      SetLength(MainWindow.AppUserEventsOptions, Length(AppUserEvents));
      MainWindow.AppUserEventsCount := Length(AppUserEvents);

      JobProgressView.AddJob('Načtení z registrů', SaveUserEvents);
      JobProgressView.AddJob('Uložení do registrů', MainWindow.SaveAppUserEventsToRegistry);
      JobProgressView.Start;
      ReloadImages;
    end;
    MainWindow.LanguageIndex := ComboBox3.ItemIndex;
    Localization.Activate(MainWindow.LanguageIndex);
  end;
  MainWindow.Options.SaveToRegistry;
  Close;
end;

procedure TOptionsWindow.FormShow(Sender: TObject);
var
  I: Integer;
begin
  with MainWindow.SunriseChatNetworkCore1 do begin
    Shape1.Brush.Color := LocalUser.Color;
    Edit1.Text := LocalUser.Nick;
    Edit2.Text := MainWindow.DefaultReason;
    Edit6.Text := LocalUser.DetailInfo;
    CheckBox1.Checked := MainWindow.ShowMainMenu;
    CheckBox2.Checked := MainWindow.RunOnLogon;
    CheckBox3.Checked := MainWindow.MinimizeToTray;
    CheckBox4.Checked := MainWindow.StartInTray;
    CheckBox5.Checked := MainWindow.OnTop;
    CheckBox6.Checked := MainWindow.ShowOnMessage;
    CheckBox7.Checked := MainWindow.ShowMessageTime;
    CheckBox8.Checked := MainWindow.ShowBallonHint;
    CheckBox9.Checked := MainWindow.ServiceFunction;
    CheckBox10.Checked := MainWindow.MinimalizeOnCloseWindow;
    CheckBox11.Checked := MainWindow.ShowRightToolBar;
    CheckBox12.Checked := MainWindow.AutoChangeWindowHeight;
    CheckBox13.Checked := MainWindow.OneAppInstance;
    CheckBox14.Checked := MainWindow.SoundDisable;
    CheckBox15.Checked := MainWindow.SnapWindow;
    CheckBox31.Checked := MainWindow.InvisibledOnStart;
    SpinEdit1.Value := AutoAwayDelay;
    SpinEdit3.Value := MainWindow.MaxNumberOfRoomLines;
    SpinEdit2.Value := MainWindow.NetworkPort;
    SpinEdit4.Value := MainWindow.MinimumVisibleUsersCount;
    TrackBar1.Position := MainWindow.AlphaBlendWindow;
    TrackBar2.Position := 1000 - MainWindow.SoundVolume;
    if MainWindow.AutoChangeWindowHeightDirectionDown then
      ComboBox4.ItemIndex := 1 else ComboBox4.ItemIndex:= 0;
    RadioGroup1.ItemIndex := MainWindow.BroadcastTypeI;


    // Fill network interfaces list
    ComboBox1.Items.Clear;
    for I := 0 to NetworkInterfaces.Count-1 do ComboBox1.Items.Add(TNetworkInterface(NetworkInterfaces[I]).Name);
    ComboBox1.ItemIndex := NetworkInterfaces.IndexOf(ActiveNetworkInterface);

    ComboBox3.Items.Clear;
    for I := 0 to High(Localization.Languages) do ComboBox3.Items.Add(Localization.Languages[I].Name);
    if MainWindow.LanguageIndex < ComboBox3.Items.Count then ComboBox3.ItemIndex := MainWindow.LanguageIndex;
    ComboBox1Change(Self);

    // Load AppEvents
   // ShowMessage(IntToStr(Length(MainWindow.AppEvents)));
    SetLength(AppEvents,Length(MainWindow.AppEvents));
    for I := 0 to High(AppEvents) do
      AppEvents[I] := MainWindow.AppEvents[I];
    ListBox1.Items.BeginUpdate;
    ListBox1.Items.Clear;
    for I := 0 to High(AppEvents) do ListBox1.Items.Add(AppEvents[I].EventName);
    ListBox1.Items.EndUpdate;
    ListBox1.ItemIndex := 0;
    ListBox1Click(Self);

    // Load AppUserEvents
    SetLength(AppUserEvents,Length(MainWindow.AppUserEvents));
    for I := 0 to High(AppUserEvents) do
      AppUserEvents[I] := MainWindow.AppUserEvents[I];
    ListBox2.Items.BeginUpdate;
    ListBox2.Items.Clear;
    for I := 0 to High(AppUserEvents) do ListBox2.Items.Add(AppUserEvents[I].EventName);
    ListBox2.Items.EndUpdate;
    ListBox2.ItemIndex := 0;
    ComboBox2.Items.Clear;
    for I := 0 to High(AppEvents) do ComboBox2.Items.Add(AppEvents[I].EventName);
    LoadUserEventOptions;
    SendCommand(scUserInfo);
  end;
end;

procedure TOptionsWindow.Shape1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if ColorDialog1.Execute then Shape1.Brush.Color := ColorDialog1.Color;
end;

procedure TOptionsWindow.TrackBar1Change(Sender: TObject);
begin
  MainWindow.AlphaBlendValue := TrackBar1.Position;
end;

procedure TOptionsWindow.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then begin
    Key := #0;
    Button1Click(Self);
  end;
end;

procedure TOptionsWindow.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then begin
    Key:= #0;
    Button1Click(Self);
  end;
end;

procedure TOptionsWindow.ListBox1Click(Sender: TObject);
begin
  LoadEventOptions;
end;

procedure TOptionsWindow.LoadEventOptions;
begin
  with AppEvents[ListBox1.ItemIndex] do begin
    CheckBox16.Checked := ShowWindow;
    CheckBox19.Checked := ShowAlertIcon;
    Edit12.Text := IconFile;
    CheckBox20.Checked := ShowBalloonHint;
    CheckBox17.Checked := PlaySound;
    CheckBox22.Checked := PlayBeep;
    Edit3.Text := SoundFile;
    CheckBox18.Checked := ExecuteApplication;
    Edit4.Text := ApplicationFile;
    CheckBox21.Checked := ShowMessage;
    Edit5.Text := MessageText;
    FontDialog1.Font := MessageFont;
    RichEdit1.SelectAll;
    RichEdit1.SelAttributes.Name := MessageFont.Name;
    RichEdit1.SelAttributes.Charset := MessageFont.Charset;
    RichEdit1.SelAttributes.Color := MessageFont.Color;
    RichEdit1.SelAttributes.Style := MessageFont.Style;
    RichEdit1.SelAttributes.Size := MessageFont.Size;
    RichEdit1.SelAttributes.Pitch := MessageFont.Pitch;
  end;
end;

procedure TOptionsWindow.CheckBox16Click(Sender: TObject);
begin
  AppEvents[ListBox1.ItemIndex].ShowWindow:= CheckBox16.Checked;
end;

procedure TOptionsWindow.CheckBox19Click(Sender: TObject);
begin
  AppEvents[ListBox1.ItemIndex].ShowAlertIcon:= CheckBox19.Checked;
end;

procedure TOptionsWindow.CheckBox20Click(Sender: TObject);
begin
  AppEvents[ListBox1.ItemIndex].ShowBalloonHint:= CheckBox20.Checked;
end;

procedure TOptionsWindow.CheckBox17Click(Sender: TObject);
begin
  AppEvents[ListBox1.ItemIndex].PlaySound:= CheckBox17.Checked;
end;

procedure TOptionsWindow.CheckBox18Click(Sender: TObject);
begin
  AppEvents[ListBox1.ItemIndex].ExecuteApplication:= CheckBox18.Checked;
end;

procedure TOptionsWindow.CheckBox21Click(Sender: TObject);
begin
  AppEvents[ListBox1.ItemIndex].ShowMessage:= CheckBox21.Checked;
end;

procedure TOptionsWindow.Button2Click(Sender: TObject);
begin
  OpenDialog1.Filter:= 'Soubory WAV|*.wav|Všechny soubory|*.*';
  OpenDialog1.FileName:= Edit3.Text;
  if OpenDialog1.Execute then begin
    CheckBox17.Checked := True;
    Edit3.Text:= OpenDialog1.FileName;
    AppEvents[ListBox1.ItemIndex].SoundFile:= OpenDialog1.FileName;
  end;
end;

procedure TOptionsWindow.Button3Click(Sender: TObject);
begin
  OpenDialog1.Filter:= 'Spustitelné soubory|*.exe|Všechny soubory|*.*';
  OpenDialog1.FileName:= Edit4.Text;
  if OpenDialog1.Execute then begin
    CheckBox18.Checked := True;
    Edit4.Text:= OpenDialog1.FileName;
    AppEvents[ListBox1.ItemIndex].ApplicationFile:= OpenDialog1.FileName;
  end;
end;

procedure TOptionsWindow.Edit3Change(Sender: TObject);
begin
  AppEvents[ListBox1.ItemIndex].SoundFile:= Edit3.Text;
end;

procedure TOptionsWindow.Edit4Change(Sender: TObject);
begin
  AppEvents[ListBox1.ItemIndex].ApplicationFile:= Edit4.Text;
end;

procedure TOptionsWindow.Edit5Change(Sender: TObject);
begin
  AppEvents[ListBox1.ItemIndex].MessageText:= Edit5.Text;
end;

procedure TOptionsWindow.Button4Click(Sender: TObject);
begin
  Close;
end;

procedure TOptionsWindow.CheckBox22Click(Sender: TObject);
begin
  AppEvents[ListBox1.ItemIndex].PlayBeep:= CheckBox22.Checked;
end;

procedure TOptionsWindow.Button6Click(Sender: TObject);
var
  I: Integer;
begin
//  SetLength(AppEvents,0);
  with MainWindow do begin
    Options.Delete;
    for I:= 0 to High(AppEventsOptions) do begin
      AppEventsOptions[I].Delete;
      AppEventsOptions[I].Free;
    end;
    SetLength(AppEventsOptions,0);
    InitSettings;
  end;
  FormShow(Self);
end;

procedure TOptionsWindow.Button7Click(Sender: TObject);
begin
  SaveDialog1.FileName:= 'Nastavení '+ApplicationName+'u '+DateToStr(Now)+'.reg';
  if SaveDialog1.Execute then
    //ShowMessage(IntToStr(
    ShellExecute(0, 'open', PChar('regedit.exe'), PChar('/e "'+SaveDialog1.FileName+'" "HKEY_CURRENT_USER'+RegistryPath+'"'), '', SW_SHOWNORMAL);
end;

procedure TOptionsWindow.FormCreate(Sender: TObject);
begin
  if MainWindow.OnTop then FormStyle := fsStayOnTop
    else FormStyle := fsNormal;
  PageControl1.ActivePageIndex := 0;
end;

procedure TOptionsWindow.SpeedButton4Click(Sender: TObject);
begin
  with MainWindow do try
    MediaPlayer1.FileName:= Edit3.Text;
    MediaPlayer1.Open;
    MediaPlayer1.Play;
  except
    Dialogs.ShowMessage(Localization.Item('AudioFileNotFound'));
  end;
end;

procedure TOptionsWindow.Button9Click(Sender: TObject);
begin
  with AppEvents[ListBox1.ItemIndex] do
  if FontDialog1.Execute then begin
    MessageFont.Name := FontDialog1.Font.Name;
    MessageFont.Charset := FontDialog1.Font.Charset;
    MessageFont.Color := FontDialog1.Font.Color;
    MessageFont.Style := FontDialog1.Font.Style;
    MessageFont.Size := FontDialog1.Font.Size;
    MessageFont.Pitch := FontDialog1.Font.Pitch;

    RichEdit1.SelectAll;
    RichEdit1.SelAttributes.Name := MessageFont.Name;
    RichEdit1.SelAttributes.Charset := MessageFont.Charset;
    RichEdit1.SelAttributes.Color := MessageFont.Color;
    RichEdit1.SelAttributes.Style := MessageFont.Style;
    RichEdit1.SelAttributes.Size := MessageFont.Size;
    RichEdit1.SelAttributes.Pitch := MessageFont.Pitch;
  end;
end;

procedure TOptionsWindow.Button10Click(Sender: TObject);
begin
  OpenDialog1.Filter:= 'Ikony|*.ico|Všechny soubory|*.*';
  OpenDialog1.FileName:= Edit12.Text;
  if OpenDialog1.Execute then begin
    CheckBox19.Checked := True;
    Edit12.Text:= OpenDialog1.FileName;
    AppEvents[ListBox1.ItemIndex].IconFile:= OpenDialog1.FileName;
  end;
end;

procedure TOptionsWindow.Edit12Change(Sender: TObject);
begin
  AppEvents[ListBox1.ItemIndex].IconFile:= Edit12.Text;
end;

procedure TOptionsWindow.ComboBox1Change(Sender: TObject);
begin
  Edit13.Text := TNetworkInterface(MainWindow.SunriseChatNetworkCore1.NetworkInterfaces[ComboBox1.ItemIndex]).IPAddress;
end;

procedure TOptionsWindow.CheckBox9Click(Sender: TObject);
begin
  MainWindow.ServiceFunction:= CheckBox9.Checked;
  SpinEdit2.Visible:= MainWindow.ServiceFunction;
  Label16.Visible:= MainWindow.ServiceFunction;
  Edit13.Visible:= MainWindow.ServiceFunction;
  Label9.Visible:= MainWindow.ServiceFunction;
end;

procedure TOptionsWindow.Button11Click(Sender: TObject);
begin
  OpenPictureDialog1.FileName:= Edit9.Text;
  if OpenPictureDialog1.Execute then begin
    CheckBox28.Checked := True;
    Edit9.Text:= OpenPictureDialog1.FileName;
    AppUserEvents[ListBox2.ItemIndex].SoundFile:= OpenPictureDialog1.FileName;
  end;
end;

procedure TOptionsWindow.LoadUserEventOptions;
begin
  if (ListBox2.ItemIndex>=0) and (ListBox2.ItemIndex < ListBox2.Items.Count) then
  with AppUserEvents[ListBox2.ItemIndex] do begin
    CheckBox29.Checked:= ConditionTextEnable;
    Edit10.Text:= ConditionText;
    CheckBox26.Checked:= ConditionAppEventEnable;
    ComboBox2.ItemIndex:= Integer(ConditionAppEvent);
    CheckBox30.Checked:= ConditionUserEnable;
    Edit11.Text:= ConditionUser;

    CheckBox23.Checked:= ShowWindow;
    CheckBox27.Checked:= ShowBalloonHint;
    CheckBox24.Checked:= PlaySound;
    CheckBox33.Checked:= PlayBeep;
    CheckBox32.Checked:= ShowAlertIcon;
    Edit14.Text:= IconFile;
    Edit7.Text:= SoundFile;
    CheckBox25.Checked:= ExecuteApplication;
    Edit8.Text:= ApplicationFile;
    CheckBox28.Checked:= ShowImage;
    Edit9.Text:= ImageFile;
  end;
end;

procedure TOptionsWindow.ListBox2Click(Sender: TObject);
begin
  LoadUserEventOptions;
end;

procedure TOptionsWindow.CheckBox29Click(Sender: TObject);
begin
  AppUserEvents[ListBox2.ItemIndex].ConditionTextEnable:= CheckBox29.Checked;
end;

procedure TOptionsWindow.Edit10Change(Sender: TObject);
begin
  AppUserEvents[ListBox2.ItemIndex].ConditionText:= Edit10.Text;
end;

procedure TOptionsWindow.CheckBox26Click(Sender: TObject);
begin
  AppUserEvents[ListBox2.ItemIndex].ConditionAppEventEnable:= CheckBox26.Checked;
end;

procedure TOptionsWindow.ComboBox2Change(Sender: TObject);
begin
  AppUserEvents[ListBox2.ItemIndex].ConditionAppEvent:= ComboBox2.ItemIndex;
end;

procedure TOptionsWindow.CheckBox30Click(Sender: TObject);
begin
  AppUserEvents[ListBox2.ItemIndex].ConditionUserEnable:= CheckBox30.Checked;
end;

procedure TOptionsWindow.Edit11Change(Sender: TObject);
begin
  AppUserEvents[ListBox2.ItemIndex].ConditionUser:= Edit11.Text;
end;

procedure TOptionsWindow.CheckBox23Click(Sender: TObject);
begin
  AppUserEvents[ListBox2.ItemIndex].ShowWindow:= CheckBox23.Checked;
end;

procedure TOptionsWindow.CheckBox27Click(Sender: TObject);
begin
  AppUserEvents[ListBox2.ItemIndex].ShowBalloonHint:= CheckBox27.Checked;
end;

procedure TOptionsWindow.CheckBox24Click(Sender: TObject);
begin
  AppUserEvents[ListBox2.ItemIndex].PlaySound:= CheckBox24.Checked;
end;

procedure TOptionsWindow.CheckBox33Click(Sender: TObject);
begin
  AppUserEvents[ListBox2.ItemIndex].PlayBeep:= CheckBox33.Checked;
end;

procedure TOptionsWindow.Edit7Change(Sender: TObject);
begin
  AppUserEvents[ListBox2.ItemIndex].SoundFile:= Edit7.Text;
end;

procedure TOptionsWindow.CheckBox25Click(Sender: TObject);
begin
  AppUserEvents[ListBox2.ItemIndex].ExecuteApplication:= CheckBox25.Checked;
end;

procedure TOptionsWindow.Edit8Change(Sender: TObject);
begin
  AppUserEvents[ListBox2.ItemIndex].ApplicationFile:= Edit8.Text;
end;

procedure TOptionsWindow.CheckBox28Click(Sender: TObject);
begin
  AppUserEvents[ListBox2.ItemIndex].ShowImage:= CheckBox28.Checked;
end;

procedure TOptionsWindow.Edit9Change(Sender: TObject);
begin
  AppUserEvents[ListBox2.ItemIndex].ImageFile:= Edit9.Text;
end;

procedure TOptionsWindow.CheckBox32Click(Sender: TObject);
begin
  AppUserEvents[ListBox2.ItemIndex].ShowAlertIcon:= CheckBox32.Checked;
end;

procedure TOptionsWindow.Edit14Change(Sender: TObject);
begin
  AppUserEvents[ListBox2.ItemIndex].IconFile:= Edit14.Text;
end;

procedure TOptionsWindow.SpeedButton5Click(Sender: TObject);
begin
  with MainWindow do try
    MediaPlayer1.FileName:= Edit7.Text;
    MediaPlayer1.Open;
    MediaPlayer1.Play;
  except
    Dialogs.ShowMessage(Localization.Item('AudioFileNotFound'));
  end;

end;

procedure TOptionsWindow.Button5Click(Sender: TObject);
begin
  OpenDialog1.Filter:= 'Soubory WAV|*.wav|Všechny soubory|*.*';
  OpenDialog1.FileName:= Edit7.Text;
  if OpenDialog1.Execute then begin
    CheckBox24.Checked := True;
    Edit7.Text:= OpenDialog1.FileName;
    AppUserEvents[ListBox2.ItemIndex].SoundFile:= OpenDialog1.FileName;
  end;
end;

procedure TOptionsWindow.Button8Click(Sender: TObject);
begin
  OpenDialog1.Filter:= 'Spustitelné soubory|*.exe|Všechny soubory|*.*';
  OpenDialog1.FileName:= Edit8.Text;
  if OpenDialog1.Execute then begin
    CheckBox25.Checked := True;
    Edit8.Text:= OpenDialog1.FileName;
    AppUserEvents[ListBox2.ItemIndex].ApplicationFile:= OpenDialog1.FileName;
  end;
end;

procedure TOptionsWindow.Button12Click(Sender: TObject);
begin
  OpenDialog1.Filter:= 'Ikony|*.ico|Všechny soubory|*.*';
  OpenDialog1.FileName:= Edit14.Text;
  if OpenDialog1.Execute then begin
    CheckBox32.Checked := True;
    Edit14.Text:= OpenDialog1.FileName;
    AppUserEvents[ListBox2.ItemIndex].IconFile:= OpenDialog1.FileName;
  end;
end;

procedure TOptionsWindow.ListBox2Reload;
var
  I: Integer;
begin
  ListBox2.Items.BeginUpdate;
  ListBox2.Items.Clear;
  for I:= 0 to High(AppUserEvents) do ListBox2.Items.Add(AppUserEvents[I].EventName);
  ListBox2.Items.EndUpdate;
  ListBox2.ItemIndex:= 0;
  LoadUserEventOptions;
  ListBox2Click(Self);
end;

procedure TOptionsWindow.Button14Click(Sender: TObject);
begin
  OpenDialog1.Filter:= 'Definiční soubor|*.def|Všechny soubory|*.*';
  if OpenDialog1.Execute then begin
  end;
end;

procedure TOptionsWindow.ListBox2DblClick(Sender: TObject);
begin
  ActionInsertToMessageExecute(Self);
end;

procedure TOptionsWindow.ActionAddUserEventExecute(Sender: TObject);
begin
  SetLength(AppUserEvents,Length(AppUserEvents)+1);
  AppUserEvents[High(AppUserEvents)].EventName:= 'Nový '+IntToStr(High(AppUserEvents)+1);
  ListBox2Reload;
end;

procedure TOptionsWindow.ActionDeleteUserEventExecute(Sender: TObject);
var
  I: Integer;
begin
  with ListBox2 do if (ItemIndex>=0) and (ItemIndex<Count) then begin
    for I:= ItemIndex+1 to High(AppUserEvents) do
      AppUserEvents[I-1]:= AppUserEvents[I];
    SetLength(AppUserEvents,High(AppUserEvents));
    Items.Delete(ItemIndex);
    ListBox2Reload;
  end;
end;

procedure TOptionsWindow.ActionMoveUserEventUpExecute(Sender: TObject);
var
  TempItem: TAppUserEvent;
  I: Integer;
begin
  with ListBox2 do if (ItemIndex>0) and (ItemIndex<Count) then begin
    I:= ItemIndex;
    TempItem:= AppUserEvents[ItemIndex];
    AppUserEvents[ItemIndex]:= AppUserEvents[ItemIndex-1];
    AppUserEvents[ItemIndex-1]:= TempItem;
    ListBox2Reload;
    ItemIndex:= I-1;
  end;
end;

procedure TOptionsWindow.ActionMoveUserEventDownExecute(Sender: TObject);
var
  I: Integer;
  TempItem: TAppUserEvent;
begin
  with ListBox2 do if (ItemIndex>=0) and (ItemIndex<(Count-1)) then begin
    I:= ItemIndex;
    TempItem:= AppUserEvents[ItemIndex];
    AppUserEvents[ItemIndex]:= AppUserEvents[ItemIndex+1];
    AppUserEvents[ItemIndex+1]:= TempItem;
    ListBox2Reload;
    ItemIndex:= I+1;
  end;
end;

procedure TOptionsWindow.ActionImportUserEventListExecute(Sender: TObject);
const
  Separator = '|';
var
  Row: string;
begin
  OpenDialog1.Filter:= 'Definiční soubor|*.def|Všechny soubory|*.*';
  if OpenDialog1.Execute then begin
    with TTextFileStream.Create(OpenDialog1.FileName,fmOpenRead) do try
      repeat
        Row:= Trim(ReadLn);
        if Row <> '' then begin
          SetLength(AppUserEvents, Length(AppUserEvents)+1);
          with AppUserEvents[High(AppUserEvents)] do begin
            EventName:= Copy(Row, 1, Pos(Separator, Row)-1);
            ConditionTextEnable:= True;
            ConditionText:= EventName;
            ShowImage:= True;
            ImageFile:= ExtractFileDir(OpenDialog1.FileName) + '\' + Copy(Row, Pos(Separator, Row)+1, Length(Row));
          end;
        end;
      until Position = Size;
      ListBox2Reload;
    finally
      Free;
    end;
  end;
end;

procedure TOptionsWindow.ActionEditUserEventCaptionExecute(
  Sender: TObject);
begin
  if ListBox2.Count>0 then
    if not InputQuery('Změna jména události','Zadejte nové jméno uživatelské události:',AppUserEvents[ListBox2.ItemIndex].EventName) then Exit;
  ListBox2Reload;
end;

procedure TOptionsWindow.ActionInsertToMessageExecute(Sender: TObject);
begin
  with MainWindow.ComboBox1 do Text:= Text + ListBox2.Items[ListBox2.ItemIndex];
  Close;
end;

procedure TOptionsWindow.ActionDeleteAllUserEventsExecute(Sender: TObject);
begin
  ListBox2.Items.Clear;
  SetLength(AppUserEvents,0);
  ListBox2Reload;
end;

procedure TOptionsWindow.ActionSaveUserEventsListExecute(Sender: TObject);
const
  Separator = '|';
var
//  Row: string;
  I: Integer;
  FileMode: Word;
begin
  SaveDialog1.Filter:= 'Definiční soubor|*.def|Všechny soubory|*.*';
  if SaveDialog1.Execute then begin
    if FileExists(SaveDialog1.FileName) then FileMode:= fmOpenWrite else
      FileMode:= fmCreate; 
    with TTextFileStream.Create(SaveDialog1.FileName, FileMode) do try
      for I:= 0 to High(AppUserEvents) do with AppUserEvents[I] do
        WriteLn(ConditionText + Separator + ExtractFileName(ImageFile));
    finally
      Free;
    end;
  end;
end;

procedure TOptionsWindow.SaveUserEvents;
begin
    MainWindow.LoadAppUserEventsFromRegistry(True);
end;

procedure TOptionsWindow.TrackBar2Change(Sender: TObject);
begin
  with MainWindow do begin
    MPSetVolume(MediaPlayer1, 1000 - TrackBar2.Position);
  end;
end;

procedure TOptionsWindow.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  with MainWindow do MPSetVolume(MediaPlayer1, SoundVolume);
end;

end.
