#include "WidgetMgr.h"
#include "XWidget.h"
#include "Config.h"
#include "XButton.h"
#include "XImage.h"
#include "XStatic.h"
#include "XNoTouch.h"
#include "XSroll.h" CWidgetMgr* CWidgetMgr::g_pUiMgr = NULL; CWidgetMgr::CWidgetMgr()
{
m_deqWnd.clear();
} CWidgetMgr::~CWidgetMgr()
{
m_deqWnd.clear();
} CWidgetMgr* CWidgetMgr::getInstance()
{
if (!g_pUiMgr)
{
g_pUiMgr = new CWidgetMgr();
ASSERT(g_pUiMgr);
}
return g_pUiMgr; } void CWidgetMgr::destroy()
{
SAFE_DELETE(g_pUiMgr);
} bool CWidgetMgr::addWnd( CXWindow* pWnd, PRIORITY tpOrder /*= TP_NORMAL*/ )
{
ASSERT(pWnd);
for (deque<CXWindow*>::iterator it = m_deqWnd.begin(); it != m_deqWnd.end(); it++)
{
if (pWnd == (*it))
{
CCLog("error: CWidgetMgr::addWnd");
ASSERT(false);
}
}
m_deqWnd.push_back(pWnd); //设置窗口的优先级
//数字越低优先级越高
//pWnd->setTouchPriority((TOUCH_PRIORITY)tpOrder); return true;
} void CWidgetMgr::eraseWnd( int nId )
{
for (unsigned int i = ; i < m_deqWnd.size(); i++ )
{
if (nId == m_deqWnd[i]->getId())
{
m_deqWnd.erase(m_deqWnd.begin() + i);
} }
} CXWindow* CWidgetMgr::getWnd( int nId )
{
for (unsigned int i = ; i < m_deqWnd.size(); i++ )
{
if (nId == m_deqWnd[i]->getId())
{
return m_deqWnd[i];
}
} CCLog("error: CWidgetMgr::getWnd");
return NULL;
} CXWindow* CWidgetMgr::loadWidget( CXWidget* pWnd, int nId )
{
vector<WidgetInfo>& vecWidgetInfo = *(CConfig::getInstance()->getWidgetInfo());
for (unsigned int i = ; i < vecWidgetInfo.size(); i++)
{
if (vecWidgetInfo[i].nId == nId)
{
pWnd->init(vecWidgetInfo[i].nId, vecWidgetInfo[i].tPos,
vecWidgetInfo[i].rRect, vecWidgetInfo[i].strPic.c_str());
pWnd->setAnchorPoint(vecWidgetInfo[i].tAnchor); vector<CtrlInfo>& vecCtrlInfo = vecWidgetInfo[i].m_vecCtrlInfo;
for (unsigned int j = ; j < vecCtrlInfo.size(); j++)
{
switch( vecCtrlInfo[j].wType)
{
case CtrlInfo::_IDC_BTN :
{
CXButton* pBtn = CXButton::create(vecCtrlInfo[j].nId, vecCtrlInfo[j].tPos,vecCtrlInfo[j].rRect,
vecCtrlInfo[j].strPic.c_str(), NULL, vecCtrlInfo[j].strAudioFile.c_str());
if (pBtn)
{
pBtn->setAnchorPoint(vecCtrlInfo[j].tAnchor);
pBtn->setBtnType((CXButton::BTN_TYPE)vecCtrlInfo[j].btnType);
pBtn->setBtnState((CXButton::BTN_STATE)vecCtrlInfo[j].btnState);
pWnd->addCtrl(pBtn,);
}
}
break;
case CtrlInfo::_IDC_IMG:
{
CXImage* pImg = CXImage::create(vecCtrlInfo[j].nId, vecCtrlInfo[j].tPos,
vecCtrlInfo[j].rRect, vecCtrlInfo[j].strPic.c_str());
if (pImg)
{
pWnd->setAnchorPoint(vecCtrlInfo[j].tAnchor);
pWnd->addCtrl(pImg,);
} }
break;
case CtrlInfo::_IDC_STA:
{
CXStatic* pSta = CXStatic::create(vecCtrlInfo[j].nId, vecCtrlInfo[j].tPos,vecCtrlInfo[j].rRect,
vecCtrlInfo[j].strFont.c_str(),vecCtrlInfo[j].nFontSize, vecCtrlInfo[j].wAlignment, (CXStatic::LabelType)vecCtrlInfo[j].wLabelType);
if (pSta)
{
pSta->setAnchorPoint(vecCtrlInfo[j].tAnchor);
pSta->setText(vecCtrlInfo[j].strText.c_str());
pSta->setColor(vecCtrlInfo[j].color3B);
pWnd->addCtrl(pSta,);
}
}
break;
case CtrlInfo::_IDC_SROLL:
{
CXSroll* pSroll = CXSroll::create(vecCtrlInfo[j].nId, vecCtrlInfo[j].tPos, vecCtrlInfo[j].rRect, NULL);
if (pSroll)
{
pSroll->setSrollType((CXSroll::XSrollType)vecCtrlInfo[j].wRollType);
pSroll->setBounds(vecCtrlInfo[j].fBounds);
vector<WidgetInfo>& widgetInfo = *CConfig::getInstance()->getSrollInfoByKey(vecCtrlInfo[j].strItem.c_str());
for (vector<WidgetInfo>::iterator it = widgetInfo.begin(); it != widgetInfo.end(); it++)
{
CXWidget* pWidget = CXWidget::create(it->nId, it->tPos, it->rRect, it->strPic.c_str(), NULL);
for (vector<CtrlInfo>::iterator itCtrl = it->m_vecCtrlInfo.begin(); itCtrl != it->m_vecCtrlInfo.end(); itCtrl++)
{
switch( itCtrl->wType)
{
case CtrlInfo::_IDC_BTN :
{
CXButton* pBtn = CXButton::create(itCtrl->nId, itCtrl->tPos,itCtrl->rRect,
itCtrl->strPic.c_str(), NULL, itCtrl->strAudioFile.c_str());
if (pBtn)
{
pBtn->setAnchorPoint(itCtrl->tAnchor);
pBtn->setBtnType((CXButton::BTN_TYPE)itCtrl->btnType);
pBtn->setBtnState((CXButton::BTN_STATE)itCtrl->btnState);
pWidget->addCtrl(pBtn,); pBtn->setTouchEnabled(false);
}
}
break;
case CtrlInfo::_IDC_IMG:
{
CXImage* pImg = CXImage::create(itCtrl->nId, itCtrl->tPos,
itCtrl->rRect, itCtrl->strPic.c_str());
if (pImg)
{
pWnd->setAnchorPoint(itCtrl->tAnchor);
pWidget->addCtrl(pImg,);
}
}
break;
case CtrlInfo::_IDC_STA:
{
CXStatic* pSta = CXStatic::create(itCtrl->nId, itCtrl->tPos,itCtrl->rRect,
itCtrl->strFont.c_str(),itCtrl->nFontSize,itCtrl->wAlignment, (CXStatic::LabelType)itCtrl->wLabelType);
if (pSta)
{
pSta->setAnchorPoint(itCtrl->tAnchor);
pSta->setText(itCtrl->strText.c_str());
pSta->setColor(itCtrl->color3B);
pWidget->addCtrl(pSta,);
}
}
break;
default:
break;
}
}
pSroll->addItem(pWidget, );
}
pWnd->addCtrl(pSroll,);
} }
break;
case CtrlInfo::_IDC_NOT:
{
CXNoTouch* pNot = CXNoTouch::create(vecCtrlInfo[j].nId, vecCtrlInfo[j].tPos,
vecCtrlInfo[j].rRect);
if (pNot)
{
pNot->setNoTouchType((CXNoTouch::NoTouchType)vecCtrlInfo[j].notType);
pNot->setAnchorPoint(vecCtrlInfo[j].tAnchor);
pNot->setTouchPriority((TOUCH_PRIORITY)vecCtrlInfo[j].nPriority);
pWnd->addCtrl(pNot,);
}
}
break;
default:
break;
} }
return pWnd;
}
}
return NULL;
} void CWidgetMgr::clearAllWnd()
{
for(deque<CXWindow*>::iterator it = m_deqWnd.begin(); it != m_deqWnd.end(); it++ )
{
(*it)->removeFromParentAndCleanup(true);
}
m_deqWnd.clear();
}

