Скачиваний:
21
Добавлен:
01.04.2014
Размер:
11.82 Кб
Скачать
#include "StdAfx.h"
#include ".\pluginsheet.h"
#include "MVCinDLL.h"
#include "trace_utils.h"
#include "pluginDoc.h"
#include "pluginForm.h"
#include "pluginView.h"

using namespace std;

CMultiDocTemplate* pluginSheet::docTemplate = 0;
bool pluginSheet::_created = false;
bool pluginSheet::_mcreated = false;
MenuPopItemLink* pluginSheet::m_menu = NULL;

pluginSheet::pluginSheet(void)
{
	Sheet::initialize();
}

pluginSheet::~pluginSheet(void)
{
}

Sheet* pluginSheet::clone() const
{
	return (Sheet*) new pluginSheet();
}

bool pluginSheet::create(sc_addr* adrSheet, std::string title, sc_addr markupLayout)
{
	createMVC();
	_created = true;

	if(!_mcreated)
	{	// создать меню плагина
		MenuBar* menu = Shell::getInstance()->m_pMenuBar;
		m_menu = new MenuPopItemLink(0,"pluginMenu");
		menu->addChildItem(m_menu);
		m_menu->addChildItem(new MenuItemLink(m_menu,"pluginMenu item"));
		_mcreated = true;
		Shell::getInstance()->m_pMenuBar->buildMenu();
	}
	init_events();
	Sheet::create(adrSheet, title, markupLayout);
	getPerformerList();
	setComboRating();
	return 1;
}

void pluginSheet::init_events()
{
	m_event_map.clear();
	Shell* sh = Shell::getInstance();
	sh->registerSheet(m_adrSheet,this);
	ui_eventTree* tr= Shell::getInstance()->getEventTree();

	sc_addr ev = tr->findEvent("33231");
	assert(ev);
	m_event_map.insert(tEventMap::value_type(ev,(LPFUNC)&pluginSheet::sayHi));

	sc_addr ev1 = tr->findEvent("323221");
	assert(ev1);
	m_event_map.insert(tEventMap::value_type(ev1,(LPFUNC)&pluginSheet::setPerformerList));

	sc_addr ev2 = tr->findEvent("3232221");
	assert(ev2);
	m_event_map.insert(tEventMap::value_type(ev2,(LPFUNC)&pluginSheet::setAlbumList));

	sc_addr ev3 = tr->findEvent("32322221");
	assert(ev3);
	m_event_map.insert(tEventMap::value_type(ev3,(LPFUNC)&pluginSheet::setCountry));

	sc_addr ev4 = tr->findEvent("323222221");
	assert(ev4);
	m_event_map.insert(tEventMap::value_type(ev4,(LPFUNC)&pluginSheet::setTracksList));

	sc_addr ev5 = tr->findEvent("3232222221");
	assert(ev5);
	m_event_map.insert(tEventMap::value_type(ev5,(LPFUNC)&pluginSheet::setKind));

	sc_addr ev6 = tr->findEvent("32322222221");
	assert(ev6);
	m_event_map.insert(tEventMap::value_type(ev6,(LPFUNC)&pluginSheet::setYearF));

	sc_addr ev7 = tr->findEvent("323222222221");
	assert(ev7);
	m_event_map.insert(tEventMap::value_type(ev7,(LPFUNC)&pluginSheet::setType));

	sc_addr ev8 = tr->findEvent("3232222222221");
	assert(ev8);
	m_event_map.insert(tEventMap::value_type(ev8,(LPFUNC)&pluginSheet::setRewards));

	sc_addr ev9 = tr->findEvent("32322222222221");
	assert(ev9);
	m_event_map.insert(tEventMap::value_type(ev9,(LPFUNC)&pluginSheet::setVolume));

	sc_addr ev10 = tr->findEvent("323222222222221");
	assert(ev10);
	m_event_map.insert(tEventMap::value_type(ev10,(LPFUNC)&pluginSheet::setStyle));

	sc_addr ev11 = tr->findEvent("3232222222222221");
	assert(ev11);
	m_event_map.insert(tEventMap::value_type(ev11,(LPFUNC)&pluginSheet::setLabel));

	sc_addr ev12 = tr->findEvent("32322222222222221");
	assert(ev12);
	m_event_map.insert(tEventMap::value_type(ev12,(LPFUNC)&pluginSheet::setRating));

	sc_addr ev13 = tr->findEvent("323222222222222221");
	assert(ev13);
	m_event_map.insert(tEventMap::value_type(ev13,(LPFUNC)&pluginSheet::setSearchRating));

}

