00001 #include "gui_editbox.hpp"
00002 
00003 #include <luapp_function.hpp>
00004 
00005 namespace gui
00006 {
00007 void edit_box::register_glue(utils::wptr<lua::state> pLua)
00008 {
00009     pLua->reg<lua_edit_box>();
00010 }
00011 
00012 lua_edit_box::lua_edit_box(lua_State* pLua) : lua_focus_frame(pLua)
00013 {
00014     pEditBoxParent_ = dynamic_cast<edit_box*>(pParent_);
00015     if (pParent_ && !pEditBoxParent_)
00016         throw exception("lua_edit_box", "Dynamic cast failed !");
00017 }
00018 
00019 int lua_edit_box::_add_history_line(lua_State* pLua)
00020 {
00021     if (!check_parent_())
00022         return 0;
00023 
00024     lua::function mFunc("EditBox:add_history_line", pLua);
00025     mFunc.add(0, "line", lua::TYPE_STRING);
00026     if (mFunc.check())
00027         pEditBoxParent_->add_history_line(mFunc.get(0)->get_string());
00028 
00029     return mFunc.on_return();
00030 }
00031 
00032 int lua_edit_box::_get_blink_speed(lua_State* pLua)
00033 {
00034     if (!check_parent_())
00035         return 0;
00036 
00037     lua::function mFunc("EditBox:get_blink_speed", pLua, 1);
00038 
00039     mFunc.push(pEditBoxParent_->get_blink_speed());
00040 
00041     return mFunc.on_return();
00042 }
00043 
00044 int lua_edit_box::_get_history_lines(lua_State* pLua)
00045 {
00046     const std::deque<std::string>& lHistoryLine = pEditBoxParent_->get_history_lines();
00047     if (!check_parent_())
00048         return 0;
00049 
00050     lua::function mFunc("EditBox:get_history_lines", pLua, lHistoryLine.size());
00051 
00052     std::deque<std::string>::const_iterator iterLine;
00053     foreach (iterLine, lHistoryLine)
00054         mFunc.push(*iterLine);
00055 
00056     return mFunc.on_return();
00057 }
00058 
00059 int lua_edit_box::_get_max_letters(lua_State* pLua)
00060 {
00061     if (!check_parent_())
00062         return 0;
00063 
00064     lua::function mFunc("EditBox:get_max_letters", pLua, 1);
00065 
00066     mFunc.push(pEditBoxParent_->get_max_letters());
00067 
00068     return mFunc.on_return();
00069 }
00070 
00071 int lua_edit_box::_get_num_letters(lua_State* pLua)
00072 {
00073     if (!check_parent_())
00074         return 0;
00075 
00076     lua::function mFunc("EditBox:get_num_letters", pLua, 1);
00077 
00078     mFunc.push(pEditBoxParent_->get_num_letters());
00079 
00080     return mFunc.on_return();
00081 }
00082 
00083 int lua_edit_box::_get_number(lua_State* pLua)
00084 {
00085     if (!check_parent_())
00086         return 0;
00087 
00088     lua::function mFunc("EditBox:get_number", pLua, 1);
00089 
00090     mFunc.push(utils::string_to_float(pEditBoxParent_->get_text()));
00091 
00092     return mFunc.on_return();
00093 }
00094 
00095 int lua_edit_box::_get_text(lua_State* pLua)
00096 {
00097     if (!check_parent_())
00098         return 0;
00099 
00100     lua::function mFunc("EditBox:get_text", pLua, 1);
00101 
00102     mFunc.push(pEditBoxParent_->get_text());
00103 
00104     return mFunc.on_return();
00105 }
00106 
00107 int lua_edit_box::_get_text_insets(lua_State* pLua)
00108 {
00109     if (!check_parent_())
00110         return 0;
00111 
00112     lua::function mFunc("EditBox:get_text_insets", pLua, 4);
00113 
00114     const std::array<int,4>& lInsets = pEditBoxParent_->get_text_insets();
00115 
00116     for (uint i = 0; i < 4; ++i)
00117         mFunc.push(lInsets[i]);
00118 
00119     return mFunc.on_return();
00120 }
00121 
00122 int lua_edit_box::_highlight_text(lua_State* pLua)
00123 {
00124     if (!check_parent_())
00125         return 0;
00126 
00127     lua::function mFunc("EditBox:highlight_text", pLua);
00128     mFunc.add(0, "start", lua::TYPE_NUMBER, true);
00129     mFunc.add(1, "end", lua::TYPE_NUMBER, true);
00130     if (mFunc.check())
00131     {
00132         uint uiStart = 0;
00133         uint uiEnd = uint(-1);
00134 
00135         if (mFunc.is_provided(0))
00136             uiStart = uint(mFunc.get(0)->get_number());
00137         if (mFunc.is_provided(1))
00138             uiEnd = uint(mFunc.get(1)->get_number());
00139 
00140         pEditBoxParent_->highlight_text(uiStart, uiEnd);
00141     }
00142 
00143     return mFunc.on_return();
00144 }
00145 
00146 int lua_edit_box::_insert(lua_State* pLua)
00147 {
00148     if (!check_parent_())
00149         return 0;
00150 
00151     lua::function mFunc("EditBox:insert", pLua);
00152     mFunc.add(0, "text", lua::TYPE_STRING);
00153     if (mFunc.check())
00154         pEditBoxParent_->insert_after_cursor(mFunc.get(0)->get_string());
00155 
00156     return mFunc.on_return();
00157 }
00158 
00159 int lua_edit_box::_is_multi_line(lua_State* pLua)
00160 {
00161     if (!check_parent_())
00162         return 0;
00163 
00164     lua::function mFunc("EditBox:is_multi_line", pLua);
00165 
00166     mFunc.push(pEditBoxParent_->is_multi_line());
00167 
00168     return mFunc.on_return();
00169 }
00170 
00171 int lua_edit_box::_is_numeric(lua_State* pLua)
00172 {
00173     if (!check_parent_())
00174         return 0;
00175 
00176     lua::function mFunc("EditBox:is_numeric", pLua);
00177 
00178     mFunc.push(pEditBoxParent_->is_numeric_only());
00179 
00180     return mFunc.on_return();
00181 }
00182 
00183 int lua_edit_box::_is_password(lua_State* pLua)
00184 {
00185     if (!check_parent_())
00186         return 0;
00187 
00188     lua::function mFunc("EditBox:is_password", pLua);
00189 
00190     mFunc.push(pEditBoxParent_->is_password_mode_enabled());
00191 
00192     return mFunc.on_return();
00193 }
00194 
00195 int lua_edit_box::_set_blink_speed(lua_State* pLua)
00196 {
00197     if (!check_parent_())
00198         return 0;
00199 
00200     lua::function mFunc("EditBox:set_blink_speed", pLua);
00201     mFunc.add(0, "blink speed", lua::TYPE_NUMBER);
00202     if (mFunc.check())
00203         pEditBoxParent_->set_blink_speed(double(mFunc.get(0)->get_number()));
00204 
00205     return mFunc.on_return();
00206 }
00207 
00208 int lua_edit_box::_set_max_history_lines(lua_State* pLua)
00209 {
00210     if (!check_parent_())
00211         return 0;
00212 
00213     lua::function mFunc("EditBox:set_max_history_lines", pLua);
00214     mFunc.add(0, "max lines", lua::TYPE_NUMBER);
00215     if (mFunc.check())
00216         pEditBoxParent_->set_max_history_lines(mFunc.get(0)->get_number());
00217 
00218     return mFunc.on_return();
00219 }
00220 
00221 int lua_edit_box::_set_max_letters(lua_State* pLua)
00222 {
00223     if (!check_parent_())
00224         return 0;
00225 
00226     lua::function mFunc("EditBox:set_max_letters", pLua);
00227     mFunc.add(0, "max letters", lua::TYPE_NUMBER);
00228     if (mFunc.check())
00229         pEditBoxParent_->set_max_letters(mFunc.get(0)->get_number());
00230 
00231     return mFunc.on_return();
00232 }
00233 
00234 int lua_edit_box::_set_multi_line(lua_State* pLua)
00235 {
00236     if (!check_parent_())
00237         return 0;
00238 
00239     lua::function mFunc("EditBox:set_multi_line", pLua);
00240     mFunc.add(0, "multiLine", lua::TYPE_BOOLEAN);
00241     if (mFunc.check())
00242         pEditBoxParent_->set_multi_line(mFunc.get(0)->get_bool());
00243 
00244     return mFunc.on_return();
00245 }
00246 
00247 int lua_edit_box::_set_number(lua_State* pLua)
00248 {
00249     if (!check_parent_())
00250         return 0;
00251 
00252     lua::function mFunc("EditBox:set_number", pLua);
00253     mFunc.add(0, "number", lua::TYPE_NUMBER);
00254     if (mFunc.check())
00255         pEditBoxParent_->set_text(utils::to_string(mFunc.get(0)->get_number()));
00256 
00257     return mFunc.on_return();
00258 }
00259 
00260 int lua_edit_box::_set_numeric(lua_State* pLua)
00261 {
00262     if (!check_parent_())
00263         return 0;
00264 
00265     lua::function mFunc("EditBox:set_numeric", pLua);
00266     mFunc.add(0, "numeric", lua::TYPE_NUMBER);
00267     if (mFunc.check())
00268         pEditBoxParent_->set_numeric_only(mFunc.get(0)->get_bool());
00269 
00270     return mFunc.on_return();
00271 }
00272 
00273 int lua_edit_box::_set_password(lua_State* pLua)
00274 {
00275     if (!check_parent_())
00276         return 0;
00277 
00278     lua::function mFunc("EditBox:set_password", pLua);
00279     mFunc.add(0, "enable", lua::TYPE_NUMBER);
00280     if (mFunc.check())
00281         pEditBoxParent_->enable_password_mode(mFunc.get(0)->get_bool());
00282 
00283     return mFunc.on_return();
00284 }
00285 
00286 int lua_edit_box::_set_text(lua_State* pLua)
00287 {
00288     if (!check_parent_())
00289         return 0;
00290 
00291     lua::function mFunc("EditBox:set_text", pLua);
00292     mFunc.add(0, "text", lua::TYPE_STRING);
00293     if (mFunc.check())
00294         pEditBoxParent_->set_text(mFunc.get(0)->get_string());
00295 
00296     return mFunc.on_return();
00297 }
00298 
00299 int lua_edit_box::_set_text_insets(lua_State* pLua)
00300 {
00301     if (!check_parent_())
00302         return 0;
00303 
00304     lua::function mFunc("EditBox:set_text_insets", pLua);
00305     mFunc.add(0, "left", lua::TYPE_NUMBER);
00306     mFunc.add(1, "right", lua::TYPE_NUMBER);
00307     mFunc.add(2, "top", lua::TYPE_NUMBER);
00308     mFunc.add(3, "bottom", lua::TYPE_NUMBER);
00309     if (mFunc.check())
00310     {
00311         pEditBoxParent_->set_text_insets(
00312             int(mFunc.get(0)->get_number()),
00313             int(mFunc.get(1)->get_number()),
00314             int(mFunc.get(2)->get_number()),
00315             int(mFunc.get(3)->get_number())
00316         );
00317     }
00318 
00319     return mFunc.on_return();
00320 }
00321 }