CWidgetMgr---cpp的更多相关文章

  1. 使用“Cocos引擎”创建的cpp工程如何在VS中调试Cocos2d-x源码

    前段时间Cocos2d-x更新了一个Cocos引擎,这是一个集合源码,IDE,Studio这一家老小的整合包,我们可以使用这个Cocos引擎来创建我们的项目. 在Cocos2d-x被整合到Cocos引 ...

  2. Json CPP 中文支持与入门示例

    在每一个Json Cpp自带*.cpp文件头加上: #include "stdafx.h" 将Json Cpp对自带的头文件的引用修改为单引号方式,例如json_reader.cp ...

  3. cpp 调用python

    在用cpp调用python时, 出现致命错误: no module named site  ,  原因解释器在搜索路径下没有找到python库.可以在调用Py_Initialize前,调用 Py_Se ...

  4. nginx+fastcgi+c/cpp

    参考:http://github.tiankonguse.com/blog/2015/01/19/cgi-nginx-three/ 跟着做了一遍,然后根据记忆写的,不清楚有没错漏步骤,希望多多评论多多 ...

  5. APM程序分析-ArduCopter.cpp

    该文件是APM的主文件. #define SCHED_TASK(func, rate_hz, max_time_micros) SCHED_TASK_CLASS(Copter, &copter ...

  6. APM程序分析-AC_WPNav.cpp

    APM程序分析 主程序在ArduCopter.cpp的loop()函数. /// advance_wp_target_along_track - move target location along ...

  7. Dev Cpp 输出中文字符问题

    最近 c++ 上机作业,vc++6.0 挂了没法用,只好用 Dev Cpp 先顶替一下,然而在遇到输出中文字符的时候出现了乱码的情况,但这种情况又非常诡异.于是简单了解了一下写成此博客. [写在前面] ...

  8. 【安卓】aidl.exe E 10744 10584 io_delegate.cpp:102] Error while creating directories: Invalid argument

    这几天在使用.aidl文件的时候eclipse的控制台总是爆出如下提示: aidl.exe E 10744 10584 io_delegate.cpp:102] Error while creatin ...

  9. Identify Memory Leaks in Visual CPP Applications —— VLD内存泄漏检测工具

    原文地址:http://www.codeproject.com/Articles/1045847/Identify-Memory-Leaks-in-Visual-CPP-Applications 基于 ...

  10. 估计PI——OpenCV&Cpp

    来源:<Learning Image Processing With OpenCV> 算法原理:蒙特卡洛 PI的计算公式: Cpp代码: #include <opencv2/open ...

