Скачиваний:
72
Добавлен:
01.05.2014
Размер:
5.87 Кб
Скачать
// DBKinoView.cpp : implementation of the CDBKinoView class
//

#include "stdafx.h"
#include "DBKino.h"

#include "DBKinoDoc.h"
#include "DBKinoView.h"

#include "EditFilm.h"
#include "FindFilm.h"

#include "CFilm.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CDBKinoView

IMPLEMENT_DYNCREATE(CDBKinoView, CListView)

BEGIN_MESSAGE_MAP(CDBKinoView, CListView)
	ON_COMMAND(ID_VIEW_FILM, OnViewFilm)
	ON_COMMAND(ID_EDIT_ADD_FILM, OnEditAddFilm)
	ON_COMMAND(ID_EDIT_DEL_FILM, OnEditDelFilm)
	ON_COMMAND(ID_EDIT_EDIT_FILM, OnEditEditFilm)
	ON_COMMAND(ID_EDIT_FIND_FILM, OnEditFindFilm)
END_MESSAGE_MAP()

// CDBKinoView construction/destruction

CDBKinoView::CDBKinoView()
{
	m_dwDefaultStyle |= ( LVS_REPORT );
}

CDBKinoView::~CDBKinoView()
{
	POSITION pos = pDoc -> cMapFilm.GetStartPosition();
	while(pos != NULL)
	{
		void* ptr;
		CString _FilmName_;
		CFilm* film;
		pDoc -> cMapFilm.GetNextAssoc(pos, _FilmName_, ptr);
		film = ((CFilm*) ptr);
		delete film;

	}
	pDoc -> cMapFilm.RemoveAll();
}

BOOL CDBKinoView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CListView::PreCreateWindow(cs);
}

void CDBKinoView::OnInitialUpdate()
{
	CListView::OnInitialUpdate();

	pDoc = GetDocument();
	pmyListCtrl = &GetListCtrl();

/*	COLORREF crBkColor = ::GetSysColor(COLOR_ACTIVEBORDER);
    pmyListCtrl->SetTextBkColor(crBkColor);
    ASSERT(pmyListCtrl->GetTextBkColor() == crBkColor);*/

     DWORD ExStyle = pmyListCtrl->GetExtendedStyle();
     ExStyle |= LVS_EX_FULLROWSELECT;
     pmyListCtrl->SetExtendedStyle(ExStyle);

	ColumnCount = 0;

}


// CDBKinoView diagnostics

#ifdef _DEBUG
void CDBKinoView::AssertValid() const
{
	CListView::AssertValid();
}

void CDBKinoView::Dump(CDumpContext& dc) const
{
	CListView::Dump(dc);
}

CDBKinoDoc* CDBKinoView::GetDocument() const // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDBKinoDoc)));
	return (CDBKinoDoc*)m_pDocument;
}
#endif //_DEBUG


// CDBKinoView message handlers

void CDBKinoView::OnViewFilm()
{
		pmyListCtrl -> DeleteAllItems();

        
		for(int Col=ColumnCount; Col>=0; Col-- )
		{
			pmyListCtrl ->DeleteColumn (Col);
		}

    ShowFilmColumn();
	if( (pDoc -> cMapFilm.GetSize()) == 0 )
	{
	CFilm* film = new CFilm();
	CMapStringToPtr* ptrMap = &(pDoc->cMapFilm);
	film->GetFilmInfo(ptrMap);
	delete film;
	}

POSITION p = pDoc -> cMapFilm.GetStartPosition();

CString sFilmName;
void *ptr;
int i = 0, j=1;
CFilm* Film;
 while(p)
  {
		 pDoc -> cMapFilm.GetNextAssoc(p, sFilmName, ptr);
	     Film = ((CFilm *)ptr);

      pmyListCtrl->InsertItem(
		  LVIF_TEXT|LVIF_STATE, i, Film->s_FilmName, 
       //  (i%2)==0 ? LVIS_SELECTED : 
	    0, 	
		LVIS_SELECTED,
         0, 0);

   {
	  pmyListCtrl->SetItemText(i, 1, Film->s_WorkFilm);
	  pmyListCtrl->SetItemText(i, 2, Film->s_Regiessiuer);
	  pmyListCtrl->SetItemText(i, 3, Film->s_Genre);
   }
   i ++ ;
   Film = 0; 
 //  delete film;
   
  }
}

