📄 gsuipanel.cpp
字号:
// GsUIPanel.cpp: implementation of the CGsUIPanel class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
BOOL g_bEditUI = false;
CGsUIPanel::CGsUIPanel(CGsUIPanel* pParent)
:m_image_normal(pParent->m_pEngine),
m_image_normal_touch(pParent->m_pEngine),
m_image_press(pParent->m_pEngine),
m_image_press_touch(pParent->m_pEngine),
m_image_disable(pParent->m_pEngine),
m_image_sense(pParent->m_pEngine),
m_tex_caption(pParent->m_pEngine)
{
m_pParent = pParent;
m_pEngine = pParent->m_pEngine;
m_rcClient = GRECT(0,0,0,0);
m_rcHeader = GRECT(0,0,0,0);
m_pDlg = NULL;
m_panel_array.clear();
m_isDrag = false;
m_isVisible = true;
m_isFocus = false;
m_isEnable = true;
m_is_checked_style = true;
m_isChecked = false;
m_isTouch = false;
m_isPress = false;
m_ptBeginDrag = GPOINT(0,0);
m_can_move = false;
m_key_style = "panel";
m_key_base_style = "panel";
m_key_config = "";
m_key_item = "MAIN";
m_isBackLayer = true;
m_sound_touch = NULL;
m_sound_click = NULL;
m_pImage = NULL;
m_isCaption = FALSE;
m_isNumber = FALSE;
m_isCanEdit = FALSE;
m_caption = "";
memset(&m_font, 0, sizeof(m_font));
m_align = DT_LEFT;
m_color = 0;
m_hfont = NULL;
m_dwPressTime = 0;
m_dwPressCount = 0;
m_bk_color = 0;
}
CGsUIPanel::CGsUIPanel(CGsEngine* pEngine)
:m_image_normal(pEngine),
m_image_normal_touch(pEngine),
m_image_press(pEngine),
m_image_press_touch(pEngine),
m_image_disable(pEngine),
m_image_sense(pEngine),
m_tex_caption(pEngine)
{
m_pParent = NULL;
m_pEngine = pEngine;
m_rcClient = GRECT(0,0,0,0);
m_rcHeader = GRECT(0,0,0,0);
m_pDlg = NULL;
m_panel_array.clear();
m_isDrag = false;
m_isVisible = false;
m_isFocus = false;
m_isEnable = true;
m_is_checked_style = true;
m_isChecked = false;
m_isTouch = false;
m_isPress = false;
m_ptBeginDrag = GPOINT(0,0);
m_can_move = false;
m_key_style = "panel";
m_key_base_style = "panel";
m_key_config = "";
m_key_item = "MAIN";
m_isBackLayer = false;
m_sound_touch = NULL;
m_sound_click = NULL;
m_pImage = NULL;
m_isCaption = FALSE;
m_isNumber = FALSE;
m_isCanEdit = FALSE;
m_caption = "";
memset(&m_font, 0, sizeof(m_font));
m_align = DT_LEFT;
m_color = 0;
m_hfont = NULL;
m_dwPressTime = 0;
m_dwPressCount = 0;
m_bk_color = 0;
}
CGsUIPanel::~CGsUIPanel()
{
Cleanup();
if(m_pEngine)
{
CGsEngine::UI_MAP::iterator it_ = m_pEngine->m_ui_map.find(m_ID);
if(it_!=m_pEngine->m_ui_map.end())
{
m_pEngine->m_ui_map.erase(it_);
}
}
}
VOID CGsUIPanel::Cleanup()
{
if(m_pParent)
{
m_pParent->DelSubPanel(this);
}
m_pImage = NULL;
PANEL_ARRAY::iterator it = m_panel_array.begin();
while(it!=m_panel_array.end())
{
CGsUIPanel* pPanel = *it;
SAFE_DELETE(pPanel);
it = m_panel_array.begin();
}
// m_panel_map.clear();
m_image_normal.Cleanup();
m_image_normal_touch.Cleanup();
m_image_press.Cleanup();
m_image_press_touch.Cleanup();
m_image_sense.Cleanup();
m_image_disable.Cleanup();
SAFE_DELETE(m_sound_touch);
SAFE_DELETE(m_sound_click);
if(m_hfont)
DeleteObject(m_hfont);
m_hfont = NULL;
m_tex_caption.Cleanup();
m_dwPressTime = 0;
m_dwPressCount = 0;
m_bk_color = 0;
}
BOOL CGsUIPanel::Restore()
{
m_rcClient = GRECT(m_rcClient.top_left(), config.GetPoint( m_key_item.c_str(), "size"));
SetVisible(config.GetBOOL( m_key_item.c_str(), "visible"));
SetEnable(config.GetBOOL( m_key_item.c_str(), "enable"));
m_isFocus = false;
m_isTouch = false;
m_isPress = false;
m_ptBeginDrag = GPOINT(0,0);
m_can_move = config.GetBOOL( m_key_item.c_str(), "can_move");
m_rcHeader = config.GetRect( m_key_item.c_str(), "header_rect");
m_isBackLayer = config.GetBOOL( m_key_item.c_str(), "back_layer");
if(m_pParent && FALSE==m_pParent->m_isBackLayer)
m_isBackLayer = FALSE;
m_is_checked_style = config.GetBOOL( m_key_item.c_str(), "checked");
//image
m_image_normal.SetGsEngine(m_pEngine);
m_image_normal.Create(config.GetString( m_key_item.c_str(), "image_normal"));
m_image_normal_touch.SetGsEngine(m_pEngine);
m_image_normal_touch.Create(config.GetString( m_key_item.c_str(), "image_normal_touch"));
//image
m_image_press.SetGsEngine(m_pEngine);
m_image_press.Create(config.GetString( m_key_item.c_str(), "image_press"));
m_image_press_touch.SetGsEngine(m_pEngine);
m_image_press_touch.Create(config.GetString( m_key_item.c_str(), "image_press_touch"));
m_image_disable.SetGsEngine(m_pEngine);
m_image_disable.Create(config.GetString( m_key_item.c_str(), "image_disable"));
m_image_sense.SetGsEngine(m_pEngine);
m_image_sense.Create(config.GetString( m_key_item.c_str(), "image_sense"));
m_sound_touch = m_pEngine->FindSound(config.GetString( m_key_item.c_str(), "sound_touch"));
m_sound_click = m_pEngine->FindSound(config.GetString( m_key_item.c_str(), "sound_click"));
m_key_base_style = config.GetString(m_key_item.c_str(), "style_org");
//caption
m_isCaption = config.GetBOOL( m_key_item.c_str(), "is_caption");
m_isCanEdit = config.GetBOOL( m_key_item.c_str(), "can_edit");
m_caption = config.GetString( m_key_item.c_str(), "caption");
m_align = config.GetLong( m_key_item.c_str(), "align");
config.GetFont(m_font, m_key_item.c_str(), "font");
SetFont();
m_color = config.GetColor( m_key_item.c_str(), "color");
if(m_isCaption && m_rcHeader.width()>0 && m_rcHeader.height()>0)
{
m_tex_caption.CreateEx(m_rcHeader.width(), m_rcHeader.height());
UpdateCaption();
}
m_bk_color = config.GetColor( m_key_item.c_str(), "bk_color");
// m_font = CGsFunc::Font_QuickCreateFont(size_font, config.GetString("FONT", "font") );
//item
if(m_key_item=="MAIN")
{
for(int i=1;;i++)
{
char szSection[20];
char szItem[100];
sprintf(szSection, "ITEM_%d", i);
sprintf(szItem, "item_%d_style", i);
KEY strStyle = config.GetString(m_key_item.c_str(), szItem);
if(strStyle.empty())
break;
sprintf(szItem, "item_%d_config", i);
KEY key_cfg = config.GetString(m_key_item.c_str(), szItem);
if(key_cfg=="")
{
key_cfg = m_key_config;
}
if(key_cfg!=m_key_config)
{
sprintf(szSection, "MAIN");
}
CGsUIPanel* pSub= m_pEngine->UI_New_Register(this, strStyle);;
if(pSub==NULL)
{
if(g_bEditUI)
{
CConfig cfg;
sprintf(szItem, "item_%d_config", i);
m_pEngine->LoadConfig(cfg, config.GetString(m_key_item.c_str(), szItem));
pSub= m_pEngine->UI_New_Register(this, cfg.GetString(szSection, "style_org"));
pSub->m_key_style = strStyle;
}
else
{
}
}
// else
// {
// pSub= m_pEngine->UI_New_Register(this, strStyle);
// }
if(NULL==pSub)
break;
sprintf(szItem, "item_%d_name", i);
KEY key_name = config.GetString(m_key_item.c_str(), szItem);
sprintf(szItem, "item_%d_pos", i);
if(FALSE==pSub->Create(key_cfg.c_str(),
szSection,
config.GetPoint(m_key_item.c_str(), szItem),
key_name.c_str()))
{
}
}
}
SetTopMost();
OnTouch(m_isTouch);
return TRUE;
}
BOOL CGsUIPanel::Create(const char* strConfig, LPCSTR strItem, GPOINT point, const char* strName)
{
if (strConfig==m_key_config)
{
return TRUE;
}
Cleanup();
if(m_pParent)
{
m_pEngine = m_pParent->m_pEngine;
m_pParent->AddSubPanel(this);
}
if(NULL==m_pEngine)
{
return FALSE;
}
for(int id=100; id<9999; id++)
{
if(m_pEngine->m_ui_map.find(id)==m_pEngine->m_ui_map.end())
{
m_ID = id;
m_pEngine->m_ui_map.insert(CGsEngine::UI_MAP::value_type(m_ID, this));
break;
}
}
m_rcClient.left = point.x;
m_rcClient.top = point.y;
if(strConfig==NULL)
return TRUE;
m_pEngine->LoadConfig(config, strConfig);
m_key_config = strConfig;
if(m_key_config=="")
return TRUE;
if(strName==NULL || strName[0]==0)
m_key = strConfig;
else
m_key = strName;
// config.SetINIFile(strConfig);
m_key_item = strItem;
m_rcClient = GRECT(point, GPOINT(0,0));
return Restore();
}
BOOL CGsUIPanel::SaveConfig(const char *strConfig)
{
if(strConfig)
{
FILE* file= fopen(strConfig, "w");
if(NULL==file)
{
return FALSE;
}
fclose(file);
CConfig cfg(strConfig);
return OnSaveConfig(cfg);
}
else
{
return OnSaveConfig(config);
}
}
BOOL CGsUIPanel::OnSaveConfig(CConfig &cfg)
{
//cfg.SetINIFile(config.GetINIFile());
if(!cfg.WriteString("UI", "GLOBALS", "config"))
return FALSE;
if(!cfg.WriteString(m_key_base_style.c_str(), m_key_item.c_str(), "style_org"))
return FALSE;
if(!cfg.WritePoint(GPOINT(m_rcClient.width(), m_rcClient.height()), m_key_item.c_str(), "size"))
return FALSE;
if(!cfg.WriteBOOL(m_isVisible, m_key_item.c_str(), "visible"))
return FALSE;
if(!cfg.WriteBOOL(m_isEnable, m_key_item.c_str(), "enable"))
return FALSE;
if(!cfg.WriteBOOL(m_can_move, m_key_item.c_str(), "can_move"))
return FALSE;
if(!cfg.WriteRect(m_rcHeader, m_key_item.c_str(), "header_rect"))
return FALSE;
if(!cfg.WriteBOOL(m_isBackLayer, m_key_item.c_str(), "back_layer"))
return FALSE;
if(!cfg.WriteString(m_image_normal.GetKey(), m_key_item.c_str(), "image_normal"))
return FALSE;
if(!cfg.WriteString(m_image_normal_touch.GetKey(), m_key_item.c_str(), "image_normal_touch"))
return FALSE;
if(!cfg.WriteBOOL(m_is_checked_style, m_key_item.c_str(), "checked"))
return FALSE;
if(!cfg.WriteString(m_image_press.GetKey(), m_key_item.c_str(), "image_press"))
return FALSE;
if(!cfg.WriteString(m_image_press_touch.GetKey(), m_key_item.c_str(), "image_press_touch"))
return FALSE;
if(!cfg.WriteString(m_image_disable.GetKey(), m_key_item.c_str(), "image_disable"))
return FALSE;
if(!cfg.WriteString(m_image_sense.GetKey(), m_key_item.c_str(), "image_sense"))
return FALSE;
if(!cfg.WriteString((m_sound_touch)?m_sound_touch->GetKey():"", m_key_item.c_str(), "sound_touch"))
return FALSE;
if(!cfg.WriteString((m_sound_click)?m_sound_click->GetKey():"", m_key_item.c_str(), "sound_click"))
return FALSE;
cfg.WriteBOOL(m_isCaption, m_key_item.c_str(), "is_caption");
cfg.WriteBOOL(m_isCanEdit, m_key_item.c_str(), "can_edit");
cfg.WriteString(m_caption.c_str(), m_key_item.c_str(), "caption");
cfg.WriteLong(m_align, m_key_item.c_str(), "align");
cfg.WriteFont(m_font, m_key_item.c_str(), "font");
cfg.WriteColor(m_color, m_key_item.c_str(), "color");
cfg.WriteColor(m_bk_color, m_key_item.c_str(), "bk_color");
// if(m_panel_array.size()>0)
{
PANEL_ARRAY::iterator it = m_panel_array.begin();
int i=1;
while(it!=m_panel_array.end())
{
CGsUIPanel* pPanel = *it;
char szSection[20];
sprintf(szSection, "ITEM_%d", i);
char szItem[100];
sprintf(szItem, "item_%d_style", i);
if(!cfg.WriteString(pPanel->GetStyle(), "MAIN", szItem))
return FALSE;
sprintf(szItem, "item_%d_config", i);
if(pPanel->m_key_item=="MAIN")
{
if(!cfg.WriteString(pPanel->GetConfig(), "MAIN", szItem))
return FALSE;
}
else
{
if(!cfg.WriteString("", "MAIN", szItem))
return FALSE;
}
sprintf(szItem, "item_%d_pos", i);
if(!cfg.WritePoint(pPanel->m_rcClient.top_left(), "MAIN", szItem))
return FALSE;
sprintf(szItem, "item_%d_name", i);
if(!cfg.WriteString(pPanel->GetName(), "MAIN", szItem))
return FALSE;
pPanel->SaveConfig();
it++;
i++;
}
{
char szItem[100];
sprintf(szItem, "item_%d_style", i);
if(!cfg.WriteString("", "MAIN", szItem))
return FALSE;
sprintf(szItem, "item_%d_config", i);
if(!cfg.WriteString("", "MAIN", szItem))
return FALSE;
sprintf(szItem, "item_%d_pos", i);
if(!cfg.WritePoint(GPOINT(0,0), "MAIN", szItem))
return FALSE;
sprintf(szItem, "item_%d_name", i);
if(!cfg.WriteString("", "MAIN", szItem))
return FALSE;
}
}
// else
// {
// }
return TRUE;
}
VOID CGsUIPanel::AddSubPanel(CGsUIPanel *pPanel)
{
assert(m_pEngine);
if(pPanel==NULL || std::find(m_panel_array.begin(), m_panel_array.end(), pPanel)!=m_panel_array.end())
return;
m_panel_array.push_front(pPanel);
// for(int i=100; i<9999; i++)
// {
// if(m_pEngine->m_ui_map.find(i)==m_pEngine->m_ui_map.end())
// {
// pPanel->m_ID = i;
// m_pEngine->m_ui_map.insert(CGsEngine::UI_MAP::value_type(pPanel->m_ID, pPanel));
// break;
// }
// }
// m_panel_map.insert(PANEL_MAP::value_type(pPanel->m_key, pPanel));
}
VOID CGsUIPanel::DelSubPanel(CGsUIPanel *pPanel)
{
// m_panel_map.erase(pPanel->m_key);
PANEL_ARRAY::iterator it = std::find(m_panel_array.begin(), m_panel_array.end(), pPanel);
if(pPanel==NULL || it==m_panel_array.end())
return;
m_panel_array.erase(it);
CGsEngine::UI_MAP::iterator it_ = m_pEngine->m_ui_map.find(pPanel->m_ID);
if(it_==m_pEngine->m_ui_map.end())
{
m_pEngine->m_ui_map.erase(it_);
}
}
HRESULT CGsUIPanel::Draw(GPOINT point)
{
HRESULT hr;
if(NULL==m_pEngine)
{
Cleanup();
return S_OK;
}
if(FAILED(hr = OnDraw(point)))
return hr;
if(g_bEditUI)
{
GRECT rc = m_rcClient - m_rcClient.top_left() + point;
rc.expand(10);
if(m_isFocus)
m_pEngine->Render_DrawRect(&rc, false, D3DRGBA(0.0f, 1.0f, 0.0f, 0.5f), m_isBackLayer ? 1.0f : 0.0f);
else
m_pEngine->Render_DrawRect(&rc, false, D3DRGBA(1.0f, 0.0f, 0.0f, 0.5f), m_isBackLayer ? 1.0f : 0.0f);
}
PANEL_ARRAY::iterator it = m_panel_array.end();
it--;
while(it!=m_panel_array.end())
{
CGsUIPanel* pPanel = *it;
if(pPanel->m_isVisible||g_bEditUI)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -