Добавил:
inrad
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Общая теория систем. Курсовой для ИИ / src / pluginSheet
.cpp#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