summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gui/skill.cpp23
-rw-r--r--src/gui/table_model.cpp48
-rw-r--r--src/gui/table_model.h39
3 files changed, 94 insertions, 16 deletions
diff --git a/src/gui/skill.cpp b/src/gui/skill.cpp
index 44f77253..35a41659 100644
--- a/src/gui/skill.cpp
+++ b/src/gui/skill.cpp
@@ -28,6 +28,8 @@
#include "skill.h"
#include "windowcontainer.h"
+#include "widgets/layout.h"
+
#include "../localplayer.h"
#include "../log.h"
@@ -51,7 +53,7 @@ class SkillGuiTableModel : public StaticTableModel
{
public:
SkillGuiTableModel(SkillDialog *dialog) :
- StaticTableModel(0, 3)
+ StaticTableModel(0, 3, 0xbdb5aa)
{
mEntriesNr = 0;
mDialog = dialog;
@@ -136,16 +138,15 @@ SkillDialog::SkillDialog():
mTable.setActionEventId("skill");
skillScrollArea->setHorizontalScrollPolicy(gcn::ScrollArea::SHOW_NEVER);
- skillScrollArea->setDimension(gcn::Rectangle(5, 5, 230, 180));
- mPointsLabel->setDimension(gcn::Rectangle(8, 190, 200, 16));
- mIncButton->setPosition(skillScrollArea->getX(), 210);
- mUseButton->setPosition(mIncButton->getX() + mIncButton->getWidth() + 5,
- 210);
-
- add(skillScrollArea);
- add(mPointsLabel);
- add(mIncButton);
- add(mUseButton);
+ skillScrollArea->setOpaque(false);
+
+ place(0, 0, skillScrollArea, 5).setPadding(3);
+ place(0, 1, mPointsLabel, 2);
+ place(3, 2, mIncButton);
+ place(4, 2, mUseButton);
+
+ Layout &layout = getLayout();
+ layout.setRowHeight(0, Layout::AUTO_SET);
// mSkillListBox->addActionListener(this);
mTable.addActionListener(this);
diff --git a/src/gui/table_model.cpp b/src/gui/table_model.cpp
index d626423a..f7f0ab54 100644
--- a/src/gui/table_model.cpp
+++ b/src/gui/table_model.cpp
@@ -21,6 +21,7 @@
#include <cstdlib>
+#include <guichan/graphics.hpp>
#include <guichan/widget.hpp>
#include "table_model.h"
@@ -50,14 +51,16 @@ void TableModel::signalAfterUpdate(void)
}
-
#define WIDGET_AT(row, column) (((row) * mColumns) + (column))
#define DYN_SIZE(h) ((h) >= 0) // determines whether this size is tagged for auto-detection
-StaticTableModel::StaticTableModel(int row, int column) :
+StaticTableModel::StaticTableModel(int row, int column,
+ gcn::Color backgroundColor, bool opacity) :
mRows(row),
mColumns(column),
- mHeight(1)
+ mHeight(1),
+ mBackgroundColor(backgroundColor),
+ mOpaque(opacity)
{
mTableModel.resize(row * column, NULL);
mWidths.resize(column, 1);
@@ -144,3 +147,42 @@ int StaticTableModel::getColumns(void)
{
return mColumns;
}
+
+int StaticTableModel::getWidth(void)
+{
+ int width = 0;
+
+ for (unsigned int i = 0; i < mWidths.size(); i++)
+ {
+ width += mWidths[i];
+ }
+
+ return width;
+}
+
+int StaticTableModel::getHeight(void)
+{
+ return (mColumns * mHeight);
+}
+
+void StaticTableModel::drawBackground(gcn::Graphics *graphics)
+{
+ if (isOpaque())
+ {
+ for (unsigned int i = 0; i < mTableModel.size(); i++)
+ {
+ mTableModel[i]->setBackgroundColor(mBackgroundColor);
+ }
+ }
+}
+
+void StaticTableModel::setOpaque(bool opaque)
+{
+ mOpaque = opaque;
+}
+
+bool StaticTableModel::isOpaque() const
+{
+ return mOpaque;
+}
+
diff --git a/src/gui/table_model.h b/src/gui/table_model.h
index a52a7561..304500bb 100644
--- a/src/gui/table_model.h
+++ b/src/gui/table_model.h
@@ -25,6 +25,7 @@
#include <set>
#include <vector>
+#include <guichan/color.hpp>
#include <guichan/gui.hpp>
#include "../guichanfwd.h"
@@ -99,12 +100,14 @@ private:
class StaticTableModel : public TableModel
{
public:
- StaticTableModel(int width, int height);
+ StaticTableModel(int width, int height, gcn::Color background = 0xffffff,
+ bool opacity = true);
virtual ~StaticTableModel(void);
/**
* Inserts a widget into the table model.
- * The model is resized to accomodate the widget's width and height, unless column width / row height have been fixed.
+ * The model is resized to accomodate the widget's width and height,
+ * unless column width / row height have been fixed.
*/
virtual void set(int row, int column, gcn::Widget *widget);
@@ -127,9 +130,27 @@ public:
*/
virtual void resize(void);
+ /**
+ * Sets the table to be opaque, that is sets the table
+ * to display its background.
+ *
+ * @param opaque True if the table should be opaque, false otherwise.
+ */
+ virtual void setOpaque(bool opaque);
+
+ /**
+ * Checks if the scroll area is opaque, that is if the scroll area
+ * displays its background.
+ *
+ * @return True if the scroll area is opaque, false otherwise.
+ */
+ virtual bool isOpaque() const;
+
virtual int getRows(void);
virtual int getColumns(void);
virtual int getRowHeight(void);
+ virtual int getWidth(void);
+ virtual int getHeight(void);
virtual int getColumnWidth(int index);
virtual gcn::Widget *getElementAt(int row, int column);
@@ -137,8 +158,22 @@ public:
protected:
int mRows, mColumns;
int mHeight;
+ bool mOpaque;
std::vector<gcn::Widget *> mTableModel;
std::vector<int> mWidths;
+
+ /**
+ * Holds the background color of the table.
+ */
+ gcn::Color mBackgroundColor;
+
+ /**
+ * Draws the background of the table, that is
+ * the area behind the content.
+ *
+ * @param graphics a Graphics object to draw with.
+ */
+ virtual void drawBackground(gcn::Graphics *graphics);
};
#endif /* !defined(TMW_TABLE_MODEL_H_) */