aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/llui/llcombobox.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'linden/indra/llui/llcombobox.cpp')
-rw-r--r--linden/indra/llui/llcombobox.cpp75
1 files changed, 32 insertions, 43 deletions
diff --git a/linden/indra/llui/llcombobox.cpp b/linden/indra/llui/llcombobox.cpp
index c486042..0523a11 100644
--- a/linden/indra/llui/llcombobox.cpp
+++ b/linden/indra/llui/llcombobox.cpp
@@ -57,6 +57,8 @@ S32 LLCOMBOBOX_HEIGHT = 0;
57S32 LLCOMBOBOX_WIDTH = 0; 57S32 LLCOMBOBOX_WIDTH = 0;
58S32 MAX_COMBO_WIDTH = 500; 58S32 MAX_COMBO_WIDTH = 500;
59 59
60static LLRegisterWidget<LLComboBox> r1("combo_box");
61
60LLComboBox::LLComboBox( const LLString& name, const LLRect &rect, const LLString& label, 62LLComboBox::LLComboBox( const LLString& name, const LLRect &rect, const LLString& label,
61 void (*commit_callback)(LLUICtrl*,void*), 63 void (*commit_callback)(LLUICtrl*,void*),
62 void *callback_userdata 64 void *callback_userdata
@@ -74,9 +76,10 @@ LLComboBox::LLComboBox( const LLString& name, const LLRect &rect, const LLString
74{ 76{
75 // Always use text box 77 // Always use text box
76 // Text label button 78 // Text label button
77 mButton = new LLButton("comboxbox button", 79 mButton = new LLButton(label,
78 LLRect(), label, NULL, LLString::null, 80 LLRect(),
79 NULL, this); 81 LLString::null,
82 NULL, this);
80 mButton->setImageUnselected("square_btn_32x128.tga"); 83 mButton->setImageUnselected("square_btn_32x128.tga");
81 mButton->setImageSelected("square_btn_selected_32x128.tga"); 84 mButton->setImageSelected("square_btn_selected_32x128.tga");
82 mButton->setImageDisabled("square_btn_32x128.tga"); 85 mButton->setImageDisabled("square_btn_32x128.tga");
@@ -99,13 +102,7 @@ LLComboBox::LLComboBox( const LLString& name, const LLRect &rect, const LLString
99 mList->setCommitOnKeyboardMovement(FALSE); 102 mList->setCommitOnKeyboardMovement(FALSE);
100 addChild(mList); 103 addChild(mList);
101 104
102 LLRect border_rect(0, getRect().getHeight(), getRect().getWidth(), 0); 105 mArrowImage = LLUI::sImageProvider->getUIImage("combobox_arrow.tga");
103 mBorder = new LLViewBorder( "combo border", border_rect );
104 addChild( mBorder );
105 mBorder->setFollowsAll();
106
107 LLUUID arrow_image_id( LLUI::sAssetsGroup->getString("combobox_arrow.tga") );
108 mArrowImage = LLUI::sImageProvider->getImageByID(arrow_image_id);
109 mButton->setImageOverlay("combobox_arrow.tga", LLFontGL::RIGHT); 106 mButton->setImageOverlay("combobox_arrow.tga", LLFontGL::RIGHT);
110 107
111 updateLayout(); 108 updateLayout();
@@ -447,7 +444,7 @@ void LLComboBox::setButtonVisible(BOOL visible)
447 LLRect text_entry_rect(0, getRect().getHeight(), getRect().getWidth(), 0); 444 LLRect text_entry_rect(0, getRect().getHeight(), getRect().getWidth(), 0);
448 if (visible) 445 if (visible)
449 { 446 {
450 text_entry_rect.mRight -= llmax(8,mArrowImage->getWidth(0)) + 2 * LLUI::sConfigGroup->getS32("DropShadowButton"); 447 text_entry_rect.mRight -= llmax(8,mArrowImage->getWidth()) + 2 * LLUI::sConfigGroup->getS32("DropShadowButton");
451 } 448 }
452 //mTextEntry->setRect(text_entry_rect); 449 //mTextEntry->setRect(text_entry_rect);
453 mTextEntry->reshape(text_entry_rect.getWidth(), text_entry_rect.getHeight(), TRUE); 450 mTextEntry->reshape(text_entry_rect.getWidth(), text_entry_rect.getHeight(), TRUE);
@@ -456,15 +453,10 @@ void LLComboBox::setButtonVisible(BOOL visible)
456 453
457void LLComboBox::draw() 454void LLComboBox::draw()
458{ 455{
459 if( getVisible() ) 456 mButton->setEnabled(getEnabled() /*&& !mList->isEmpty()*/);
460 {
461 mBorder->setKeyboardFocusHighlight(hasFocus());
462
463 mButton->setEnabled(getEnabled() /*&& !mList->isEmpty()*/);
464 457
465 // Draw children normally 458 // Draw children normally
466 LLUICtrl::draw(); 459 LLUICtrl::draw();
467 }
468} 460}
469 461
470BOOL LLComboBox::setCurrentByIndex( S32 index ) 462BOOL LLComboBox::setCurrentByIndex( S32 index )
@@ -494,14 +486,14 @@ void LLComboBox::updateLayout()
494 if (mAllowTextEntry) 486 if (mAllowTextEntry)
495 { 487 {
496 S32 shadow_size = LLUI::sConfigGroup->getS32("DropShadowButton"); 488 S32 shadow_size = LLUI::sConfigGroup->getS32("DropShadowButton");
497 mButton->setRect(LLRect( getRect().getWidth() - llmax(8,mArrowImage->getWidth(0)) - 2 * shadow_size, 489 mButton->setRect(LLRect( getRect().getWidth() - llmax(8,mArrowImage->getWidth()) - 2 * shadow_size,
498 rect.mTop, rect.mRight, rect.mBottom)); 490 rect.mTop, rect.mRight, rect.mBottom));
499 mButton->setTabStop(FALSE); 491 mButton->setTabStop(FALSE);
500 492
501 if (!mTextEntry) 493 if (!mTextEntry)
502 { 494 {
503 LLRect text_entry_rect(0, getRect().getHeight(), getRect().getWidth(), 0); 495 LLRect text_entry_rect(0, getRect().getHeight(), getRect().getWidth(), 0);
504 text_entry_rect.mRight -= llmax(8,mArrowImage->getWidth(0)) + 2 * LLUI::sConfigGroup->getS32("DropShadowButton"); 496 text_entry_rect.mRight -= llmax(8,mArrowImage->getWidth()) + 2 * LLUI::sConfigGroup->getS32("DropShadowButton");
505 // clear label on button 497 // clear label on button
506 LLString cur_label = mButton->getLabelSelected(); 498 LLString cur_label = mButton->getLabelSelected();
507 mTextEntry = new LLLineEditor("combo_text_entry", 499 mTextEntry = new LLLineEditor("combo_text_entry",
@@ -512,11 +504,7 @@ void LLComboBox::updateLayout()
512 onTextCommit, 504 onTextCommit,
513 onTextEntry, 505 onTextEntry,
514 NULL, 506 NULL,
515 this, 507 this);
516 NULL, // prevalidate func
517 LLViewBorder::BEVEL_NONE,
518 LLViewBorder::STYLE_LINE,
519 0); // no border
520 mTextEntry->setSelectAllonFocusReceived(TRUE); 508 mTextEntry->setSelectAllonFocusReceived(TRUE);
521 mTextEntry->setHandleEditKeysDirectly(TRUE); 509 mTextEntry->setHandleEditKeysDirectly(TRUE);
522 mTextEntry->setCommitOnFocusLost(FALSE); 510 mTextEntry->setCommitOnFocusLost(FALSE);
@@ -761,7 +749,7 @@ BOOL LLComboBox::handleToolTip(S32 x, S32 y, LLString& msg, LLRect* sticky_rect_
761 tool_tip = getToolTip(); 749 tool_tip = getToolTip();
762 if (tool_tip.empty()) 750 if (tool_tip.empty())
763 { 751 {
764 tool_tip = getValue().asString(); 752 tool_tip = getSelectedItemLabel();
765 } 753 }
766 } 754 }
767 755
@@ -780,10 +768,10 @@ BOOL LLComboBox::handleToolTip(S32 x, S32 y, LLString& msg, LLRect* sticky_rect_
780 return TRUE; 768 return TRUE;
781} 769}
782 770
783BOOL LLComboBox::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent) 771BOOL LLComboBox::handleKeyHere(KEY key, MASK mask)
784{ 772{
785 BOOL result = FALSE; 773 BOOL result = FALSE;
786 if (gFocusMgr.childHasKeyboardFocus(this)) 774 if (hasFocus())
787 { 775 {
788 //give list a chance to pop up and handle key 776 //give list a chance to pop up and handle key
789 LLScrollListItem* last_selected_item = mList->getLastSelectedItem(); 777 LLScrollListItem* last_selected_item = mList->getLastSelectedItem();
@@ -792,7 +780,7 @@ BOOL LLComboBox::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent)
792 // highlight the original selection before potentially selecting a new item 780 // highlight the original selection before potentially selecting a new item
793 mList->highlightNthItem(mList->getItemIndex(last_selected_item)); 781 mList->highlightNthItem(mList->getItemIndex(last_selected_item));
794 } 782 }
795 result = mList->handleKeyHere(key, mask, FALSE); 783 result = mList->handleKeyHere(key, mask);
796 // if selection has changed, pop open list 784 // if selection has changed, pop open list
797 if (mList->getLastSelectedItem() != last_selected_item) 785 if (mList->getLastSelectedItem() != last_selected_item)
798 { 786 {
@@ -802,7 +790,7 @@ BOOL LLComboBox::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent)
802 return result; 790 return result;
803} 791}
804 792
805BOOL LLComboBox::handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent) 793BOOL LLComboBox::handleUnicodeCharHere(llwchar uni_char)
806{ 794{
807 BOOL result = FALSE; 795 BOOL result = FALSE;
808 if (gFocusMgr.childHasKeyboardFocus(this)) 796 if (gFocusMgr.childHasKeyboardFocus(this))
@@ -816,7 +804,7 @@ BOOL LLComboBox::handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent
816 // highlight the original selection before potentially selecting a new item 804 // highlight the original selection before potentially selecting a new item
817 mList->highlightNthItem(mList->getItemIndex(last_selected_item)); 805 mList->highlightNthItem(mList->getItemIndex(last_selected_item));
818 } 806 }
819 result = mList->handleUnicodeCharHere(uni_char, called_from_parent); 807 result = mList->handleUnicodeCharHere(uni_char);
820 if (mList->getLastSelectedItem() != last_selected_item) 808 if (mList->getLastSelectedItem() != last_selected_item)
821 { 809 {
822 showList(); 810 showList();
@@ -1095,6 +1083,8 @@ BOOL LLComboBox::selectItemRange( S32 first, S32 last )
1095// LLFlyoutButton 1083// LLFlyoutButton
1096// 1084//
1097 1085
1086static LLRegisterWidget<LLFlyoutButton> r2("flyout_button");
1087
1098const S32 FLYOUT_BUTTON_ARROW_WIDTH = 24; 1088const S32 FLYOUT_BUTTON_ARROW_WIDTH = 24;
1099 1089
1100LLFlyoutButton::LLFlyoutButton( 1090LLFlyoutButton::LLFlyoutButton(
@@ -1109,9 +1099,8 @@ LLFlyoutButton::LLFlyoutButton(
1109{ 1099{
1110 // Always use text box 1100 // Always use text box
1111 // Text label button 1101 // Text label button
1112 mActionButton = new LLButton("flyout_button_main", 1102 mActionButton = new LLButton(label,
1113 LLRect(), label, NULL, LLString::null, 1103 LLRect(), LLString::null, NULL, this);
1114 NULL, this);
1115 mActionButton->setScaleImage(TRUE); 1104 mActionButton->setScaleImage(TRUE);
1116 1105
1117 mActionButton->setClickedCallback(onActionButtonClick); 1106 mActionButton->setClickedCallback(onActionButtonClick);
@@ -1120,24 +1109,24 @@ LLFlyoutButton::LLFlyoutButton(
1120 mActionButton->setLabel(label); 1109 mActionButton->setLabel(label);
1121 addChild(mActionButton); 1110 addChild(mActionButton);
1122 1111
1123 mActionButtonImage = LLUI::getUIImageByName("flyout_btn_left.tga"); 1112 mActionButtonImage = LLUI::getUIImage("flyout_btn_left.tga");
1124 mExpanderButtonImage = LLUI::getUIImageByName("flyout_btn_right.tga"); 1113 mExpanderButtonImage = LLUI::getUIImage("flyout_btn_right.tga");
1125 mActionButtonImageSelected = LLUI::getUIImageByName("flyout_btn_left_selected.tga"); 1114 mActionButtonImageSelected = LLUI::getUIImage("flyout_btn_left_selected.tga");
1126 mExpanderButtonImageSelected = LLUI::getUIImageByName("flyout_btn_right_selected.tga"); 1115 mExpanderButtonImageSelected = LLUI::getUIImage("flyout_btn_right_selected.tga");
1116 mActionButtonImageDisabled = LLUI::getUIImage("flyout_btn_left_disabled.tga");
1117 mExpanderButtonImageDisabled = LLUI::getUIImage("flyout_btn_right_disabled.tga");
1127 1118
1128 mActionButton->setImageSelected(mActionButtonImageSelected); 1119 mActionButton->setImageSelected(mActionButtonImageSelected);
1129 mActionButton->setImageUnselected(mActionButtonImage); 1120 mActionButton->setImageUnselected(mActionButtonImage);
1130 mActionButton->setImageDisabled(LLPointer<LLUIImage>(NULL)); 1121 mActionButton->setImageDisabled(mActionButtonImageDisabled);
1131 mActionButton->setImageDisabledSelected(LLPointer<LLUIImage>(NULL)); 1122 mActionButton->setImageDisabledSelected(LLPointer<LLUIImage>(NULL));
1132 1123
1133 mButton->setImageSelected(mExpanderButtonImageSelected); 1124 mButton->setImageSelected(mExpanderButtonImageSelected);
1134 mButton->setImageUnselected(mExpanderButtonImage); 1125 mButton->setImageUnselected(mExpanderButtonImage);
1135 mButton->setImageDisabled(LLPointer<LLUIImage>(NULL)); 1126 mButton->setImageDisabled(mExpanderButtonImageDisabled);
1136 mButton->setImageDisabledSelected(LLPointer<LLUIImage>(NULL)); 1127 mButton->setImageDisabledSelected(LLPointer<LLUIImage>(NULL));
1137 mButton->setRightHPad(6); 1128 mButton->setRightHPad(6);
1138 1129
1139 mBorder->setVisible(FALSE);
1140
1141 updateLayout(); 1130 updateLayout();
1142} 1131}
1143 1132