2017-12-13 22:29:28 +08:00
|
|
|
#include "core_include/api.h"
|
|
|
|
#include "core_include/rect.h"
|
|
|
|
#include "core_include/cmd_target.h"
|
|
|
|
#include "core_include/wnd.h"
|
|
|
|
#include "core_include/msg.h"
|
|
|
|
#include "core_include/surface.h"
|
2018-12-02 22:39:43 +08:00
|
|
|
#include "core_include/display.h"
|
2018-10-04 14:30:29 +08:00
|
|
|
#include "core_include/resource.h"
|
2017-12-13 22:29:28 +08:00
|
|
|
#include "core_include/bitmap.h"
|
|
|
|
#include "core_include/word.h"
|
2017-12-06 21:43:47 +08:00
|
|
|
#include "../gui_include/button.h"
|
2018-10-04 14:30:29 +08:00
|
|
|
#include "../gui_include/my_resource.h"
|
2017-12-06 21:43:47 +08:00
|
|
|
#include "../gui_include/dialog.h"
|
2017-12-13 22:29:28 +08:00
|
|
|
|
2017-12-06 21:43:47 +08:00
|
|
|
#include <string.h>
|
|
|
|
|
2018-12-02 22:39:43 +08:00
|
|
|
DIALOG_ARRAY c_dialog::ms_the_dialogs[SURFACE_CNT_MAX];
|
2017-12-06 21:43:47 +08:00
|
|
|
void c_dialog::pre_create_wnd()
|
|
|
|
{
|
2018-12-02 22:39:43 +08:00
|
|
|
m_style = GL_ATTR_FOCUS;
|
2017-12-06 21:43:47 +08:00
|
|
|
m_z_order = Z_ORDER_LEVEL_1;
|
2018-12-28 15:56:36 +08:00
|
|
|
m_bg_color = GL_RGB(33, 42, 53);
|
2017-12-06 21:43:47 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
void c_dialog::on_paint()
|
|
|
|
{
|
|
|
|
c_rect rect;
|
|
|
|
get_screen_rect(rect);
|
2018-12-28 15:56:36 +08:00
|
|
|
fill_rect(rect, m_bg_color);
|
2017-12-06 21:43:47 +08:00
|
|
|
|
2018-10-04 14:30:29 +08:00
|
|
|
if (m_str)
|
2017-12-06 21:43:47 +08:00
|
|
|
{
|
2018-12-11 14:30:09 +08:00
|
|
|
c_word::draw_string(m_surface, m_z_order, m_str, rect.m_left+35, rect.m_top, c_my_resource::get_font(FONT_DEFAULT), GL_RGB(255, 255, 255), GL_ARGB(0, 0, 0, 0), ALIGN_LEFT);
|
2017-12-06 21:43:47 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
c_dialog* c_dialog::get_the_dialog(c_surface* surface)
|
|
|
|
{
|
2018-12-02 22:39:43 +08:00
|
|
|
for(int i = 0; i < SURFACE_CNT_MAX; i++)
|
2017-12-06 21:43:47 +08:00
|
|
|
{
|
|
|
|
if(ms_the_dialogs[i].surface == surface)
|
|
|
|
{
|
|
|
|
return ms_the_dialogs[i].dialog;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
int c_dialog::open_dialog(c_dialog* p_dlg)
|
|
|
|
{
|
|
|
|
if (NULL == p_dlg)
|
|
|
|
{
|
|
|
|
ASSERT(FALSE);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
c_dialog* cur_dlg = get_the_dialog(p_dlg->get_surface());
|
|
|
|
if (cur_dlg == p_dlg)
|
|
|
|
{
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(cur_dlg)
|
|
|
|
{
|
2018-12-02 22:39:43 +08:00
|
|
|
cur_dlg->modify_style(0, GL_ATTR_VISIBLE);
|
2017-12-06 21:43:47 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
c_rect rc;
|
|
|
|
p_dlg->get_screen_rect(rc);
|
|
|
|
p_dlg->get_surface()->set_frame_layer(rc, Z_ORDER_LEVEL_1);
|
|
|
|
|
2018-12-02 22:39:43 +08:00
|
|
|
p_dlg->modify_style(GL_ATTR_VISIBLE, 0);
|
2017-12-06 21:43:47 +08:00
|
|
|
p_dlg->show_window();
|
|
|
|
p_dlg->set_me_the_dialog();
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
2018-12-02 22:39:43 +08:00
|
|
|
int c_dialog::close_dialog(c_surface* surface)
|
2017-12-06 21:43:47 +08:00
|
|
|
{
|
2018-12-02 22:39:43 +08:00
|
|
|
c_dialog* dlg = get_the_dialog(surface);
|
2017-12-06 21:43:47 +08:00
|
|
|
|
|
|
|
if (NULL == dlg)
|
|
|
|
{
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
c_rect rc;
|
2018-12-02 22:39:43 +08:00
|
|
|
|
|
|
|
dlg->modify_style(0, GL_ATTR_VISIBLE);
|
2017-12-06 21:43:47 +08:00
|
|
|
surface->set_frame_layer(rc, dlg->m_z_order);
|
|
|
|
|
|
|
|
//clear the dialog
|
2018-12-02 22:39:43 +08:00
|
|
|
for(int i = 0; i < SURFACE_CNT_MAX; i++)
|
2017-12-06 21:43:47 +08:00
|
|
|
{
|
|
|
|
if(ms_the_dialogs[i].surface == surface)
|
|
|
|
{
|
|
|
|
ms_the_dialogs[i].dialog = NULL;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ASSERT(FALSE);
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
void c_dialog::on_touch_down(int x, int y)
|
|
|
|
{
|
|
|
|
c_wnd *child = m_top_child;
|
|
|
|
c_rect rect;
|
|
|
|
get_wnd_rect(rect);
|
|
|
|
|
|
|
|
if ( NULL != child )
|
|
|
|
{
|
|
|
|
while ( child )
|
|
|
|
{
|
|
|
|
if (child->m_z_order > m_z_order)
|
|
|
|
{
|
|
|
|
x -= rect.m_left;
|
|
|
|
y -= rect.m_top;
|
|
|
|
child->on_touch_down(x, y);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
child = child->m_next_sibling;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
c_wnd::on_touch_down(x, y);
|
|
|
|
}
|
|
|
|
|
|
|
|
void c_dialog::on_touch_up(int x, int y)
|
|
|
|
{
|
|
|
|
c_wnd *child = m_top_child;
|
|
|
|
c_rect rect;
|
|
|
|
get_wnd_rect(rect);
|
|
|
|
if ( NULL != child )
|
|
|
|
{
|
|
|
|
while ( child )
|
|
|
|
{
|
|
|
|
if (child->m_z_order > m_z_order)
|
|
|
|
{
|
|
|
|
x -= rect.m_left;
|
|
|
|
y -= rect.m_top;
|
|
|
|
return child->on_touch_up(x, y);
|
|
|
|
}
|
|
|
|
child = child->m_next_sibling;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
c_wnd::on_touch_up(x, y);
|
|
|
|
}
|
|
|
|
|
|
|
|
int c_dialog::set_me_the_dialog()
|
|
|
|
{
|
|
|
|
c_surface* surface = get_surface();
|
2018-12-02 22:39:43 +08:00
|
|
|
for(int i = 0; i < SURFACE_CNT_MAX; i++)
|
2017-12-06 21:43:47 +08:00
|
|
|
{
|
|
|
|
if(ms_the_dialogs[i].surface == surface)
|
|
|
|
{
|
|
|
|
ms_the_dialogs[i].dialog = this;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-12-02 22:39:43 +08:00
|
|
|
for(int i = 0; i < SURFACE_CNT_MAX; i++)
|
2017-12-06 21:43:47 +08:00
|
|
|
{
|
|
|
|
if(ms_the_dialogs[i].surface == NULL)
|
|
|
|
{
|
|
|
|
ms_the_dialogs[i].dialog = this;
|
|
|
|
if(this)
|
|
|
|
{
|
|
|
|
ms_the_dialogs[i].surface = surface;
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ASSERT(FALSE);
|
|
|
|
return -2;
|
|
|
|
}
|