X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fdesigner%2Finput.cpp;h=42cc0783dd994f72c75d6db755a19cfb9950ea74;hb=444c7efb2fadb10e98197a62b791829d821370c0;hp=d56cc1b0c5b42e9b11410612e8d3d3fc70396faf;hpb=de09cba1d12af38ff2e7e4312d67624fe63bf0e4;p=r2c2.git diff --git a/source/designer/input.cpp b/source/designer/input.cpp index d56cc1b..42cc078 100644 --- a/source/designer/input.cpp +++ b/source/designer/input.cpp @@ -7,6 +7,7 @@ Distributed under the GPL #include #include +#include #include #include "designer.h" #include "input.h" @@ -14,81 +15,48 @@ Distributed under the GPL using namespace std; using namespace Msp; -::Input::Input(Designer &d, const string &t, const string &e): - designer(d), - title(t), - text(e), - pos(text.size()) -{ } - -void ::Input::key_press(unsigned key, unsigned, wchar_t ch) +::Input::Input(Designer &d, const string &title, const string &text): + Panel(d.get_ui_resources()), + designer(d) { - if(key==Msp::Input::KEY_ENTER) - signal_accept.emit(); - else if(key==Msp::Input::KEY_ESC) - signal_cancel.emit(); - else if(key==Msp::Input::KEY_BACKSPACE) - { - if(pos>0) - { - text.erase(pos-1, 1); - --pos; - } - } - else if(key==Msp::Input::KEY_DELETE) - { - if(pos0) - --pos; - } - else if(key==Msp::Input::KEY_RIGHT) - { - if(pos=0x20) - { - text.insert(pos, 1, ch); - ++pos; - } -} + set_size(300, 100); -void ::Input::render() -{ - glLoadIdentity(); - glTranslatef(300, 450, 0); + GLtk::Label *lbl; + add(*(lbl=new GLtk::Label(res, title))); + lbl->set_geometry(GLtk::Geometry(10, geom.h-30, geom.w-20, 20)); - GL::Texture::unbind(); - glColor4f(0.7, 0.7, 0.7, 0.9); - glBegin(GL_QUADS); - glVertex2f(0, 0); - glVertex2f(680, 0); - glVertex2f(680, 60); - glVertex2f(0, 60); - glEnd(); + add(*(entry=new GLtk::Entry(res, text))); + entry->set_geometry(GLtk::Geometry(10, geom.h-60, geom.w-20, 20)); - glColor4f(0, 0, 0, 1); - glTranslatef(5, 35, 0); + GLtk::Button *btn; - glPushMatrix(); - glScalef(20, 20, 20); - designer.get_font().draw_string(title); - glPopMatrix(); + add(*(btn=new GLtk::Button(res, "Cncl"))); + btn->set_geometry(GLtk::Geometry(geom.w-90, 10, 40, 24)); + btn->set_style("red"); + btn->signal_clicked.connect(signal_cancel); - glTranslatef(0, -30, 0); - glPushMatrix(); - glScalef(20, 20, 20); - designer.get_font().draw_string(text); + add(*(btn=new GLtk::Button(res, "OK"))); + btn->set_geometry(GLtk::Geometry(geom.w-50, 10, 40, 24)); + btn->set_style("green"); + btn->signal_clicked.connect(signal_accept); + + designer.get_root().add(*this); + const GLtk::Geometry &rgeom=designer.get_root().get_geometry(); + set_position((rgeom.w-geom.w)/2, (rgeom.h-geom.h)/2); + entry->set_focus(); +} - glTranslatef(designer.get_font().get_string_width(text.substr(0, pos)), 0, 0); - glDisable(GL_TEXTURE_2D); - glBegin(GL_LINES); - glVertex2f(0, 0); - glVertex2f(0, 1); - glEnd(); - glPopMatrix(); +const string &::Input::get_text() const +{ + return entry->get_text(); +} + +void ::Input::key_press(unsigned key, unsigned mod, wchar_t ch) +{ + if(key==Msp::Input::KEY_ENTER) + signal_accept.emit(); + else if(key==Msp::Input::KEY_ESC) + signal_cancel.emit(); + else + Panel::key_press(key, mod, ch); }