00001 #include "gui_scrollframe.hpp"
00002 #include "gui_frame.hpp"
00003 #include "gui_out.hpp"
00004
00005 #include <luapp_function.hpp>
00006
00007 namespace gui
00008 {
00009 void scroll_frame::register_glue(utils::wptr<lua::state> pLua)
00010 {
00011 pLua->reg<lua_scroll_frame>();
00012 }
00013
00014 lua_scroll_frame::lua_scroll_frame(lua_State* pLua) : lua_frame(pLua)
00015 {
00016 pScrollFrameParent_ = dynamic_cast<scroll_frame*>(pParent_);
00017 if (pParent_ && !pScrollFrameParent_)
00018 throw exception("lua_scroll_frame", "Dynamic cast failed !");
00019 }
00020
00021 int lua_scroll_frame::_get_horizontal_scroll(lua_State* pLua)
00022 {
00023 if (!check_parent_())
00024 return 0;
00025
00026 lua::function mFunc("ScrollFrame:get_horizontal_scroll", pLua, 1);
00027
00028 mFunc.push(pScrollFrameParent_->get_horizontal_scroll());
00029
00030 return mFunc.on_return();
00031 }
00032
00033 int lua_scroll_frame::_get_horizontal_scroll_range(lua_State* pLua)
00034 {
00035 if (!check_parent_())
00036 return 0;
00037
00038 lua::function mFunc("ScrollFrame:get_horizontal_scroll_range", pLua, 1);
00039
00040 mFunc.push(pScrollFrameParent_->get_horizontal_scroll_range());
00041
00042 return mFunc.on_return();
00043 }
00044
00045 int lua_scroll_frame::_get_scroll_child(lua_State* pLua)
00046 {
00047 if (!check_parent_())
00048 return 0;
00049
00050 lua::function mFunc("ScrollFrame:get_scroll_child", pLua, 1);
00051
00052 if (pScrollFrameParent_->get_scroll_child())
00053 {
00054 pScrollFrameParent_->get_scroll_child()->push_on_lua(mFunc.get_state());
00055 mFunc.notify_pushed();
00056 }
00057 else
00058 mFunc.push_nil();
00059
00060 return mFunc.on_return();
00061 }
00062
00063 int lua_scroll_frame::_get_vertical_scroll(lua_State* pLua)
00064 {
00065 if (!check_parent_())
00066 return 0;
00067
00068 lua::function mFunc("ScrollFrame:get_vertical_scroll", pLua, 1);
00069
00070 mFunc.push(pScrollFrameParent_->get_vertical_scroll());
00071
00072 return mFunc.on_return();
00073 }
00074
00075 int lua_scroll_frame::_get_vertical_scroll_range(lua_State* pLua)
00076 {
00077 if (!check_parent_())
00078 return 0;
00079
00080 lua::function mFunc("ScrollFrame:get_vertical_scroll_range", pLua, 1);
00081
00082 mFunc.push(pScrollFrameParent_->get_vertical_scroll_range());
00083
00084 return mFunc.on_return();
00085 }
00086
00087 int lua_scroll_frame::_set_horizontal_scroll(lua_State* pLua)
00088 {
00089 if (!check_parent_())
00090 return 0;
00091
00092 lua::function mFunc("ScrollFrame:set_horizontal_scroll", pLua);
00093 mFunc.add(0, "horizontal scroll", lua::TYPE_NUMBER);
00094 if (mFunc.check())
00095 {
00096 pScrollFrameParent_->set_horizontal_scroll(int(mFunc.get(0)->get_number()));
00097 }
00098
00099 return mFunc.on_return();
00100 }
00101
00102 int lua_scroll_frame::_set_scroll_child(lua_State* pLua)
00103 {
00104 if (!check_parent_())
00105 return 0;
00106
00107 lua::function mFunc("ScrollFrame:set_scroll_child", pLua);
00108 mFunc.add(0, "child name", lua::TYPE_STRING, true);
00109 mFunc.add(0, "child", lua::TYPE_USERDATA, true);
00110 if (mFunc.check())
00111 {
00112 utils::wptr<lua::argument> pArg = mFunc.get(0);
00113 frame* pChild = nullptr;
00114
00115 if (pArg->is_provided())
00116 {
00117 if (pArg->get_type() == lua::TYPE_STRING)
00118 {
00119 uiobject* pObj = pParent_->get_manager()->get_uiobject_by_name(pArg->get_string());
00120 pChild = dynamic_cast<frame*>(pObj);
00121
00122 if (!pChild && pObj)
00123 {
00124 gui::out << gui::warning << mFunc.get_name() << " : "
00125 "\""+pObj->get_name()+"\" is not a frame uiobject." << std::endl;
00126 }
00127 }
00128 else
00129 {
00130 lua_uiobject* pObj = pArg->get<lua_uiobject>();
00131 lua_frame* pFrame = dynamic_cast<lua_frame*>(pObj);
00132
00133 if (pFrame)
00134 pChild = dynamic_cast<frame*>(pFrame->get_parent());
00135 else if (pObj)
00136 {
00137 gui::out << gui::warning << mFunc.get_name() << " : "
00138 "\""+pObj->get_parent()->get_name()+"\" is not a frame uiobject." << std::endl;
00139 }
00140 }
00141 }
00142
00143 pScrollFrameParent_->set_scroll_child(pChild);
00144 }
00145
00146 return mFunc.on_return();
00147 }
00148
00149 int lua_scroll_frame::_set_vertical_scroll(lua_State* pLua)
00150 {
00151 if (!check_parent_())
00152 return 0;
00153
00154 lua::function mFunc("ScrollFrame:set_vertical_scroll", pLua);
00155 mFunc.add(0, "vertical scroll", lua::TYPE_NUMBER);
00156 if (mFunc.check())
00157 {
00158 pScrollFrameParent_->set_vertical_scroll(int(mFunc.get(0)->get_number()));
00159 }
00160
00161 return mFunc.on_return();
00162 }
00163 }