void NFrameBase::SetChildBottommost(NFrameBase* child) { NAssertError(child != NULL, _T("wrong type")); if(child == NULL) return; size_t zorder; FrameList::const_iterator ite = GetChildHelper(child, zorder); NAssertError((ite != childs_.end()), _T("child not exists")); if(ite == childs_.end()) return; if(zorder >= childs_.size() - bottomMostCount_) return; if(zorder < topMostCount_) -- topMostCount_; // move childs_.erase(ite); ite = childs_.begin(); size_t offset = childs_.size() - bottomMostCount_; for(size_t i=0; i<offset; ++ i) { ++ ite; } childs_.insert(ite, child); ++ bottomMostCount_; }
void NWndUi::AttachWnd(HWND hWnd) { NAssertError(hWnd != NULL && ::IsWindow(hWnd), _T("Not A Good Window")); if(hWnd == NULL || !::IsWindow(hWnd)) return; NAssertError(realWindow_ == NULL && ::GetProp(hWnd, _T("NWndUiObj")) == NULL, _T("NWndUi Attached Already")); realWindow_ = hWnd; ::SetProp(realWindow_, _T("NWndUiObj"), reinterpret_cast<HANDLE>(this)); }
size_t NFrameBase::GetChildZOrder(NFrameBase* child) const { NAssertError(child != NULL, _T("wrong type")); if(child == NULL) return static_cast<size_t>(-1); size_t zorder; FrameList::const_iterator ite = GetChildHelper(child, zorder); NAssertError(ite != childs_.end(), _T("child not exists")); return zorder; }
void NFrameBase::SetParentHelper(NFrameBase* child, NFrameBase* newParent) { if(newParent == child->parentFrame_) return; NAssertError(child != NULL, _T("wrong type")); if(child->parentFrame_ != NULL) { NFrameBase* parent = child->parentFrame_; parent->RemoveChild(child); child->parentFrame_ = NULL; parent->Invalidate(); } if(newParent == NULL) { child->Release(); } else { child->parentFrame_ = newParent; child->AddRef(); } child->OnParentChanged(); if(child->parentFrame_) child->parentFrame_->Invalidate(); }
NFrameBase::~NFrameBase() { NAssertError(Util::Misc::IsFlagChecked(frameFlags_, FlagValid), _T("NFrameBase not valid already")); frameFlags_ = 0; parentFrame_ = NULL; RemoveAllChilds(); }
NBaseObj* NReflect::Create(LPCTSTR szNamespace, LPCTSTR szClassName, LPCSTR filePath, int line) { NBaseObj* result = NULL; ClassData* pClassData; if(GetClassData(szNamespace, szClassName, pClassData)) { if(pClassData->flag == None) { result = pClassData->creator(filePath, line); } else if(pClassData->flag == Singleton) { if(pClassData->existObj == NULL) { pClassData->existObj = pClassData->creator(filePath, line); if(pClassData->existObj != NULL) { pClassData->existObj->AddRef(); } } result = pClassData->existObj; } } if(result != NULL) result->AddRef(); NAssertError(result != NULL, _T("Invalid data in NReflect::Create")); return result; }
bool NFrameBase::AddChild(NFrameBase* child) { NAssertError(child != NULL, _T("wrong type")); if(child == NULL) return FALSE; // check if exists size_t zorder; NAssertError(GetChildHelper(child, zorder) == childs_.end(), _T("child already exists")); if(GetChildHelper(child, zorder) != childs_.end()) return true; childs_.push_back(child); SetParentHelper(child, this); return true; }
NEdit* NEdit::SetReadOnly(bool readOnly) { NAssertError(IsWndValid(), _T("call parent->AddChild first")); if(!IsWndValid()) return this; ::SendMessage(realWindow_, EM_SETREADONLY, readOnly, 0); return this; }
NEdit* NEdit::SelectAll() { NAssertError(IsWndValid(), _T("call parent->AddChild first")); if(!IsWndValid()) return this; ::SendMessage(realWindow_, EM_SETSEL, 0, -1); return this; }
bool NFrameBase::AddChild(NFrameBase* child) { NAssertError(child != NULL, _T("wrong type")); if(child == NULL) return FALSE; // check if exists size_t zorder; NAssertError(GetChildHelper(child, zorder) == childs_.end(), _T("child already exists")); FrameList::const_iterator ite = GetChildHelper(child, zorder); for(int i=topMostCount_; i>0; --i) { -- ite; } childs_.insert(ite, child); SetParentHelper(child, this); return true; }
NRender* NUiBus::CreateRender() { NRender* render = NULL; switch(renderType_) { case NRenderType::GdiRender: render = dynamic_cast<GdiRender*>(NNew(GdiRender)); break; } NAssertError(render != NULL, TEXT("unknown type of RenderType: %d"), renderType_); return render; }
bool NImage::LoadImage(LPCTSTR filePath) { NResourceLoader* loader = NUiBus::Instance().GetResourceLoader(); imageDraw_ = loader->LoadImage(filePath); NAssertError(imageDraw_ != NULL, _T("Load Image Failed: %s"), filePath); if(imageDraw_ == NULL) return false; AutoSize(); Start(); return true; }
size_t NFrameBase::SetChildZOrder(NFrameBase* child, size_t zorder) { NAssertError(child != NULL, _T("wrong type")); if(child == NULL) return static_cast<size_t>(-1); size_t tmpZorder; FrameList::const_iterator ite = GetChildHelper(child, tmpZorder); NAssertError(ite != childs_.end(), _T("child not exists")); if(ite == childs_.end()) return static_cast<size_t>(-1); if(tmpZorder < topMostCount_ || tmpZorder >= childs_.size() - bottomMostCount_) return tmpZorder; childs_.erase(ite); zorder = (zorder > childs_.size()) ? childs_.size() : zorder; zorder = (zorder < 0) ? 0 : zorder; ite = childs_.begin(); for(size_t i=0; i<zorder; ++ i) ++ ite; childs_.insert(ite, child); return zorder; }
NEdit* NEdit::ShowTooltip(TooltipIconType iconType, LPCTSTR szTitle, LPCTSTR szText) { NAssertError(IsWndValid(), _T("call parent->AddChild first")); if(!IsWndValid()) return this; nui::Base::NInstPtr<nui::Data::NStringBundle> stringBundle(MemToolParam); Base::NString strTitle = stringBundle->GetString(szTitle); Base::NString strText = stringBundle->GetString(szText); EDITBALLOONTIP tip = {sizeof(EDITBALLOONTIP)}; tip.pszText = strText.GetData(); tip.pszTitle = strTitle.GetData(); tip.ttiIcon = iconType; ::SendMessage(realWindow_, EM_SHOWBALLOONTIP, 0, (LPARAM)&tip); return this; }
void NUiBus::Init(NRenderType::Type type) { Destroy(); renderType_ = type; loader_ = NULL; switch(renderType_) { case NRenderType::GdiRender: loader_ = dynamic_cast<NResourceLoader*>(NNew(GdiResourceLoader)); dynamic_cast<GdiResourceLoader*>(loader_)->Init(); loader_->AddRef(); break; } NAssertError(loader_ != NULL, TEXT("unknown type of LoaderType: %d"), renderType_); }
void NReflect::ReleaseData(NCore* core) { UNREFERENCED_PARAMETER(core); NamespaceInfoMap::iterator iteNamespace = m_mapNamespaceInfo.begin(); for(; iteNamespace != m_mapNamespaceInfo.end(); ++ iteNamespace) { ClassDataMap::iterator iteClass = iteNamespace->second.begin(); ClassDataMap::iterator iteClassEnd = iteNamespace->second.end(); for(; iteClass != iteClassEnd; ++ iteClass) { ClassData& data = iteClass->second; if(data.existObj != NULL) { int refCount = data.existObj->Release(); UNREFERENCED_PARAMETER(refCount); NAssertError(core != data.existObj || refCount == 1, _T("Singleton Object Leak")); } } } }
bool NFrameBase::RemoveChild(NFrameBase* child) { NAssertError(child != NULL, _T("wrong type")); if(child == NULL) return FALSE; size_t zorder; FrameList::const_iterator ite = GetChildHelper(child, zorder); if(ite == childs_.end()) return false; if(zorder < topMostCount_) -- topMostCount_; if(zorder >= childs_.size() - bottomMostCount_) -- bottomMostCount_; childs_.erase(ite); SetParentHelper(child, NULL); return true; }
bool NReflect::RemoveReflect(LPCTSTR szNamespace, LPCTSTR szClassName) { NamespaceInfoMap::iterator iteInfo = m_mapNamespaceInfo.find(szNamespace); if(iteInfo == m_mapNamespaceInfo.end()) return false; ClassDataMap::iterator iteCreator = iteInfo->second.find(szClassName); if(iteCreator == iteInfo->second.end()) return false; ClassData& data = iteCreator->second; if(data.existObj != NULL) { int refCount = data.existObj->Release(); UNREFERENCED_PARAMETER(refCount); NAssertError(refCount == 0, _T("Singleton Object Leak")); } iteInfo->second.erase(iteCreator); return true; }
bool NReflect::RemoveAllReflect(LPCTSTR szNamespace) { NamespaceInfoMap::iterator iteNamespace = m_mapNamespaceInfo.find(szNamespace); if(iteNamespace == m_mapNamespaceInfo.end()) return false; ClassDataMap::iterator iteClass = iteNamespace->second.begin(); ClassDataMap::iterator iteClassEnd = iteNamespace->second.end(); for(; iteClass != iteClassEnd; ++ iteClass) { ClassData& data = iteClass->second; if(data.existObj != NULL) { int refCount = data.existObj->Release(); UNREFERENCED_PARAMETER(refCount); NAssertError(refCount == 0, _T("Singleton Object Leak")); } } m_mapNamespaceInfo.erase(iteNamespace); return true; }
bool NReflect::AddReflect(LPCTSTR szNamespace, LPCTSTR szClassName, ObjectCreator objCreator, ReflectFlag flag) { #ifdef _DEBUG NAssertError(!IsClassExists(szNamespace, szClassName), TEXT("Class has been added already")); #endif NamespaceInfoMap::iterator iteInfo = m_mapNamespaceInfo.find(szNamespace); ClassData classData; classData.creator = objCreator; classData.flag = flag; classData.existObj = NULL; if(iteInfo == m_mapNamespaceInfo.end()) { ClassDataMap classDataMap; classDataMap.insert(std::make_pair(szClassName, classData)); m_mapNamespaceInfo.insert(std::make_pair(szNamespace, classDataMap)); } else { iteInfo->second.insert(std::make_pair(szClassName, classData)); } return true; }
bool NMsgLoop::Loop(HWND window, bool useWindow) { looping_ = true; NAssertError(!useWindow || window != NULL, _T("Wrong parameter in NMsgLoop::Loop")); MSG msg = {0}; BOOL bResult = FALSE; for(;looping_;) { // Idle Handle if(!::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) { DoIdleHandler(0); } bResult = ::GetMessage(&msg, NULL, 0, 0); if(bResult <= 0) break; if(msg.message >= WM_MOUSEFIRST && msg.message <= WM_MOUSELAST || msg.message >= WM_KEYFIRST && msg.message <= WM_KEYLAST) { if(::IsDialogMessage(::GetAncestor(msg.hwnd, GA_ROOT), &msg)) continue; } ::TranslateMessage(&msg); ::DispatchMessage(&msg); if(useWindow && !::IsWindow(window)) break; } if(msg.message == WM_QUIT) { ::PostQuitMessage(msg.wParam); } return bResult >= 0; }
NResourceLoader* NUiBus::GetResourceLoader() { NAssertError(loader_ != NULL, _T("loader_ is NULL in NUiBus::GetLoader")); return loader_; }
bool WindowMap::AddWindow(HWND window, NWindowBase* windowObj) { NAssertError(windowObjMap_.find(window) == windowObjMap_.end(), _T("Window already exists in WindowMap")); std::pair<WindowObjectMap::iterator, bool> result = windowObjMap_.insert(std::make_pair(window, windowObj)); return result.second; }
WindowMap::~WindowMap() { NAssertError(windowObjMap_.empty(), _T("There is window not removed")); }