void pluginSheet::getPerformerList()
{
	ui_eventTree* tr= Shell::getInstance()->getEventTree();
	sc_addr event = tr->findEvent("323321");
	Shell* sh = Shell::getInstance();
	Session* s= sh->getSession2();
	SCAddr elset = s->createElement(SC_N_CONST);  
	SCAddr arc = s->createElement(SC_A_CONST);  
	SCAddr arg = this->getSCAddr();
	s->setBeg(arc,elset);
	s->setEnd(arc,arg);
	sh->sendEvent(event,elset);
}
//!!!
void pluginSheet::setComboRating()
{
	m_pView->UpdateComboRating();
}

void pluginSheet::setPerformerList(sc_addr addr)
{
	CArray<sc_string, sc_string&> performerList;
	performerList.FreeExtra();
	Shell* shell = Shell::getInstance();
	sc_session* s = shell->getSession();
	sc_iterator* it = s->create_iterator(sc_constraint_new(CONSTR_3_f_a_a, addr, 0, 0),true);

	for(; !it->is_over(); it->next())
	{
		sc_addr performer_addr = it->value(2);
		sc_string str = s->get_idtf(performer_addr);
		performerList.Add(str);
	}
	
	m_pView->UpdateListBox(performerList);
}

void pluginSheet::setAlbumList(sc_addr addr)
{
	CArray<sc_string, sc_string&> albumList;
	albumList.FreeExtra();
	Shell* shell = Shell::getInstance();
	sc_session* s = shell->getSession();
	sc_iterator* it = s->create_iterator(sc_constraint_new(CONSTR_3_f_a_a, addr, 0, 0),true);

	for(; !it->is_over(); it->next())
	{
		sc_addr album_addr = it->value(2);
		sc_string str = s->get_idtf(album_addr);
		albumList.Add(str);
	}
	
	m_pView->UpdateListBox2(albumList);
}


void pluginSheet::setTracksList(sc_addr addr)
{
	CArray<sc_string, sc_string&> tracksList;
	tracksList.FreeExtra();
	Shell* shell = Shell::getInstance();
	sc_session* s = shell->getSession();
	sc_iterator* it = s->create_iterator(sc_constraint_new(CONSTR_3_f_a_a, addr, 0, 0),true);

	for(; !it->is_over(); it->next())
	{
		sc_addr tracks_addr = it->value(2);
		sc_string str = s->get_idtf(tracks_addr);
		tracksList.Add(str);
	}
	
	m_pView->UpdateListBox3(tracksList);
}

void pluginSheet::setCountry(sc_addr addr)
{
	Shell* shell = Shell::getInstance();
	sc_session* s = shell->getSession();

	sc_addr kind_addr;
	search_oneshot(s, sc_constraint_new(CONSTR_3_f_a_a, addr, 0, 0),true, 1, 2, &kind_addr); 
	sc_string str = s->get_idtf(kind_addr);

	m_pView->UpdateEditCountry(str);
}

void pluginSheet::setKind(sc_addr addr)
{
	Shell* shell = Shell::getInstance();
	sc_session* s = shell->getSession();

	sc_addr kind_addr;
	search_oneshot(s, sc_constraint_new(CONSTR_3_f_a_a, addr, 0, 0),true, 1, 2, &kind_addr); 
	sc_string str = s->get_idtf(kind_addr);

	m_pView->UpdateEditKind(str);
}

