Скачиваний:
72
Добавлен:
01.05.2014
Размер:
6.98 Кб
Скачать
// DBRepertoir.cpp : implementation file
//

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

#include "CSchedule.h"

#include "EditRepertoir.h"

#include "SessionForFilm.h"

#include "SessionByDate.h"
 
//#include "DBKinoView.h"


// DBRepertoir

IMPLEMENT_DYNCREATE(DBRepertoir, CListView)

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

DBRepertoir::~DBRepertoir()
{
	POSITION pos = pDoc -> cMapRep.GetStartPosition();
	while(pos != NULL)
	{
		void* ptr;
		CString _FilmName_;
		CSchedule* schedule;

		pDoc -> cMapRep.GetNextAssoc(pos, _FilmName_, ptr);
		CPtrList* ptrList = ((CPtrList* ) ptr);
		for(POSITION pos = ptrList->GetHeadPosition(); pos!=NULL;)
		{
			ptr = (ptrList -> GetNext(pos));
		    schedule = ((CSchedule*) ptr);
		    delete schedule;
		} 
		ptrList ->RemoveAll();
		delete ptrList;
	}
	pDoc -> cMapRep.RemoveAll();
}

BEGIN_MESSAGE_MAP(DBRepertoir, CListView)
	ON_COMMAND(ID_VIEW_REPERTOIR, OnViewRepertoir)
	ON_COMMAND(ID_EDIT_ADD_REPERTOIR, OnEditAddRepertoir)
	ON_COMMAND(ID_EDIT_EDIT_REPERTOIR, OnEditEditRepertoir)
	ON_COMMAND(ID_EDIT_DEL_REPERTOIR, OnEditDelRepertoir)
	ON_COMMAND(ID_FIND_SESSION_FILM, OnFindSessionFilm)
	ON_COMMAND(ID_FIND_FOR_DATE, OnFindForDate)
END_MESSAGE_MAP()


void DBRepertoir::OnInitialUpdate()
{
	CListView::OnInitialUpdate();
    
//	ptrMap = ((CMapPtrToPtr*)&GetDocument() -> cMapRep);
	pDoc = GetDocument();
 	pmyListCtrl = &GetListCtrl();
	ColumnCount = 0;
     
	 DWORD ExStyle = pmyListCtrl->GetExtendedStyle();
     ExStyle |= LVS_EX_FULLROWSELECT;
     pmyListCtrl->SetExtendedStyle(ExStyle);
}


// DBRepertoir diagnostics

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

void DBRepertoir::Dump(CDumpContext& dc) const
{
	CListView::Dump(dc);
}
CDBKinoDoc* DBRepertoir::GetDocument() const
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDBKinoDoc)));
	return (CDBKinoDoc*)m_pDocument;
}
#endif //_DEBUG


// DBRepertoir message handlers

