コード例 #1
0
void InternalLink::uploadMCF(DesuraId id)
{
	gcRefPtr<UserCore::Item::ItemInfoI> item = GetUserCore()->getItemManager()->findItemInfo( id );
	if (!item && !GetUserCore()->isAdmin())
	{
		//cant upload show prompt
		gcMessageBox(g_pMainApp->getMainWindow(), Managers::GetString(L"#MF_NONDEV_ERROR"), Managers::GetString(L"#MF_PERMISSION_ERRTITLE"));
		return;
	}

	//create new create from
	UploadMCFForm* form = new UploadMCFForm(m_pParent);
	form->setInfo(id);
	form->Show(true);
	form->Raise();
	form->run();

	m_vSubForms.push_back(form);
}
コード例 #2
0
ファイル: DesuraControl.cpp プロジェクト: aromis/desura-app
DesuraControl::~DesuraControl()
{
	auto userCore = GetUserCore();

	if (userCore)
	{
		userCore->getNewAvatarEvent() -= guiDelegate(this, &DesuraControl::onNewAvatar);
		userCore->getAppUpdateProgEvent() -= guiDelegate(this, &DesuraControl::onDesuraUpdate);
	}
}
コード例 #3
0
std::vector<MapElementI*> DesuraJSSettings::getAllCIPItems()
{
	std::vector<UserCore::Misc::CIPItem> list;

	if (GetUserCore())
		GetUserCore()->getCIPManager()->getItemList(list);

	std::vector<MapElementI*> ret;

	for (size_t x=0; x<list.size(); x++)
	{
		std::map<gcString, gcString> map;

		map["name"] = list[x].name;
		map["id"] = list[x].id.toString();

		ret.push_back(new MapElement<std::map<gcString, gcString>>(map));
	}

	return ret;
}
コード例 #4
0
ファイル: gcJSBinding.cpp プロジェクト: EasyCoding/desura-app
gcRefPtr<UserCore::ItemManagerI> DesuraJSBinding::getItemManager()
{
	if (!gs_pItemManager)
	{
		auto uc = GetUserCore();

		if (uc)
			gs_pItemManager = uc->getItemManager();
	}

	return gs_pItemManager;
}
コード例 #5
0
ファイル: ComplexPrompt.cpp プロジェクト: Alasaad/Desurium
void ComplexPrompt::setInfo(DesuraId id)
{
	UserCore::Item::ItemInfoI *item = GetUserCore()->getItemManager()->findItemInfo(id);

	if (!item)
	{
		EndModal(wxID_CANCEL);
		return;
	}

	m_labInfo->SetLabel(gcWString(Managers::GetString(L"#IF_CONFLICT"), item->getName()));
	m_labInfo->Wrap( 350 );
}
コード例 #6
0
ファイル: DesuraControl.cpp プロジェクト: aromis/desura-app
void DesuraControl::onButtonClicked( wxCommandEvent& event )
{
	if (m_bOffline)
		return;

	auto userCore = GetUserCore();

	if (event.GetId() == m_pAvatar->GetId())
	{
		if (userCore)
			g_pMainApp->loadUrl(GetUserCore()->getProfileEditUrl(), COMMUNITY);
	}
	else if (event.GetId() == m_pUsernameBox->GetId())
	{	
		if (userCore)
			g_pMainApp->loadUrl(GetUserCore()->getProfileUrl(), COMMUNITY);
	}
	else
	{
		setActivePage_ID(event.GetId());
	}
}
コード例 #7
0
ファイル: CDKProgress.cpp プロジェクト: EasyCoding/desura-app
void CDKProgress::run()
{
	if (!m_ProgressProxy)
		m_ProgressProxy = gcRefPtr<CDKProgressProxy>::create(this);

	auto userCore = GetUserCore();

	if (!userCore)
		return;

	userCore->getCDKeyManager()->getCDKeyForCurrentBranch(getItemId(), m_ProgressProxy);
	m_bOutstandingRequest = true;
}
コード例 #8
0
void InternalLink::resumeUploadMCF(DesuraId id, LinkArgs args)
{
	std::string key = args.getArgValue("key");
	std::string uid = args.getArgValue("uid");

	auto pForm = findForm<UploadMCFForm>([key, uid](UploadMCFForm* pForm){
		return (!key.empty() && pForm->getKey() == key) || (!uid.empty() && pForm->getUid() == uid);
	}, m_vSubForms);

	if (pForm)
	{
		pForm->Raise();
		return;
	}

	gcRefPtr<UserCore::Item::ItemInfoI> item = GetUserCore()->getItemManager()->findItemInfo( id );
	if (!item && !GetUserCore()->isAdmin())
	{
		//cant upload show prompt
		gcMessageBox(g_pMainApp->getMainWindow(), Managers::GetString(L"#MF_NONDEV_ERROR"), Managers::GetString(L"#MF_PERMISSION_ERRTITLE"));
		return;
	}

	//create new create from
	UploadMCFForm* form = new UploadMCFForm(m_pParent);

	if (!key.empty())
		form->setInfo_key(id, key.c_str());
	else if (!uid.empty())
		form->setInfo_uid(id, uid.c_str());
	else
		form->setInfo(id);

	form->Show(true);
	form->Raise();
	form->run();

	m_vSubForms.push_back(form);
}
コード例 #9
0
ItemToolBarControl::~ItemToolBarControl()
{
	auto userCore = GetUserCore();

	if (userCore)
	{
		userCore->getItemsAddedEvent() -= guiDelegate(this, &ItemToolBarControl::onItemsAdded);
		userCore->getLoginItemsLoadedEvent() -= guiDelegate(this, &ItemToolBarControl::onLoginItemsLoaded);
	}

	if (GetUploadMng())
		GetUploadMng()->getUpdateEvent() -= guiDelegate(this, &ItemToolBarControl::onUploadItemsAdded);
}
コード例 #10
0
void InternalLink::onUploadTrigger(ut& info)
{
	gcTrace("Id: {0}", info.id);

	FINDFORM(info.id, UploadMCFForm);

	gcRefPtr<UserCore::Item::ItemInfoI> item = GetUserCore()->getItemManager()->findItemInfo( info.id );
	if (!item && !GetUserCore()->isAdmin())
	{
		//cant upload show prompt
		gcMessageBox(g_pMainApp->getMainWindow(), Managers::GetString(L"#MF_NONDEV_ERROR"), Managers::GetString(L"#MF_PERMISSION_ERRTITLE"));
		return;
	}

	if (item && !HasAllFlags(item->getStatus(), UserCore::Item::ItemInfoI::STATUS_DEVELOPER) && !GetUserCore()->isAdmin())
	{
		//cant upload show prompt
		gcMessageBox(g_pMainApp->getMainWindow(), Managers::GetString(L"#MF_UPERMISSION_ERROR"), Managers::GetString(L"#MF_PERMISSION_ERRTITLE"));
		return;
	}

	//create new create from
	UploadMCFForm* form = new UploadMCFForm(m_pParent);
	form->setInfo_path(info.id, info.path.c_str());

	if (info.caller)
	{
		wxPoint pos = info.caller->GetScreenPosition();
		form->SetPosition(pos);
	}

	form->Show(true);
	form->Raise();
	form->run();

	m_vSubForms.push_back(form);
}
コード例 #11
0
ファイル: InternalLink.cpp プロジェクト: CSRedRat/desura-app
void InternalLink::showPreorderPrompt(DesuraId id, bool isPreload)
{
	UserCore::Item::ItemInfoI* item = GetUserCore()->getItemManager()->findItemInfo( id );

	if (!item)
		return;

	UserCore::Item::BranchInfoI* bi = item->getCurrentBranch();

	if (!bi)
	{
		for (size_t x=0; x<item->getBranchCount(); x++)
		{
			UserCore::Item::BranchInfoI *temp = item->getBranch(x);

			if (temp->isPreOrder())
			{
				bi = temp;
				break;
			}
		}
	}

	if (!bi)
		return;

	const char* str = bi->getPreOrderExpDate();

	uint32 days;
	uint32 hours;
	std::string time_available = UTIL::MISC::dateTimeToDisplay(str);

	UTIL::MISC::getTimeDiffFromNow(str, days, hours);

	gcString title(Managers::GetString("#IF_PRELOADLAUNCH_TITLE"), item->getName());
	gcString msg(Managers::GetString("#IF_PRELOADLAUNCH"), item->getName(), 
					days, 
						Managers::GetString(isPreload?"#IF_PRELOADLAUNCH_PRELOADED":"#IF_PRELOADLAUNCH_PREORDERED"), 
							time_available, 
								Managers::GetString(days == 1 ? "#IF_PRELOADLAUNCH_WORD_DAY":"#IF_PRELOADLAUNCH_WORD_DAYS"));

	PreloadButtonHelper pobh(id);

	if (pobh.m_bOtherBranches)
		msg += gcString(Managers::GetString("#IF_PRELOADLAUNCH_INSTALLOTHER_INFO"), item->getName());

	gcMessageBox(g_pMainApp->getMainWindow(), msg, title, wxICON_EXCLAMATION|wxCLOSE, &pobh);
}
コード例 #12
0
ファイル: InternalLink.cpp プロジェクト: CSRedRat/desura-app
void InternalLink::showUpdateLog(DesuraId id)
{
	UserCore::Item::ItemInfoI* item = GetUserCore()->getItemManager()->findItemInfo( id );
	if (!item)
	{
		//cant upload show prompt
		gcMessageBox(g_pMainApp->getMainWindow(),  Managers::GetString(L"#MF_UPDATELOG_ITEMERROR"), Managers::GetString(L"#MF_ERRTITLE") );
		return;
	}

	ChangeLogForm* form = new ChangeLogForm(m_pParent);
	regForm(id, form);

	form->setInfo(item);
	form->Show(true);	
	form->Raise();
}
コード例 #13
0
ファイル: CDKeyForm.cpp プロジェクト: Alasaad/Desurium
void CDKeyForm::setInfo(DesuraId id)
{
	m_ItemId = id;

	UserCore::Item::ItemInfoI *item = GetUserCore()->getItemManager()->findItemInfo(id);

	if (!item)
	{	
		Close();
		return;
	}

	this->SetTitle(gcString("{0}: CD Key", item->getName()));

	m_pPage->setInfo(m_ItemId);
	m_pPage->run();
}
コード例 #14
0
void UninstallForm::setInfo(DesuraId id)
{
	m_uiInternId = id;
	UserCore::Item::ItemInfoI *item = GetUserCore()->getItemManager()->findItemInfo(id);

	if (!item)
	{
		Warning("Item was null for uninstall!");
		Close();
	}

	gcWString name(item->getName());

	gcWString title(255, L"{0} {0}", GETSTRING(L"#UNF_TITLE"), name.c_str());
	this->SetTitle(title.c_str());

	showInfo();
}
コード例 #15
0
ファイル: InternalLink.cpp プロジェクト: CSRedRat/desura-app
void InternalLink::showExeSelect(DesuraId id, bool hasSeenCDKey)
{
	FINDFORM(id, ExeSelectForm);

	UserCore::Item::ItemInfoI* item = GetUserCore()->getItemManager()->findItemInfo(id);

	if (!item)
	{
		Warning(gcString("Cant find item for show exe select [{0}].\n", id.toInt64()));
		return;
	}

	ExeSelectForm* form = new ExeSelectForm(m_pParent, hasSeenCDKey);
	m_vSubForms.push_back(form);

	form->setInfo(id);
	form->Show(true);
}
コード例 #16
0
ファイル: InternalLink.cpp プロジェクト: CSRedRat/desura-app
void InternalLink::showGameDisk(DesuraId id, const char* exe, bool cdkey)
{
	FINDFORM(id, GameDiskForm);

	UserCore::Item::ItemInfoI* item = GetUserCore()->getItemManager()->findItemInfo( id );

	if (!item)
	{
		Warning(gcString("Cant find item for show game disk [{0}].\n", id.toInt64()));
		return;
	}

	GameDiskForm* form = new GameDiskForm(m_pParent, exe, cdkey);
	m_vSubForms.push_back(form);

	form->setInfo(id);
	form->Show(true);
}
コード例 #17
0
void InternalLink::showEULA(DesuraId id)
{
	gcRefPtr<UserCore::Item::ItemInfoI> item = GetUserCore()->getItemManager()->findItemInfo( id );
	if (!item)
	{
		//cant upload show prompt
		gcMessageBox(g_pMainApp->getMainWindow(),  Managers::GetString(L"#MF_NAMERESOLVE"), Managers::GetString(L"#MF_ERRTITLE") );
		return;
	}

	EULAForm* form = new EULAForm(m_pParent);
	regForm(id, form);

	if (form->setInfo(id))
	{
		form->Show(true);
		form->Raise();
	}
}
コード例 #18
0
ファイル: InternalLink.cpp プロジェクト: CSRedRat/desura-app
bool InternalLink::checkForPreorder(DesuraId id)
{
	UserCore::Item::ItemInfoI* item = GetUserCore()->getItemManager()->findItemInfo( id );

	if (!item)
		return false;

	if (item->getCurrentBranch())
		return item->getCurrentBranch()->isPreOrderAndNotPreload();


	for (size_t x=0; x<item->getBranchCount(); x++)
	{
		if (item->getBranch(x)->isPreOrderAndNotPreload())
			return true;
	}		

	return false;
}
コード例 #19
0
void CreateProgPage::run()
{
	if (!getItemInfo() && !GetUserCore()->isAdmin())
		return;

	Show(true);
	Raise();

	if (m_pThread)
		return;

	m_pThread = GetThreadManager()->newCreateMCFThread(getItemId(), m_szFolderPath.c_str());

	*m_pThread->getMcfProgressEvent() += guiDelegate(this, &CreateProgPage::onProgress);
	*m_pThread->getErrorEvent() += guiDelegate(this, &CreateProgPage::onError);
	*m_pThread->getCompleteStringEvent() += guiDelegate(this, &CreateProgPage::onComplete);

	m_pThread->start();
}
コード例 #20
0
ファイル: InternalLink.cpp プロジェクト: CSRedRat/desura-app
void InternalLink::showUpdateForm(DesuraId id, Args args)
{
	UserCore::Item::ItemInfoI* item = GetUserCore()->getItemManager()->findItemInfo( id );

	if (!item)
		return;

	if (!HasAllFlags(item->getStatus(), UserCore::Item::ItemInfoI::STATUS_UPDATEAVAL))
		return;
	
	std::string reminder = args.getArgValue("reminder");

	//create new gather info form from
	UpdateInfoForm* form = new UpdateInfoForm(m_pParent);
	regForm(id, form);

	form->setInfo(id, reminder == "true");
	form->Show(true);
}
コード例 #21
0
ファイル: InternalLink.cpp プロジェクト: CSRedRat/desura-app
UI::Forms::ItemForm* InternalLink::showItemForm(DesuraId id, UI::Forms::INSTALL_ACTION action, MCFBranch branch, MCFBuild build, bool showForm)
{
	UserCore::Item::ItemInfoI* item = GetUserCore()->getItemManager()->findItemInfo( id );

	if (!item && action != UI::Forms::INSTALL_ACTION::IA_INSTALL && action != UI::Forms::INSTALL_ACTION::IA_INSTALL_TESTMCF)
		return nullptr;

	UI::Forms::ItemForm *form = findForm<UI::Forms::ItemForm>(id, m_vSubForms);
	
	if (!form)
	{
		form = new UI::Forms::ItemForm(m_pParent);
		form->setItemId(id);
		regForm(id, form);
	}

	form->newAction(action, branch, build, showForm);
	return form;
}
コード例 #22
0
ファイル: InstallPrompt.cpp プロジェクト: Alasaad/Desurium
void InstallPrompt::setInfo(DesuraId id, const char* path)
{
	UserCore::Item::ItemInfoI *item = GetUserCore()->getItemManager()->findItemInfo(id);

	if (!item || !path)
	{
		Close();
		return;
	}

	m_szPath = gcWString(path);

	gcWString title(L"{0} {1}", Managers::GetString(L"#IF_INSTALL"), item->getName());
	gcWString quest(Managers::GetString(L"#IF_EXISTINGFILES"), item->getName());

	SetTitle(title);
	m_labQuestion->SetLabel(quest);


}
コード例 #23
0
ファイル: UploadInfoPage.cpp プロジェクト: aromis/desura-app
void UploadInfoPage::resetAllValues()
{
	m_butUpload->Enable(false);

	gcString filePath;
	gcString cachePath;
	
	auto userCore = GetUserCore();

	if (userCore)
		cachePath = userCore->getMcfCachePath();

	if (!m_pItemInfo)
		filePath = gcString("{0}{1}temp{1}", cachePath, DIRS_STR);
	else
		filePath = gcString("{0}{2}{1}", cachePath, m_pItemInfo->getId().getFolderPathExtension().c_str(), DIRS_STR);

	gcWString wfilePath(filePath);
	m_tbItemFile->SetValue(wfilePath.c_str());
}
コード例 #24
0
ファイル: MainApp.cpp プロジェクト: leayle2a/desura-app
void MainApp::offlineMode()
{
	if (m_iMode == APP_MODE::MODE_OFFLINE)
		return;

	if (m_bLoggedIn)
		logOut(false);

	closeMainForm();

	{
		std::lock_guard<std::mutex> a(m_UserLock);

		gcString path = UTIL::OS::getAppDataPath();

		if (g_pUserHandle)
			g_pUserHandle->destroy();

		g_pUserHandle = (UserCore::UserI*)UserCore::FactoryBuilderUC(USERCORE);
		g_pUserHandle->init(path.c_str());

		try
		{
			g_pUserHandle->getNeedCvarEvent() += delegate(this, &MainApp::onNeedCvar);
			g_pUserHandle->getItemManager()->loadItems();
		}
		catch (gcException &)
		{
			g_pUserHandle->getNeedCvarEvent() -= delegate(this, &MainApp::onNeedCvar);
			g_pUserHandle->logOut();
			g_pUserHandle->destroy();
			throw;
		}
	}

	GetCVarManager()->loadUser(GetUserCore()->getUserId());
	m_iMode = APP_MODE::MODE_OFFLINE;

	showMainWindow();
	m_pInternalLink = new InternalLink(this);
}
コード例 #25
0
ファイル: TBI_UpdateMenu.cpp プロジェクト: boskee/Desurium-1
void TBIUpdateMenu::calcUpdates()
{
	UserCore::UserI* user = GetUserCore();

	if (!user)
	{
		messageCount = 0;
		updateCount = 0;
		cartCount = 0;
	}
	else
	{
		messageCount = user->getPmCount();
		updateCount = user->getUpCount();
		cartCount = user->getCartCount();
	}

	gameUpdateCount = 0;
	modUpdateCount = 0;

	std::vector<UserCore::Item::ItemInfoI*> gList;
	user->getItemManager()->getGameList(gList);

	for (size_t x=0; x<gList.size(); x++)
	{
		if (HasAnyFlags(gList[x]->getStatus(), UserCore::Item::ItemInfoI::STATUS_UPDATEAVAL))
			gameUpdateCount++;

		std::vector<UserCore::Item::ItemInfoI*> mList;
		user->getItemManager()->getModList(gList[x]->getId(), mList);

		for (size_t y=0; y<mList.size(); y++)
		{
			if (HasAnyFlags(mList[y]->getStatus(), UserCore::Item::ItemInfoI::STATUS_UPDATEAVAL))
				gameUpdateCount++;
		}
	}

	uint32 numUpdates = messageCount + updateCount + gameUpdateCount + modUpdateCount;
	m_szMenuName = gcWString(L"{0} ({1})", Managers::GetString(L"#TB_STATUS"), numUpdates);
}
コード例 #26
0
ファイル: CDKInfo.cpp プロジェクト: boskee/Desurium-1
bool CDKInfo::checkForArma(DesuraId id, const char* key)
{
	if (id.getType() != DesuraId::TYPE_GAME)
		return false;

	size_t x=0; 

	while (g_CDKeySpecial[x].item)
	{
		if (g_CDKeySpecial[x].item == id.getItem())
		{
			unsigned char binkey[255] = {0};
			DecodeMsgAMAR2CDKey(binkey, key);

			GetUserCore()->updateBinaryRegKey(g_CDKeySpecial[x].reg, (char*)binkey, 15);
			break;
		}

		x++;
	};

	if (g_CDKeySpecial[x].item == 14558 || g_CDKeySpecial[x].item == 0) //take on heli needs the cd key to be entered as well
		return false;

	if (m_bLaunch)
	{
		wxCommandEvent e(wxEVT_NULL, m_butLaunch->GetId());
		onButtonClicked(e);
		GetParent()->Close();
	}
	else
	{
		m_tbCdKey->SetLabel(Managers::GetString(L"#CDK_REGKEY"));
		m_tbCdKey->SetToolTip(Managers::GetString(L"#CDK_REGKEY_TOOLTIP"));
		m_imgCopyPart->Disable();
		m_imgCopyAll->Disable();
	}

	return true;
}
コード例 #27
0
void InternalLink::showPrompt(DesuraId id, LinkArgs args)
{
	std::string prompt = args.getArgValue("prompt");
	gcRefPtr<UserCore::Item::ItemInfoI> item = GetUserCore()->getItemManager()->findItemInfo( id );

	if (prompt == "update")
	{
		args.push_back("reminder=true");
		showUpdateForm(id, args);
	}
	else if (prompt == "launch")
	{
		LaunchItemDialog* form = new LaunchItemDialog(m_pParent);
		regForm(id, form);

		form->setInfo(item);

		form->Show(true);
		form->Raise();
	}
	else if (prompt == "eula")
	{
		showEULA(id);
	}
	else if (prompt == "preload")
	{
		showPreorderPrompt(id, true);
	}
	else if (prompt == "needtorunfirst")
	{
		std::string parentId = args.getArgValue("parentid");

		DesuraId pid(parentId.c_str(), "games");
		showNeedToRun(id, pid);
	}
	else
	{
		gcAssert(false);
	}
}
コード例 #28
0
ファイル: HtmlTabPage.cpp プロジェクト: aromis/desura-app
HtmlTabPage::HtmlTabPage(wxWindow* parent, gcString homePage, PAGE area) 
	: BaseTabPage(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL|wxNO_BORDER )
	, m_szHomePage(homePage)
	, m_pBSBrowserSizer(new wxBoxSizer(wxVERTICAL))
	, m_SearchArea(area)
{
	SetBackgroundColour(wxColour( 0, 0, 0 ));

	m_pControlBar = std::shared_ptr<HtmlToolBarControl>(new HtmlToolBarControl(parent), [this](HtmlToolBarControl *pControl){
		pControl->onSearchEvent -= guiDelegate(this, &HtmlTabPage::onSearch);
		pControl->onFullSearchEvent -= guiDelegate(this, &HtmlTabPage::onFullSearch);
		pControl->onButtonClickedEvent -= guiDelegate(this, &HtmlTabPage::onButtonClicked);

		if (m_pControlBar)
		{
			m_pWebControl->onPageStartEvent -= delegate(&pControl->onPageStartLoadingEvent);
			m_pWebControl->onPageLoadEvent -= delegate(&pControl->onPageEndLoadingEvent);
		}

		pControl->Destroy();
	});

	m_pControlBar->onSearchEvent += guiDelegate(this, &HtmlTabPage::onSearch);
	m_pControlBar->onFullSearchEvent += guiDelegate(this, &HtmlTabPage::onFullSearch);
	m_pControlBar->onButtonClickedEvent += guiDelegate(this, &HtmlTabPage::onButtonClicked);

	this->SetSizer( m_pBSBrowserSizer );
	this->Layout();

	auto userCore = GetUserCore();

	if (userCore)
	{
		auto cip = userCore->getCIPManager();

		if (cip)
			cip->getItemsUpdatedEvent() += guiDelegate(this, &HtmlTabPage::onCIPUpdate);
	}
}
コード例 #29
0
ファイル: InternalLink.cpp プロジェクト: CSRedRat/desura-app
void InternalLink::showCDKey(DesuraId id, Args args)
{
	FINDFORM(id, CDKeyForm);

	UserCore::Item::ItemInfoI* item = GetUserCore()->getItemManager()->findItemInfo( id );

	if (!item)
	{
		Warning(gcString("Cant find item for show cd key [{0}].\n", id.toInt64()));
		return;
	}

	std::string launch = args.getArgValue("launch");
	std::string exe = args.getArgValue("exe");


	CDKeyForm* form = new CDKeyForm(m_pParent, exe.c_str(), launch == "true");
	m_vSubForms.push_back(form);

	form->setInfo(id);
	form->Show(true);
}
コード例 #30
0
ファイル: CDKeyForm.cpp プロジェクト: CSRedRat/desura-app
CDKeyForm::CDKeyForm(wxWindow* parent, const char* exe, bool launch, UserCore::ItemManagerI* pItemManager) 
	: gcFrame(parent, wxID_ANY, Managers::GetString("#CDK_TITLE"), wxDefaultPosition, wxSize(370,140), wxCAPTION|wxCLOSE_BOX|wxSYSTEM_MENU|wxTAB_TRAVERSAL)
	, m_pItemManager(pItemManager)
{
	if (!m_pItemManager)
		m_pItemManager = GetUserCore()->getItemManager();

	m_bLaunch = launch;
	m_szExe = exe;

	m_pPage = new CDKProgress(this, m_bLaunch);

	m_bsSizer = new wxBoxSizer( wxVERTICAL );
	m_bsSizer->Add(m_pPage, 1, wxEXPAND, 0);

	this->SetSizer( m_bsSizer );
	this->Layout();
	this->Centre( wxBOTH );

	Bind(wxEVT_CLOSE_WINDOW, &CDKeyForm::onFormClose, this);

	centerOnParent();
}