void CDBKinoView::OnEditAddFilm()
{
	EditFilm edit;
	edit.SetDocument(pDoc);
	edit.DoModal();
	OnViewFilm();

}

void CDBKinoView::OnEditDelFilm()
{
	UINT uSelectedCount = pmyListCtrl->GetSelectedCount();
    int  nItem = -1; 
	int* itemCount = new int [uSelectedCount];
    UINT i=0;
	CFilm film;

    if (uSelectedCount > 0)
    {
     for (i=0;i < uSelectedCount;i++)
       {
		 nItem = pmyListCtrl->GetNextItem(nItem, LVNI_SELECTED);
         ASSERT(nItem != -1);
		 itemCount[i] = nItem;
         CString Str =  pmyListCtrl->GetItemText(nItem, 0);
		 
		 film.DelFilmInfo((&(pDoc->cMapFilm)), Str);

         pmyListCtrl->Update(nItem); 
       }
	 for (i=0;i < uSelectedCount;i++)
       {
         pmyListCtrl->DeleteItem( itemCount[i] ); //Только так !
		 for(UINT j=i+1; j<(uSelectedCount); j++)

		 { if(j==uSelectedCount){break;}itemCount[j]--; }
		// pmyListCtrl->Update( itemCount[i] ); 
	   } 
    }
	delete [] itemCount ;
}
void CDBKinoView::ShowFilmColumn()
{
		LV_COLUMN lvc;

	lvc.mask = LVCF_TEXT | LVCF_SUBITEM | LVCF_WIDTH;

	lvc.iSubItem = 0;
	lvc.pszText = _T("Фильм");
	lvc.cx = 170;
	GetListCtrl().InsertColumn(0,&lvc);
	ColumnCount++;
	lvc.iSubItem = 1;
	lvc.pszText = _T("Производство");
	lvc.cx = 125;
	GetListCtrl().InsertColumn(1,&lvc);
	ColumnCount++;
	lvc.iSubItem = 2;
	lvc.pszText = _T("Режиссёр");
	lvc.cx = 140;
	GetListCtrl().InsertColumn(2,&lvc);
	ColumnCount++;
	lvc.iSubItem = 3;
	lvc.pszText = _T("Жанр");
	lvc.cx = 110;
	GetListCtrl().InsertColumn(3,&lvc);
	ColumnCount++;
}

void CDBKinoView::OnEditEditFilm()
{
	UINT uSelectedCount = pmyListCtrl->GetSelectedCount();
    int  nItem = -1; 
    UINT i=0;

    if (uSelectedCount > 0)
    {
		 nItem = pmyListCtrl->GetNextItem(nItem, LVNI_SELECTED);
         ASSERT(nItem != -1);
         CString Str =  pmyListCtrl->GetItemText(nItem, 0);

		   EditFilm edit;
	       edit.SetDocument(pDoc, Str);
	       edit.DoModal();
		   OnViewFilm();

		 
        // pmyListCtrl->Update(nItem); 
    }
}

void CDBKinoView::OnEditFindFilm()
{   
	sFindFilm = new CString();

	FindFilm find;
	find.SetFindInfo( sFindFilm );
	find.DoModal();
	BOOL flag = 0;
      int nItem = 0;
	  UINT ITEM = pmyListCtrl ->GetItemCount();
        for(int i = ITEM; i >= 0; i--)
		{
			nItem = pmyListCtrl ->GetNextItem(nItem, LVNI_ALL );
			CString Str =  pmyListCtrl->GetItemText(nItem, 0);
			if( (Str) ==  *sFindFilm )
			{
                pmyListCtrl->SetItem(nItem, 0, LVIF_STATE, NULL, 0, 
                LVIS_SELECTED, LVIS_SELECTED, 0); 
                pmyListCtrl->EnsureVisible(nItem,TRUE);
				break;
			}
		}
		delete sFindFilm;
}
Соседние файлы в папке DBKino_Last_Release