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 }