unit AddWidgetDlg;

interface

uses
  Windows, Messages, SysUtils, Classes, CommCtrl, ComObj, ActiveX, Widgets,
  GdipApi, WinInet, InetThrd, GdipObj, Contnrs, WIniFiles, MMSystem, InetUtil,
  WStrings, ShellApi, ShlObj;

{ AddWidgetDlgProc }
function AddWidgetDlgProc(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT; stdcall;

implementation

uses
  WidgetMain, Variants, DialogRes;

const
  IDS_CAPTION = 4000;
  IDS_GROUPBOX = 4001;
  IDS_TRACKER_ID = 4004;
  IDS_TRACKER_TITLE = 4005;

  IDE_TRACKER_ID = 1002;
  IDE_TRACKER_TITLE = 1003;

{ OnChangeLang }
function OnChangeLang(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT;
begin
  Result := LRESULT(True);
  SetWindowTextW(hDlg, PWideChar(WLang[IDS_CAPTION]));
  SetWindowTextW(GetDlgItem(hDlg, IDS_GROUPBOX), PWideChar(WLang[IDS_GROUPBOX]));
  SetWindowTextW(GetDlgItem(hDlg, IDS_TRACKER_ID), PWideChar(WLang[IDS_TRACKER_ID]));
  SetWindowTextW(GetDlgItem(hDlg, IDS_TRACKER_TITLE), PWideChar(WLang[IDS_TRACKER_TITLE]));
  SetWindowTextW(GetDlgItem(hDlg, IDOK), PWideChar(WLang[ID_OK]));
  SetWindowTextW(GetDlgItem(hDlg, IDCANCEL), PWideChar(WLang[IDCANCEL]));
end;

{ OnInit }
function OnInit(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT;
begin
  Result := LRESULT(True);
  CenterDesktop(hDlg);
  WidgetManager.DialogHandle := hDlg;
  OnChangeLang(hDlg, uMsg, wParam, lParam);
end;

{ OnDestroy }
function OnDestroy(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT;
begin
  Result := LRESULT(True);
  WidgetManager.DialogHandle := 0;
end;

{ OnNotify }
function OnNotify(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT;
begin
  Result := LRESULT(True);
end;

{ OnClicked }
function OnClicked(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT;
begin
  Result := LRESULT(True);
end;

{ OnOK }
function OnOK(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT;
var
  Title, AmungusID: WideString;
  Widget: TWidgetMainForm;
begin
  Result := LRESULT(True);
  AmungusID := GetText(GetDlgItem(hDlg, IDE_TRACKER_ID));
  Title := GetText(GetDlgItem(hDlg, IDE_TRACKER_TITLE));
  {
  if Length(Title) = 0 then
  begin
    MessageBoxW(hDlg, 'Title cannot be empty.', 'Error', MB_ICONHAND);
    SetFocus(GetDlgItem(hDlg, IDE_TRACKER_TITLE));
    Exit;
  end;
  }
  if Length(AmungusID) = 0 then
  begin
    MessageBoxW(hDlg, PWideChar(WLang[IDS_TEXT_1009]),
      PWideChar(WLang[IDS_TEXT_1004]), MB_ICONHAND);
    SetFocus(GetDlgItem(hDlg, IDE_TRACKER_ID));
    Exit;
  end;
  Widget := WidgetManager.GetByAmungusId(AmungusID);
  if Widget <> nil then
  begin
    MessageBoxW(hDlg, PWideChar(WLang[IDS_TEXT_1010]),
      PWideChar(WLang[IDS_TEXT_1004]), MB_ICONHAND);
    SetFocus(GetDlgItem(hDlg, IDE_TRACKER_ID));
    Exit;
  end;
  WidgetManager.AddAmungus(AmungusID, Title, 250);
  EndDialog(hDlg, IDOK);
end;

{ OnCancel }
function OnCancel(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT;
begin
  Result := LRESULT(True);
  EndDialog(hDlg, IDCANCEL);
end;

{ OnSelChange }
function OnSelChange(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT;
begin
  Result := LRESULT(False);
end;

{ OnCommand }
function OnCommand(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT;
begin
  Result := LRESULT(True);
  case HIWORD(wParam) of
    //BN_CLICKED: OnClicked(hDlg, uMsg, wParam, lParam);
    CBN_SELCHANGE: OnSelChange(hDlg, uMsg, wParam, lParam);
  end;
  case LOWORD(wParam) of
    IDOK: Result := OnOK(hDlg, uMsg, wParam, lParam);
    IDCANCEL: Result := OnCancel(hDlg, uMsg, wParam, lParam);
  end;
end;

{ OnCtlColorStatic }
function OnCtlColorStatic(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT;
begin
  Result := LRESULT(False);
end;

{ OnCancelMode }
function OnCancelMode(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT;
begin
  Result := LRESULT(True);
end;

{ AddWidgetDlgProc }
function AddWidgetDlgProc(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT; stdcall;
begin
  Result := LRESULT(False);
  case uMsg of
    WM_INITDIALOG     : Result := OnInit(hDlg, uMsg, wParam, lParam);
    WM_DESTROY        : Result := OnDestroy(hDlg, uMsg, wParam, lParam);
    WM_NOTIFY         : Result := OnNotify(hDlg, uMsg, wParam, lParam);
    WM_COMMAND        : Result := OnCommand(hDlg, uMsg, wParam, lParam);
    WM_CTLCOLORSTATIC : Result := OnCtlColorStatic(hDlg, uMsg, wParam, lParam);
    WM_CANCELMODE     : Result := OnCancelMode(hDlg, uMsg, wParam, lParam);
    WM_CHANGELANG     : Result := OnChangeLang(hDlg, uMsg, wParam, lParam);
  end;
end;

end.
