summaryrefslogtreecommitdiff
path: root/src/guichan/widgets/dropdown.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/guichan/widgets/dropdown.cpp')
-rw-r--r--src/guichan/widgets/dropdown.cpp161
1 files changed, 46 insertions, 115 deletions
diff --git a/src/guichan/widgets/dropdown.cpp b/src/guichan/widgets/dropdown.cpp
index 13feaa1f7..c666b47e4 100644
--- a/src/guichan/widgets/dropdown.cpp
+++ b/src/guichan/widgets/dropdown.cpp
@@ -70,22 +70,14 @@ namespace gcn
mInternalListBox = (listBox == NULL);
if (mInternalScrollArea)
- {
mScrollArea = new ScrollArea();
- }
else
- {
mScrollArea = scrollArea;
- }
if (mInternalListBox)
- {
mListBox = new ListBox();
- }
else
- {
mListBox = listBox;
- }
mScrollArea->setContent(mListBox);
add(mScrollArea);
@@ -96,9 +88,7 @@ namespace gcn
setListModel(listModel);
if (mListBox->getSelected() < 0)
- {
mListBox->setSelected(0);
- }
addMouseListener(this);
addKeyListener(this);
@@ -116,14 +106,10 @@ namespace gcn
}
if (mInternalScrollArea)
- {
delete mScrollArea;
- }
if (mInternalListBox)
- {
delete mListBox;
- }
setInternalFocusHandler(NULL);
}
@@ -133,13 +119,9 @@ namespace gcn
int h;
if (mDroppedDown)
- {
h = mFoldedUpHeight;
- }
else
- {
h = getHeight();
- }
Color faceColor = getBaseColor();
Color highlightColor, shadowColor;
@@ -163,15 +145,15 @@ namespace gcn
const Rectangle currentClipArea = graphics->getCurrentClipArea();
graphics->setColor(getBackgroundColor());
- graphics->fillRectangle(Rectangle(0, 0, currentClipArea.width, currentClipArea.height));
-
+ graphics->fillRectangle(Rectangle(0, 0,
+ currentClipArea.width, currentClipArea.height));
+
if (isFocused())
{
graphics->setColor(getSelectionColor());
- graphics->fillRectangle(Rectangle(0,
- 0,
- currentClipArea.width - currentClipArea.height,
- currentClipArea.height));
+ graphics->fillRectangle(Rectangle(0, 0,
+ currentClipArea.width - currentClipArea.height,
+ currentClipArea.height));
graphics->setColor(getForegroundColor());
}
@@ -181,14 +163,14 @@ namespace gcn
graphics->setColor(getForegroundColor());
graphics->setFont(getFont());
- graphics->drawText(mListBox->getListModel()->getElementAt(mListBox->getSelected()), 1, 0);
+ graphics->drawText(mListBox->getListModel()->getElementAt(
+ mListBox->getSelected()), 1, 0);
}
-
+
// Push a clip area before drawing the button.
- graphics->pushClipArea(Rectangle(currentClipArea.width - currentClipArea.height,
- 0,
- currentClipArea.height,
- currentClipArea.height));
+ graphics->pushClipArea(Rectangle(
+ currentClipArea.width - currentClipArea.height,
+ 0, currentClipArea.height, currentClipArea.height));
drawButton(graphics);
graphics->popClipArea();
graphics->popClipArea();
@@ -197,10 +179,8 @@ namespace gcn
{
// Draw a border around the children.
graphics->setColor(shadowColor);
- graphics->drawRectangle(Rectangle(0,
- mFoldedUpHeight,
- getWidth(),
- getHeight() - mFoldedUpHeight));
+ graphics->drawRectangle(Rectangle(0, mFoldedUpHeight,
+ getWidth(), getHeight() - mFoldedUpHeight));
drawChildren(graphics);
}
}
@@ -234,29 +214,17 @@ namespace gcn
const Rectangle currentClipArea = graphics->getCurrentClipArea();
graphics->setColor(highlightColor);
- graphics->drawLine(0,
- 0,
- currentClipArea.width - 1,
- 0);
- graphics->drawLine(0,
- 1,
- 0,
- currentClipArea.height - 1);
+ graphics->drawLine(0, 0, currentClipArea.width - 1, 0);
+ graphics->drawLine(0, 1, 0, currentClipArea.height - 1);
graphics->setColor(shadowColor);
- graphics->drawLine(currentClipArea.width - 1,
- 1,
- currentClipArea.width - 1,
- currentClipArea.height - 1);
- graphics->drawLine(1,
- currentClipArea.height - 1,
- currentClipArea.width - 2,
- currentClipArea.height - 1);
+ graphics->drawLine(currentClipArea.width - 1, 1,
+ currentClipArea.width - 1, currentClipArea.height - 1);
+ graphics->drawLine(1, currentClipArea.height - 1,
+ currentClipArea.width - 2, currentClipArea.height - 1);
graphics->setColor(faceColor);
- graphics->fillRectangle(Rectangle(1,
- 1,
- currentClipArea.width - 2,
- currentClipArea.height - 2));
+ graphics->fillRectangle(Rectangle(1, 1,
+ currentClipArea.width - 2, currentClipArea.height - 2));
graphics->setColor(getForegroundColor());
@@ -266,10 +234,8 @@ namespace gcn
int dy = (currentClipArea.height * 2) / 3;
for (i = 0; i < n; i++)
{
- graphics->drawLine(dx - i + offset,
- dy - i + offset,
- dx + i + offset,
- dy - i + offset);
+ graphics->drawLine(dx - i + offset, dy - i + offset,
+ dx + i + offset, dy - i + offset);
}
}
@@ -281,16 +247,14 @@ namespace gcn
void DropDown::setSelected(int selected)
{
if (selected >= 0)
- {
mListBox->setSelected(selected);
- }
}
void DropDown::keyPressed(KeyEvent& keyEvent)
{
if (keyEvent.isConsumed())
return;
-
+
Key key = keyEvent.getKey();
if ((key.getValue() == Key::ENTER || key.getValue() == Key::SPACE)
@@ -312,7 +276,7 @@ namespace gcn
}
void DropDown::mousePressed(MouseEvent& mouseEvent)
- {
+ {
// If we have a mouse press on the widget.
if (0 <= mouseEvent.getY()
&& mouseEvent.getY() < getHeight()
@@ -353,11 +317,10 @@ namespace gcn
void DropDown::mouseReleased(MouseEvent& mouseEvent)
{
if (mIsDragged)
- {
mPushed = false;
- }
- // Released outside of widget. Can happen when we have modal input focus.
+ // Released outside of widget. Can happen when we have modal
+ // input focus.
if ((0 > mouseEvent.getY()
|| mouseEvent.getY() >= getHeight()
|| mouseEvent.getX() < 0
@@ -368,9 +331,7 @@ namespace gcn
releaseModalMouseInputFocus();
if (mIsDragged)
- {
foldUp();
- }
}
else if (mouseEvent.getButton() == MouseEvent::LEFT)
{
@@ -392,9 +353,7 @@ namespace gcn
mListBox->setListModel(listModel);
if (mListBox->getSelected() < 0)
- {
mListBox->setSelected(0);
- }
adjustHeight();
}
@@ -407,17 +366,13 @@ namespace gcn
void DropDown::adjustHeight()
{
if (mScrollArea == NULL)
- {
throw GCN_EXCEPTION("Scroll area has been deleted.");
- }
if (mListBox == NULL)
- {
throw GCN_EXCEPTION("List box has been deleted.");
- }
int listBoxHeight = mListBox->getHeight();
-
+
// We add 2 for the border
int h2 = getFont()->getHeight() + 2;
@@ -457,9 +412,7 @@ namespace gcn
adjustHeight();
if (getParent())
- {
getParent()->moveToTop(this);
- }
}
mListBox->requestFocus();
@@ -483,11 +436,9 @@ namespace gcn
void DropDown::death(const Event& event)
- {
+ {
if (event.getSource() == mScrollArea)
- {
mScrollArea = NULL;
- }
BasicContainer::death(event);
}
@@ -504,10 +455,8 @@ namespace gcn
if (mDroppedDown)
{
// Calculate the children area (with the one pixel border in mind)
- return Rectangle(1,
- mFoldedUpHeight + 1,
- getWidth() - 2,
- getHeight() - mFoldedUpHeight - 2);
+ return Rectangle(1, mFoldedUpHeight + 1,
+ getWidth() - 2, getHeight() - mFoldedUpHeight - 2);
}
return Rectangle();
@@ -516,14 +465,10 @@ namespace gcn
void DropDown::setBaseColor(const Color& color)
{
if (mInternalScrollArea)
- {
mScrollArea->setBaseColor(color);
- }
if (mInternalListBox)
- {
mListBox->setBaseColor(color);
- }
Widget::setBaseColor(color);
}
@@ -531,14 +476,10 @@ namespace gcn
void DropDown::setBackgroundColor(const Color& color)
{
if (mInternalScrollArea)
- {
mScrollArea->setBackgroundColor(color);
- }
if (mInternalListBox)
- {
mListBox->setBackgroundColor(color);
- }
Widget::setBackgroundColor(color);
}
@@ -546,50 +487,40 @@ namespace gcn
void DropDown::setForegroundColor(const Color& color)
{
if (mInternalScrollArea)
- {
mScrollArea->setForegroundColor(color);
- }
if (mInternalListBox)
- {
mListBox->setForegroundColor(color);
- }
Widget::setForegroundColor(color);
}
- void DropDown::setFont(Font *font)
- {
- if (mInternalScrollArea)
- {
+ void DropDown::setFont(Font *font)
+ {
+ if (mInternalScrollArea)
mScrollArea->setFont(font);
- }
if (mInternalListBox)
- {
mListBox->setFont(font);
- }
Widget::setFont(font);
- }
+ }
- void DropDown::mouseWheelMovedUp(MouseEvent& mouseEvent)
- {
+ void DropDown::mouseWheelMovedUp(MouseEvent& mouseEvent)
+ {
if (isFocused() && mouseEvent.getSource() == this)
- {
+ {
mouseEvent.consume();
if (mListBox->getSelected() > 0)
- {
mListBox->setSelected(mListBox->getSelected() - 1);
- }
}
}
void DropDown::mouseWheelMovedDown(MouseEvent& mouseEvent)
{
if (isFocused() && mouseEvent.getSource() == this)
- {
+ {
mouseEvent.consume();
mListBox->setSelected(mListBox->getSelected() + 1);
@@ -601,9 +532,7 @@ namespace gcn
Widget::setSelectionColor(color);
if (mInternalListBox)
- {
mListBox->setSelectionColor(color);
- }
}
void DropDown::valueChanged(const SelectionEvent& event _UNUSED_)
@@ -615,17 +544,19 @@ namespace gcn
{
mSelectionListeners.push_back(selectionListener);
}
-
- void DropDown::removeSelectionListener(SelectionListener* selectionListener)
+
+ void DropDown::removeSelectionListener(SelectionListener* listener)
{
- mSelectionListeners.remove(selectionListener);
+ mSelectionListeners.remove(listener);
}
void DropDown::distributeValueChangedEvent()
{
SelectionListenerIterator iter;
- for (iter = mSelectionListeners.begin(); iter != mSelectionListeners.end(); ++iter)
+ for (iter = mSelectionListeners.begin();
+ iter != mSelectionListeners.end();
+ ++iter)
{
SelectionEvent event(this);
(*iter)->valueChanged(event);