void pluginSheet::setYearF(sc_addr addr)
{
	Shell* shell = Shell::getInstance();
	sc_session* s = shell->getSession();

	sc_addr kind_addr;
	search_oneshot(s, sc_constraint_new(CONSTR_3_f_a_a, addr, 0, 0),true, 1, 2, &kind_addr); 
	sc_string str = s->get_idtf(kind_addr);

	m_pView->UpdateEditYearF(str);
}

void pluginSheet::setType(sc_addr addr)
{
	Shell* shell = Shell::getInstance();
	sc_session* s = shell->getSession();

	sc_addr kind_addr;
	search_oneshot(s, sc_constraint_new(CONSTR_3_f_a_a, addr, 0, 0),true, 1, 2, &kind_addr); 
	sc_string str = s->get_idtf(kind_addr);

	m_pView->UpdateEditType(str);
}

void pluginSheet::setRewards(sc_addr addr)
{
	Shell* shell = Shell::getInstance();
	sc_session* s = shell->getSession();

	sc_addr kind_addr;
	search_oneshot(s, sc_constraint_new(CONSTR_3_f_a_a, addr, 0, 0),true, 1, 2, &kind_addr); 
	sc_string str = s->get_idtf(kind_addr);

	m_pView->UpdateEditRewards(str);
}

void pluginSheet::setVolume(sc_addr addr)
{
	Shell* shell = Shell::getInstance();
	sc_session* s = shell->getSession();

	sc_addr kind_addr;
	search_oneshot(s, sc_constraint_new(CONSTR_3_f_a_a, addr, 0, 0),true, 1, 2, &kind_addr); 
	sc_string str = s->get_idtf(kind_addr);

	m_pView->UpdateEditVolume(str);
}

void pluginSheet::setStyle(sc_addr addr)
{
	Shell* shell = Shell::getInstance();
	sc_session* s = shell->getSession();

	sc_addr kind_addr;
	search_oneshot(s, sc_constraint_new(CONSTR_3_f_a_a, addr, 0, 0),true, 1, 2, &kind_addr); 
	sc_string str = s->get_idtf(kind_addr);

	m_pView->UpdateEditStyle(str);
}

void pluginSheet::setLabel(sc_addr addr)
{
	Shell* shell = Shell::getInstance();
	sc_session* s = shell->getSession();

	sc_addr kind_addr;
	search_oneshot(s, sc_constraint_new(CONSTR_3_f_a_a, addr, 0, 0),true, 1, 2, &kind_addr); 
	sc_string str = s->get_idtf(kind_addr);

	m_pView->UpdateEditLabel(str);
}

void pluginSheet::setRating(sc_addr addr)
{
	Shell* shell = Shell::getInstance();
	sc_session* s = shell->getSession();

	sc_addr kind_addr;
	search_oneshot(s, sc_constraint_new(CONSTR_3_f_a_a, addr, 0, 0),true, 1, 2, &kind_addr); 
	sc_string str = s->get_idtf(kind_addr);

	m_pView->UpdateEditRating(str);
}

void pluginSheet::setSearchRating(sc_addr addr)
{
	CArray<sc_string, sc_string&> trackList;
	trackList.FreeExtra();
	Shell* shell = Shell::getInstance();
	sc_session* s = shell->getSession();
	sc_iterator* it = s->create_iterator(sc_constraint_new(CONSTR_3_f_a_a, addr, 0, 0),true);

	for(; !it->is_over(); it->next())
	{
		sc_addr track_addr = it->value(2);
		sc_string str = s->get_idtf(track_addr);
		trackList.Add(str);
	}
	
	m_pView->UpdateSearchRating(trackList);
}

