unit UnitfrmSplashscreen;

interface

uses
  SysUtils, Windows, Messages, Classes, Graphics, Controls,
  StdCtrls, ExtCtrls, Forms, SciLexerMemo, JvInspector,
  UnitfrmMain, UnitfrmSettings, UnitfrmSelectColor, UnitfrmSearch,
  UnitfrmReplace, UnitfrmAllFilesForm, UnitfrmGoToLine,
  UnitfrmPluginsIniEditor, UnitfrmSocketsTerminal, UnitfrmInfo, TBX,
  TB2Item, SpTBXItem, Dialogs;

type
  TfrmSplashscreen = class(TForm)
    imgSplashscreen: TImage;
    lblStudio: TLabel;
    tmrHide: TTimer;
    procedure FormShow(Sender: TObject);
    procedure tmrHideTimer(Sender: TObject);
  public
    procedure OnMessage(var Msg: TMsg; var Handled: Boolean);
  end;

var
  frmSplashscreen: TfrmSplashscreen;

implementation

uses UnitCodeExplorerUpdater, UnitCodeSnippets, UnitCodeUtils,
  UnitLanguages, UnitMainTools, UnitReadThread, UnitfrmHudMsgGenerator,
  UnitfrmAutoIndent, UnitfrmHTMLPreview, UnitCodeInspector, UnitPlugins,
  UnitfrmMenuGenerator, UnitfrmMOTDGen, UnitfrmClose, UnitfrmConnGen,
  UnitfrmIRCPaster;


{$R *.DFM}

procedure TfrmSplashscreen.FormShow(Sender: TObject);
var eCache: TStringList;
    i: integer;
    eExt: String;
begin
  Application.ProcessMessages;
  Repaint;
  Application.CreateForm(TfrmMain, frmMain);
  Application.ProcessMessages;
  Repaint;
  Application.CreateForm(TfrmAutoIndent, frmAutoIndent);
  Application.ProcessMessages;
  Repaint;
  Application.CreateForm(TfrmSettings, frmSettings);
  Application.ProcessMessages;
  Repaint;
  Application.CreateForm(TfrmSelectColor, frmSelectColor);
  Application.ProcessMessages;
  Repaint;
  Application.CreateForm(TfrmInfo, frmInfo);
  Application.ProcessMessages;
  Repaint;
  Application.CreateForm(TfrmSearch, frmSearch);
  Application.ProcessMessages;
  Repaint;
  Application.CreateForm(TfrmReplace, frmReplace);
  Application.ProcessMessages;
  Repaint;
  Application.CreateForm(TfrmAllFilesForm, frmAllFilesForm);
  Application.ProcessMessages;
  Repaint;
  Application.CreateForm(TfrmGoToLine, frmGoToLine);
  Application.ProcessMessages;
  Repaint;
  Application.CreateForm(TfrmPluginsIniEditor, frmPluginsIniEditor);
  Application.ProcessMessages;
  Repaint;
  Application.CreateForm(TfrmSocketsTerminal, frmSocketsTerminal);
  Application.ProcessMessages;
  Repaint;
  Application.CreateForm(TfrmHudMsgGenerator, frmHudMsgGenerator);
  Application.ProcessMessages;
  Repaint;
  Application.CreateForm(TfrmMenuGenerator, frmMenuGenerator);
  Application.ProcessMessages;
  Repaint;
  Application.CreateForm(TfrmMOTDGen, frmMOTDGen);
  Application.ProcessMessages;
  Repaint;
  Application.CreateForm(TfrmClose, frmClose);
  Application.ProcessMessages;
  Repaint;
  Application.CreateForm(TfrmConnGen, frmConnGen);
  Application.ProcessMessages;
  Repaint;
  Application.CreateForm(TfrmIRCPaster, frmIRCPaster);
  Application.ProcessMessages;
  Repaint;

  if IEInstalled then begin
    Application.CreateForm(TfrmHTMLPreview, frmHTMLPreview);
    Application.ProcessMessages;
    Repaint;
  end
  else
    frmMain.mnuMOTDGenerator.Enabled := False;

  Application.OnMessage := OnMessage;

  with frmMain do begin
    sciPropertyLoader.FileName := ExtractFilePath(ParamStr(0)) + 'config\Editor.sci';
    if FileExists(sciPropertyLoader.FileName) then
      sciPropertyLoader.Load
    else
      sciPropertyLoader.Save; // create new if it doesnt exist...

    sciEditor.Gutter1.Width := 40;
    sciEditor.Gutter1.MarginType := gutLineNumber;
    LoadCodeSnippets('Pawn');
    ResetToEnglish;
    TJvCustomInspectorData.ItemRegister.Add(TJvInspectorTypeInfoRegItem.Create(TJvInspectorSelectionTextListItem, TypeInfo(TSelectionTextList)));

    eCache := TStringList.Create;
    if FileExists(ExtractFilePath(ParamStr(0)) + 'config\Cache.cfg') then
      eCache.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'config\Cache.cfg');
    for i := 1 to ParamCount do begin
      if eCache.IndexOf(ParamStr(i)) = -1 then
        eCache.Add(ParamStr(i));  
    end;
    
    for i := 0 to eCache.Count -1 do begin
      if FileExists(eCache[i]) then begin
        eExt := ExtractFileExt(eCache[i]);
        eExt := LowerCase(eExt);
        if (eExt = '.sma') or (eExt = '.inc') then // PAWN files
          PAWNProjects.Open(eCache[i])
        else if (eExt = '.cpp') or (eExt = '.h') then // C++ files
          CPPProjects.Open(eCache[i])
        else if (eExt = '.htm') or (eExt = '.html') then // HTML files
          OtherProjects.Open(eCache[i], 'HTML')
        else if (eExt = '.sql') then // SQL databases
          OtherProjects.Open(eCache[i], 'SQL')
        else if (eExt = '.xml') then // XML files
          OtherProjects.Open(eCache[i], 'XML')
        else // Other files and/or Textfiles
          OtherProjects.Open(eCache[i], 'null');
      end;
    end;
    eCache.Free;

    i := 0;
    if PAWNProjects.Count > 1 then begin
      PAWNProjects.Close(0);
      i := 1;
    end;
    if CPPProjects.Count > 1 then begin
      CPPProjects.Close(0);
      i := 1;
    end;
    if OtherProjects.Count > 1 then begin
      OtherProjects.Close(0);
      i := 1;
    end;

    if i = 1 then begin
      ActivateProjects(0, False); // Started := True is already set here
      PAWNProjects.Activate(PAWNProjects.Count -1, False, False);
    end;
    UpdateCI;
    LoadPlugins;
  end;

  tmrHide.Enabled := True;
end;

procedure TfrmSplashscreen.OnMessage(var Msg: TMsg; var Handled: Boolean);
begin
  Handled := not Plugin_AppMsg(Msg.hwnd, Msg.message, Msg.wParam, Msg.lParam, Msg.time, Msg.pt);
end;

procedure TfrmSplashscreen.tmrHideTimer(Sender: TObject);
begin
  Hide;
  frmMain.Show;

  tmrHide.Enabled := False;
end;

end.