#include <owl/pch.h>
#include <stdio.h>
#include "source/buttonx.h"
#include "source/dlg_opt.h"

//Netscape style options dialog
//This displays a treewindow, and an empty control on the right
//This control is called IDC_STATIC_BACKGROUND in this case (it is hidden)
//Child TDialogs are created in SetupWindow() and moved to
//IDC_STATIC_BACKGROUND position. The resource for child dialog should include
//"Is Control" and "Child Window" flag
//see buttonex.zip

DEFINE_RESPONSE_TABLE1(TDialogOptions, TDialog)
  EV_TVN_SELCHANGED(IDC_TREEVIEW1,EvTreeSelChanged),
END_RESPONSE_TABLE;

TDialogOptions::TDialogOptions(TWindow* parent, TResId resId)
  : TDialog(parent, resId), TWindow(parent)
{
  for(int i=0;i<100;i++)
    treeStruct[i]=new struct TreeDataStruct;

  tree=new TTreeWindow(this,IDC_TREEVIEW1);
  tree->Attr.Style &=  ~(WS_VSCROLL);
}

TDialogOptions::~TDialogOptions()
{
  for(int i=0;i<100;i++) delete treeStruct[i];
  Destroy();
}

void TDialogOptions::SetupWindow()
{
  TDialog::SetupWindow();
  DilaogButtons=new TDilaogButtons(this,IDD_BUTTONS);
  DilaogListWindow=new TDilaogListWindow(this,IDD_LISTWINDOW);
  DilaogRichEdit=new TDilaogRichEdit(this,IDD_RICHEDIT);
  DilaogButtons->Create();
  DilaogListWindow->Create();
  DilaogRichEdit->Create();

  //find out where to put the control dialogs
  TRect rc;
  ::GetWindowRect(GetDlgItem(IDC_STATIC_BACKGROUND),&rc);
  TPoint p=rc.TopLeft();
  ScreenToClient(p);

  DilaogButtons->SetWindowPos(0,p.x,p.y,rc.Width(),rc.Height(),SWP_SHOWWINDOW);
  DilaogListWindow->SetWindowPos(0,p.x,p.y,rc.Width(),rc.Height(),SWP_HIDEWINDOW);

  DilaogRichEdit->SetWindowPos(0,p.x,p.y,rc.Width(),rc.Height(),SWP_HIDEWINDOW);

  //setup treewindow
  TTreeNode root = tree->GetRoot();
  TTreeNode node = tree->GetRoot();

  node = root.AddChild(TTreeNode(*tree, "Buttons"));//,0,0));
  TreeSetIndex(node,0);//defined below...

  node = root.AddChild(TTreeNode(*tree, "ODListWindow"));//,0,0));
  TreeSetIndex(node,1);

  node = root.AddChild(TTreeNode(*tree, "RichEditEx"));//,0,0));
  TreeSetIndex(node,2);
}

void TDialogOptions::TreeSetIndex(TTreeNode &treenode, int page)
{
//  assign a page number to each tree node
  int arrayReference=page;
  treeStruct[arrayReference]->Page = page;
  treenode.SetMask(TVIF_PARAM);
  treenode.SetItemData((uint32)treeStruct[arrayReference],true);
}

void TDialogOptions::EvTreeSelChanged(TTwNotify&)
{
  char buf[10];
  strcpy(buf,"");

  uint32 data;
  TTreeNode node=tree->GetSelection();
  if((HTREEITEM)node==NULL) return;
  node.SetMask(TVIF_PARAM);
  node.GetItemData(data);
  int page=((struct TreeDataStruct*)data)->Page;

  DilaogButtons->      ShowWindow((page==0)?SW_SHOW:SW_HIDE);
  DilaogListWindow->  ShowWindow((page==1)?SW_SHOW:SW_HIDE);
  DilaogRichEdit->    ShowWindow((page==2)?SW_SHOW:SW_HIDE);

  switch(page)
  {
    case 0:
      ::SetWindowText(GetDlgItem(IDC_STATIC_HEADING),"Extended Buttons");
      break;
    case 1:
      ::SetWindowText(GetDlgItem(IDC_STATIC_HEADING),"Owner draw list window");
      break;
    case 2:
      ::SetWindowText(GetDlgItem(IDC_STATIC_HEADING),"Rich Edit Example");
      DilaogRichEdit->Edit->Read("readme.rtf");
      break;
    default: break;
  }
}