areaeditor/
/*
** AreaEditor - a program for editing SMAUG and ROM area files.
** Author: Nick Gammon
** http://www.gammon.com.au/
** See Copyright Notice at the end of AreaEditor.h
*/

#include "stdafx.h"
#include "AreaEditor.h"

#include "AreaEditorDoc.h"

CMUDitem::CMUDitem (CRuntimeClass* pViewClass, CAreaEditorDoc * pDoc) 
                            
  { 
  m_pViewClass = pViewClass; 
  m_pDoc = pDoc;
  m_pTreeCtrl = NULL;
  m_hdlTreeItem = NULL;
  m_bReferenced = false;
  }   // end of constructor


void CMUDitem::Delete (void)
  {

  // find our tree control parent, if any
  HTREEITEM hdlParentItem = m_pTreeCtrl->GetParentItem(m_hdlTreeItem);

  // let our owner know that a sub-item (ie. us) was (about to be) deleted
  if (hdlParentItem)
    {
    CMUDitem * pItem = (CMUDitem *) m_pTreeCtrl->GetItemData (hdlParentItem);
    if (pItem)
      pItem->SubItemDeleted (this);
    }

  // we get into a recursive situation if there is an error in a MUD
  // program found whilst trying to delete a MUD program

  m_pDoc->m_bDoingDelete = true;
  m_pTreeCtrl->DeleteItem (m_hdlTreeItem);
  m_hdlTreeItem = NULL;
  m_pDoc->m_bDoingDelete = false;

  m_pDoc->SetModifiedFlag ();

  delete this;
  } // end of CMUDitem::Delete 

// go to this item in the tree control

void CMUDitem::GoTo (void)
  {

// new cross-area stuff - make sure correct document is visible

		POSITION pos = m_pDoc->GetFirstViewPosition();
		if (pos != NULL)
		{
			CView* pView = m_pDoc->GetNextView(pos); // get first one
			ASSERT_VALID(pView);
			CFrameWnd* pFrame = pView->GetParentFrame();
      // different frame? - activate it
			if (pFrame != (CFrameWnd*)AfxGetApp()->m_pMainWnd)
			{
				ASSERT_KINDOF(CFrameWnd, pFrame);
				pFrame->ActivateFrame();
			}
		}

  // now go to it
  if (m_pTreeCtrl && m_hdlTreeItem)
   m_pTreeCtrl->Select (m_hdlTreeItem, TVGN_CARET);

  }

// do a search for this item
BOOL CMUDitem::Search (const CString strWanted, 
                       const int iFindType,
                       const BOOL bMatchCase)
    {
    
    // the base class will only search summaries and same for detailed search
    if (iFindType != eFindSummary && iFindType != eFindDetail)
      return FALSE;

    CString strFound = Summary ();

    // if not case-sensitive, make upper case
    if (!bMatchCase)
      strFound.MakeUpper ();

    return strFound.Find (strWanted) != -1;

    }   // end of CMUDitem::Search 


void CMUDitem::AddToListBox (CListBox & ctlListBox, 
                             const char * strDescription,
                             const bool bSelectIt)
  {

int nItem;

  // no description supplied, take item summary
  if (strDescription [0] == 0)
    nItem = ctlListBox.AddString (Summary ());
  else
    nItem = ctlListBox.AddString (strDescription);

  // now set item data to this item, if we added it OK
  if (nItem != LB_ERR && nItem != LB_ERRSPACE)
    {
    ctlListBox.SetItemData (nItem, (DWORD) this);

    if (bSelectIt)
      ctlListBox.SetCurSel (nItem);

    }   // end of successful add

  } // end of CMUDitem::AddItemToListBox