/*! * @file glgui_table.h * The gl_TABLE widget of th openglGUI * */ #ifndef _GLGUI_TABLE_H #define _GLGUI_TABLE_H #include "glgui_widget.h" #include "limited_width_text.h" #include "event.h" // FORWARD DECLARATION namespace OrxGui { //! This is Table part of the openglGUI class /** * The Table is a Widget, that displays a Line, that can be manipulated through * Writing Text on it. * * Whenever the Text is changed the textChanged signal is emitted. */ class GLGuiTable : public OrxGui::GLGuiWidget { NewObjectListDeclaration(GLGuiTable); public: GLGuiTable(unsigned int rows, unsigned int columns); virtual ~GLGuiTable(); unsigned int rowCount() const { return this->_entries.size(); }; unsigned int columnCount() const { return this->_headers.size(); }; void setRowCount(unsigned int rowCount); void setColumnCount(unsigned int columnCount); void setHeader(unsigned int number, const std::string& headerName); void setHeader(const std::vector& headerNames); void setEntry(unsigned int row, unsigned int column, const std::string& name); void setColumnWidth(unsigned int column, float size); void setRowHeight(unsigned int row, unsigned int size); virtual void draw() const; void debug() const; protected: virtual void removedFocus(); virtual void updateFrontColor(); virtual void hiding(); virtual void showing(); virtual void resize(); virtual bool processEvent(const Event& event); private: void init(); void pixelPositionToElement(const Vector2D& pixelPosition, int* row, int* column); void repositionText(unsigned int fromLeft, unsigned int fromTop); void applyTextSettings(unsigned int row, unsigned int column, LimitedWidthText* text); bool checkIntegrity() const; private: typedef struct Entry { Entry(int row, int column) :row(row), column(column) {}; int row; int column; }; typedef std::vector TableTextList; TableTextList _headers; std::vector _columnWidths; std::vector _rowHeights; std::vector _entries; //!< inner is by column, outer is by row. Entry _selected; Entry _focused; }; } #endif /* _GLGUI_TABLE_H */