void DBRepertoir::OnViewRepertoir()
{
		pmyListCtrl -> DeleteAllItems();
		for(int Col=ColumnCount; Col>=0; Col-- )
		{
			pmyListCtrl ->DeleteColumn (Col);
		}
	    ShowRepColumn();

		if( (pDoc -> cMapRep.GetSize()) == 0 )
		{
            CSchedule* schedule = new CSchedule();
	        CMapStringToPtr* ptrMap = &(pDoc -> cMapRep);
	        schedule->GetRepInfo(ptrMap);
	        delete schedule;
		}
	
          POSITION p = pDoc ->  cMapRep.GetStartPosition();

               CString sFilmName;
               void *ptr;
			   CSchedule* Schedule;
               int i = 0;

                      while(p)
                          {						 

		                    pDoc -> cMapRep.GetNextAssoc(p, sFilmName, ptr);
							CPtrList* ptrList = ((CPtrList *)ptr);
						      for( POSITION pos = ptrList->GetHeadPosition(); pos != NULL; )
						        {
							       ptr = (ptrList -> GetNext( pos ));
							       Schedule = ((CSchedule *) ptr ); 
				

                                      pmyListCtrl->InsertItem(
								                      LVIF_TEXT|LVIF_STATE, i, Schedule->s_FilmSession, 
                                                      //  (i%2)==0 ? LVIS_SELECTED : 
	                                                      0, 	
		                                                  LVIS_SELECTED,
                                                          0, 0);
                                        
                                     
										 CString Str;
										 Str = Schedule->d_DateSession.Format("%d.%m.%Y");
										 pmyListCtrl->SetItemText(i, 1, Str);
										 Str = Schedule->d_TimeSession.Format("%H : %M");
	                                     pmyListCtrl->SetItemText(i, 2, Str);
										 Str.Format("%d", Schedule ->i_TicketSession);
	                                     pmyListCtrl->SetItemText(i, 3, Str);
                                     
                                     i ++ ;
						        }
                          }
}
void DBRepertoir::ShowRepColumn()
{
			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 = 90;
	GetListCtrl().InsertColumn(1,&lvc);
	ColumnCount++;
	lvc.iSubItem = 2;
	lvc.pszText = _T("Сеанс");
	lvc.cx = 50;
	GetListCtrl().InsertColumn(2,&lvc);
	ColumnCount++;
	lvc.iSubItem = 3;
	lvc.pszText = _T("Продано билетов");
	lvc.cx = 100;
	GetListCtrl().InsertColumn(3,&lvc);
	ColumnCount++;
}
                                                 
void DBRepertoir::OnEditAddRepertoir()
{
	EditRepertoir rep;
	rep.SetDocument(&(pDoc->cMapRep));
	rep.DoModal();
	OnViewRepertoir();
}

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

    if (uSelectedCount > 0)
    {
		 nItem = pmyListCtrl->GetNextItem(nItem, LVNI_SELECTED);
         ASSERT(nItem != -1);
         CString sFilm =  pmyListCtrl->GetItemText(nItem, 0);
		 CString sDate = pmyListCtrl->GetItemText(nItem, 1);
		 CString sTime = pmyListCtrl->GetItemText(nItem, 2);
		 CString sTicket = pmyListCtrl->GetItemText(nItem, 3);


		   EditRepertoir rep;
		   rep.SetDocument(&(pDoc->cMapRep), sFilm, sDate, sTime, sTicket);
	       rep.DoModal();
		   OnViewRepertoir();
		 
        // pmyListCtrl->Update(nItem); 
    }
}

void DBRepertoir::OnEditDelRepertoir()
{
	UINT uSelectedCount = pmyListCtrl->GetSelectedCount();
    int  nItem = -1; 
	int* itemCount = new int [uSelectedCount];
    UINT i=0;
	CSchedule schedule;

    if (uSelectedCount > 0)
    {
     for (i=0;i < uSelectedCount;i++)
       {
		 nItem = pmyListCtrl->GetNextItem(nItem, LVNI_SELECTED);
         ASSERT(nItem != -1);
		 itemCount[i] = nItem;
         CString sFilm =  pmyListCtrl->GetItemText(nItem, 0);
		 CString sDate = pmyListCtrl->GetItemText(nItem, 1);
		 CString sTime = pmyListCtrl->GetItemText(nItem, 2);
		 CString sTicket = pmyListCtrl->GetItemText(nItem, 3);
		 
		 schedule.DelRepInfo((&(pDoc->cMapRep)), sFilm, sDate, sTime, sTicket);

         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 DBRepertoir::OnFindSessionFilm()
{
	SessionForFilm session;
	session.SetMAP( &(pDoc -> cMapRep) );
	session.DoModal();
	OnViewRepertoir();
}

void DBRepertoir::OnFindForDate()
{
	SessionByDate temp;
	temp.SetMAP( &(pDoc -> cMapRep) );
	temp.DoModal();
}
Соседние файлы в папке DBKino_Last_Release