随机推荐

  1. System.Threading.Tasks并发和异步代码使用

    main.cs System.Threading.Tasks.Parallel.For(0, 10, i =>            {                TestLock test ...

  2. [转]Hamcrest使用方法实例

    assertThat方法需要使用hamcrest的匹配方法: 示例 assertThat( n, allOf( greaterThan(1), lessThan(15) ) ); assertThat ...

  3. 几个有用的javascript(日期比较,数字验证,数字和汉字长度计算)

    1:日期大Js代码 //人员失效职位日期是否小于组织失效日期 function perDateInvalidate(){ var flag = true; //组织失效日期 var orgDate = ...

  4. JAVA反射使用手记

    本篇文章为在工作中使用JAVA反射的经验总结,也可以说是一些小技巧,以后学会新的小技巧,会不断更新.本文不准备讨论JAVA反射的机制,网上有很多,大家随便google一下就可以了. 在开始之前,我先定 ...

  5. [React] Preventing extra re-rendering with function component by using React.memo and useCallback

    Got the idea form this lesson. Not sure whether it is the ncessary, no othere better way to handle i ...

  6. 微信小程序 - 展开收缩列表

    代码源自于:微信小程序示例官方 index.wxml <block wx:for-items="{{list}}" wx:key="{{item.id}}" ...

  7. css3和html5的学习

    本文是此链接的源代码.http://www.imooc.com/learn/77 关于的html5的使用: transition----含义是:过渡的过程,能够对各种属性设置变化. 有5中过渡的形式: ...

  8. volist 自增序号 分页如何实现?

    TP框架模板中如何生成自增数据 {$_GET['p']*10-10+$i} /* 分页序号计算    */ function addnum($k,$num){     return ($k +1 ) ...

  9. Reusing dialogs with a dialog pool--一个sql server service broker例子

    一个sql server service broker例子 ----------------------------------- USE master GO -------------------- ...

  10. [转发]MVC WebAPI get和post请求

    转自:http://www.cnblogs.com/babycool/p/3922738.html 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用J ...