void pluginSheet::sendMyEv(sc_string eventstr, CString param)
{
	ui_eventTree* tr= Shell::getInstance()->getEventTree();
	sc_addr event = tr->findEvent(eventstr);
	Shell* sh = Shell::getInstance();
	Session* s= sh->getSession2();
	SCAddr elset = s->createElement(SC_N_CONST);  
	SCAddr arc = s->createElement(SC_A_CONST);  
	SCAddr arc1 = s->createElement(SC_A_CONST);  
	SCAddr arg = this->getSCAddr();

	sc_string data = "/seb/planimetry/";
	data.append(param.GetString());

	sc_addr node = get_idtf_by_full_uri(system_session, data);
	s->setBeg(arc,elset);
	s->setEnd(arc,arg);
	s->setBeg(arc1,elset);
	s->setEnd(arc1,node);
	sh->sendEvent(event,elset);
}


void pluginSheet::sayHi(sc_addr addr )
{
	AfxMessageBox("Hello SRS World!!!");
}

bool pluginSheet::startSheetCommand(sc_addr data)
{
	tEventMap::iterator it = m_event_map.begin();
	sc_addr addr=0;
	for(;it != m_event_map.end();it++){
		sc_addr type_command  = it->first;
		TRACE_ELEM(type_command);
		if(RV_OK==search_oneshot(system_session,sc_constraint_new(CONSTR_5_f_a_a_a_f,type_command, 0,0,0,data),true,1,2,&addr)){
			LPFUNC f =  (LPFUNC)it->second;
			(this->*f)(addr);
		}
	}
	return true;
}

sc_addr pluginSheet::getType()
{
	return create_el_by_full_uri(system_session, "/seb/testGG", SC_N_CONST);
}

bool pluginSheet::open(sc_addr adrSheet)
{
	return true;
}

bool pluginSheet::activate()
{	// отображение окна и активация листа
	m_pFrame->InitialUpdateFrame(m_pDocument,TRUE);
	return Sheet::activate();
}

bool pluginSheet::close()
{
	Shell::getInstance()->m_pMenuBar->removeChildItem(m_menu);
	m_menu->~MenuPopItemLink();
	_mcreated = false;
	Shell::getInstance()->m_pMenuBar->buildMenu();
	return true;
}

bool pluginSheet::load(void* pData, size_t szData)
{
	return false;
}

bool pluginSheet::save(void* pData, size_t& szData)
{
	return false;
}

void pluginSheet::createMVC()
{
	/// Создание окна и вставка его в окружение

	CHANGE_RESOURCE_MODULE();
	CFrameWnd* mainWnd = (CFrameWnd*)AfxGetMainWnd();
	ASSERT(mainWnd);
	m_pDocument = (pluginDoc*) docTemplate->CreateNewDocument();
	ASSERT_VALID(m_pDocument);
	VERIFY(m_pDocument);
	m_pDocument->OnNewDocument();
	m_pDocument->SetModifiedFlag(FALSE);
	m_pDocument->setSheet(this);

	AfxEnableControlContainer();
	CWnd* pWnd = AfxGetMainWnd();
	extern CWnd* gpMainWnd;
	if (! pWnd) {
		gpMainWnd = pWnd;
	}
	CWinThread* pThread = AfxGetThread();
	if (pThread) {
		if (! pThread->m_pMainWnd) {
			pThread->m_pMainWnd = pWnd;
		} else {
			gpMainWnd = pThread->m_pMainWnd;
		}
	}

	m_pFrame = (pluginForm*) docTemplate->CreateNewFrame(m_pDocument, (CFrameWnd*)pWnd);
	ASSERT_VALID(m_pFrame);


	m_pFrame->InitialUpdateFrame(m_pDocument,TRUE);
	m_pFrame->MDIMaximize();

	//AfxMessageBox("test");
	POSITION pst = m_pDocument->GetFirstViewPosition();
	ASSERT(pst);
	m_pView = (pluginView*) m_pDocument->GetNextView(pst);
	VERIFY(m_pView);
	ASSERT_VALID(m_pView);
	m_pView->setSheet(this);
	
	
	RESTORE_RESOURCE_MODULE();
}
Соседние файлы в папке src