Merge remote-tracking branch 'shyotl/master'
This commit is contained in:
@@ -282,6 +282,7 @@ public:
|
||||
{
|
||||
addSetting(mStrength);
|
||||
}
|
||||
/*virtual*/ bool isEnabled() const { return LLPostProcessShader::isEnabled() && llabs(gGLModelView[0] - gGLPreviousModelView[0]) > .0000001; }
|
||||
/*virtual*/ S32 getColorChannel() const { return 0; }
|
||||
/*virtual*/ S32 getDepthChannel() const { return 1; }
|
||||
/*virtual*/ QuadType preDraw()
|
||||
@@ -298,7 +299,7 @@ public:
|
||||
getShader().uniformMatrix4fv("inv_proj", 1, GL_FALSE, inv_proj.m);
|
||||
getShader().uniform2fv("screen_res", 1, screen_rect.mV);
|
||||
getShader().uniform1i("blur_strength", mStrength);
|
||||
|
||||
|
||||
return QUAD_NORMAL;
|
||||
}
|
||||
/*virtual*/ bool draw(U32 pass)
|
||||
|
||||
@@ -64,17 +64,20 @@ LLComboBox::LLComboBox( const std::string& name, const LLRect &rect, const std::
|
||||
commit_callback_t commit_callback)
|
||||
: LLUICtrl(name, rect, TRUE, commit_callback, FOLLOWS_LEFT | FOLLOWS_TOP),
|
||||
mTextEntry(NULL),
|
||||
mArrowImage(NULL),
|
||||
mAllowTextEntry(FALSE),
|
||||
mMaxChars(20),
|
||||
mTextEntryTentative(TRUE),
|
||||
mListPosition(BELOW),
|
||||
mArrowImage(NULL),
|
||||
mHasAutocompletedText(false),
|
||||
mAllowTextEntry(false),
|
||||
mAllowNewValues(false),
|
||||
mMaxChars(20),
|
||||
mPrearrangeCallback( NULL ),
|
||||
mTextEntryCallback( NULL ),
|
||||
mListPosition(BELOW),
|
||||
mSuppressTentative( false ),
|
||||
mSuppressAutoComplete( false ),
|
||||
mLabel(label),
|
||||
mListColor(LLUI::sColorsGroup->getColor("ComboBoxBg"))
|
||||
mListColor(LLUI::sColorsGroup->getColor("ComboBoxBg")),
|
||||
mLastSelectedIndex(-1),
|
||||
mLabel(label)
|
||||
{
|
||||
// Always use text box
|
||||
// Text label button
|
||||
@@ -91,17 +94,25 @@ LLComboBox::LLComboBox( const std::string& name, const LLRect &rect, const std::
|
||||
mButton->setFont(LLFontGL::getFontSansSerifSmall());
|
||||
mButton->setFollows(FOLLOWS_LEFT | FOLLOWS_BOTTOM | FOLLOWS_RIGHT);
|
||||
mButton->setHAlign( LLFontGL::LEFT );
|
||||
mButton->setRightHPad(2);
|
||||
if(mAllowTextEntry)
|
||||
{
|
||||
mButton->setRightHPad(2);
|
||||
}
|
||||
|
||||
addChild(mButton);
|
||||
|
||||
// disallow multiple selection
|
||||
mList = new LLScrollListCtrl(std::string("ComboBox"), LLRect(),
|
||||
boost::bind(&LLComboBox::onItemSelected, this), FALSE);
|
||||
boost::bind(&LLComboBox::onItemSelected, this, _2), FALSE);
|
||||
mList->setVisible(FALSE);
|
||||
mList->setBgWriteableColor(mListColor);
|
||||
mList->setCommitOnKeyboardMovement(FALSE);
|
||||
addChild(mList);
|
||||
|
||||
// Mouse-down on button will transfer mouse focus to the list
|
||||
// Grab the mouse-up event and make sure the button state is correct
|
||||
mList->setMouseUpCallback(boost::bind(&LLComboBox::onListMouseUp, this));
|
||||
|
||||
mArrowImage = LLUI::getUIImage("combobox_arrow.tga");
|
||||
mButton->setImageOverlay("combobox_arrow.tga", LLFontGL::RIGHT);
|
||||
|
||||
@@ -234,6 +245,7 @@ void LLComboBox::clear()
|
||||
mButton->setLabelSelected(LLStringUtil::null);
|
||||
mButton->setLabelUnselected(LLStringUtil::null);
|
||||
mList->deselectAllItems();
|
||||
mLastSelectedIndex = -1;
|
||||
}
|
||||
|
||||
void LLComboBox::onCommit()
|
||||
@@ -280,6 +292,11 @@ void LLComboBox::resetDirty()
|
||||
}
|
||||
}
|
||||
|
||||
bool LLComboBox::itemExists(const std::string& name)
|
||||
{
|
||||
return mList->getItemByLabel(name);
|
||||
}
|
||||
|
||||
void LLComboBox::resetTextDirty()
|
||||
{
|
||||
if ( mTextEntry )
|
||||
@@ -358,6 +375,7 @@ BOOL LLComboBox::setSimple(const LLStringExplicit& name)
|
||||
if (found)
|
||||
{
|
||||
setLabel(name);
|
||||
mLastSelectedIndex = mList->getFirstSelectedIndex();
|
||||
}
|
||||
|
||||
return found;
|
||||
@@ -372,14 +390,19 @@ void LLComboBox::setValue(const LLSD& value)
|
||||
LLScrollListItem* item = mList->getFirstSelected();
|
||||
if (item)
|
||||
{
|
||||
setLabel( mList->getSelectedItemLabel() );
|
||||
updateLabel();
|
||||
}
|
||||
mLastSelectedIndex = mList->getFirstSelectedIndex();
|
||||
}
|
||||
else
|
||||
{
|
||||
mLastSelectedIndex = -1;
|
||||
}
|
||||
}
|
||||
|
||||
const std::string LLComboBox::getSimple() const
|
||||
{
|
||||
const std::string res = mList->getSelectedItemLabel();
|
||||
const std::string res = getSelectedItemLabel();
|
||||
if (res.empty() && mAllowTextEntry)
|
||||
{
|
||||
return mTextEntry->getText();
|
||||
@@ -421,6 +444,7 @@ void LLComboBox::setLabel(const LLStringExplicit& name)
|
||||
if (mList->selectItemByLabel(name, FALSE))
|
||||
{
|
||||
mTextEntry->setTentative(FALSE);
|
||||
mLastSelectedIndex = mList->getFirstSelectedIndex();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -435,6 +459,25 @@ void LLComboBox::setLabel(const LLStringExplicit& name)
|
||||
}
|
||||
}
|
||||
|
||||
void LLComboBox::updateLabel()
|
||||
{
|
||||
// Update the combo editor with the selected
|
||||
// item label.
|
||||
if (mTextEntry)
|
||||
{
|
||||
mTextEntry->setText(getSelectedItemLabel());
|
||||
mTextEntry->setTentative(FALSE);
|
||||
}
|
||||
|
||||
// If combo box doesn't allow text entry update
|
||||
// the combo button label.
|
||||
if (!mAllowTextEntry)
|
||||
{
|
||||
std::string label = getSelectedItemLabel();
|
||||
mButton->setLabelUnselected(label);
|
||||
mButton->setLabelSelected(label);
|
||||
}
|
||||
}
|
||||
|
||||
BOOL LLComboBox::remove(const std::string& name)
|
||||
{
|
||||
@@ -447,6 +490,7 @@ BOOL LLComboBox::remove(const std::string& name)
|
||||
{
|
||||
mList->deleteSingleItem(mList->getItemIndex(item));
|
||||
}
|
||||
mLastSelectedIndex = mList->getFirstSelectedIndex();
|
||||
}
|
||||
|
||||
return found;
|
||||
@@ -457,6 +501,7 @@ BOOL LLComboBox::remove(S32 index)
|
||||
if (index < mList->getItemCount())
|
||||
{
|
||||
mList->deleteSingleItem(index);
|
||||
setLabel(getSelectedItemLabel());
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
@@ -502,7 +547,8 @@ BOOL LLComboBox::setCurrentByIndex( S32 index )
|
||||
BOOL found = mList->selectNthItem( index );
|
||||
if (found)
|
||||
{
|
||||
setLabel(mList->getSelectedItemLabel());
|
||||
setLabel(getSelectedItemLabel());
|
||||
mLastSelectedIndex = index;
|
||||
}
|
||||
return found;
|
||||
}
|
||||
@@ -560,10 +606,12 @@ void LLComboBox::updateLayout()
|
||||
|
||||
mButton->setFollows(FOLLOWS_BOTTOM | FOLLOWS_TOP | FOLLOWS_RIGHT);
|
||||
}
|
||||
else if (!mAllowTextEntry)
|
||||
else
|
||||
{
|
||||
mButton->setRect(rect);
|
||||
mButton->setTabStop(TRUE);
|
||||
mButton->setLabelUnselected(mLabel);
|
||||
mButton->setLabelSelected(mLabel);
|
||||
|
||||
if (mTextEntry)
|
||||
{
|
||||
@@ -682,24 +730,28 @@ void LLComboBox::showList()
|
||||
|
||||
void LLComboBox::hideList()
|
||||
{
|
||||
#if 0 // Don't do this! mTextEntry->getText() can be truncated, in which case selectItemByLabel
|
||||
// fails and this only resets the selection :/
|
||||
|
||||
// *HACK: store the original value explicitly somewhere, not just in label
|
||||
std::string orig_selection = mAllowTextEntry ? mTextEntry->getText() : mButton->getLabelSelected();
|
||||
|
||||
// assert selection in list
|
||||
mList->selectItemByLabel(orig_selection, FALSE);
|
||||
#endif
|
||||
|
||||
mButton->setToggleState(FALSE);
|
||||
mList->setVisible(FALSE);
|
||||
mList->mouseOverHighlightNthItem(-1);
|
||||
|
||||
setUseBoundingRect(FALSE);
|
||||
if( gFocusMgr.getTopCtrl() == this )
|
||||
if (mList->getVisible())
|
||||
{
|
||||
gFocusMgr.setTopCtrl(NULL);
|
||||
// assert selection in list
|
||||
if(mAllowNewValues)
|
||||
{
|
||||
// mLastSelectedIndex = -1 means that we entered a new value, don't select
|
||||
// any of existing items in this case.
|
||||
if(mLastSelectedIndex >= 0)
|
||||
mList->selectNthItem(mLastSelectedIndex);
|
||||
}
|
||||
else if(mLastSelectedIndex >= 0)
|
||||
mList->selectNthItem(mLastSelectedIndex);
|
||||
|
||||
mButton->setToggleState(FALSE);
|
||||
mList->setVisible(FALSE);
|
||||
mList->mouseOverHighlightNthItem(-1);
|
||||
|
||||
setUseBoundingRect(FALSE);
|
||||
if( gFocusMgr.getTopCtrl() == this )
|
||||
{
|
||||
gFocusMgr.setTopCtrl(NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -730,10 +782,14 @@ void LLComboBox::onButtonMouseDown()
|
||||
setFocus( TRUE );
|
||||
|
||||
// pass mouse capture on to list if button is depressed
|
||||
/*if (self->mButton->hasMouseCapture())
|
||||
if (mButton->hasMouseCapture())
|
||||
{
|
||||
gFocusMgr.setMouseCapture(self->mList);
|
||||
}*/
|
||||
gFocusMgr.setMouseCapture(mList);
|
||||
|
||||
// But keep the "pressed" look, which buttons normally lose when they
|
||||
// lose focus
|
||||
mButton->setForcePressedState(true);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -742,15 +798,23 @@ void LLComboBox::onButtonMouseDown()
|
||||
|
||||
}
|
||||
|
||||
void LLComboBox::onItemSelected()
|
||||
void LLComboBox::onListMouseUp()
|
||||
{
|
||||
// Note: item is the LLScrollListCtrl
|
||||
const std::string name = mList->getSelectedItemLabel();
|
||||
// In some cases this is the termination of a mouse click that started on
|
||||
// the button, so clear its pressed state
|
||||
mButton->setForcePressedState(false);
|
||||
}
|
||||
|
||||
S32 cur_id = getCurrentIndex();
|
||||
if (cur_id != -1)
|
||||
//------------------------------------------------------------------
|
||||
// static functions
|
||||
//------------------------------------------------------------------
|
||||
|
||||
void LLComboBox::onItemSelected(const LLSD& data)
|
||||
{
|
||||
mLastSelectedIndex = getCurrentIndex();
|
||||
if (mLastSelectedIndex != -1)
|
||||
{
|
||||
setLabel(name);
|
||||
updateLabel();
|
||||
|
||||
if (mAllowTextEntry)
|
||||
{
|
||||
@@ -758,7 +822,6 @@ void LLComboBox::onItemSelected()
|
||||
mTextEntry->selectAll();
|
||||
}
|
||||
}
|
||||
|
||||
// hiding the list reasserts the old value stored in the text editor/dropdown button
|
||||
hideList();
|
||||
|
||||
@@ -879,6 +942,7 @@ void LLComboBox::setTextEntry(const LLStringExplicit& text)
|
||||
if (mTextEntry)
|
||||
{
|
||||
mTextEntry->setText(text);
|
||||
mHasAutocompletedText = FALSE;
|
||||
updateSelection();
|
||||
}
|
||||
}
|
||||
@@ -902,12 +966,14 @@ void LLComboBox::onTextEntry(LLLineEditor* line_editor)
|
||||
if (mList->selectItemByLabel(line_editor->getText(), FALSE))
|
||||
{
|
||||
line_editor->setTentative(FALSE);
|
||||
mLastSelectedIndex = mList->getFirstSelectedIndex();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!mSuppressTentative)
|
||||
line_editor->setTentative(mTextEntryTentative);
|
||||
mList->deselectAllItems();
|
||||
mLastSelectedIndex = -1;
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -964,7 +1030,7 @@ void LLComboBox::updateSelection()
|
||||
LLWString left_wstring = mTextEntry->getWText().substr(0, mTextEntry->getCursor());
|
||||
// user-entered portion of string, based on assumption that any selected
|
||||
// text was a result of auto-completion
|
||||
LLWString user_wstring = mTextEntry->hasSelection() ? left_wstring : mTextEntry->getWText();
|
||||
LLWString user_wstring = mHasAutocompletedText ? left_wstring : mTextEntry->getWText();
|
||||
std::string full_string = mTextEntry->getText();
|
||||
|
||||
// go ahead and arrange drop down list on first typed character, even
|
||||
@@ -978,21 +1044,26 @@ void LLComboBox::updateSelection()
|
||||
if (mList->selectItemByLabel(full_string, FALSE))
|
||||
{
|
||||
mTextEntry->setTentative(FALSE);
|
||||
mLastSelectedIndex = mList->getFirstSelectedIndex();
|
||||
}
|
||||
else if (!mList->selectItemByPrefix(left_wstring, FALSE))
|
||||
else if (mList->selectItemByPrefix(left_wstring, FALSE))
|
||||
{
|
||||
mList->deselectAllItems();
|
||||
mTextEntry->setText(wstring_to_utf8str(user_wstring));
|
||||
if (!mSuppressTentative) mTextEntry->setTentative(mTextEntryTentative);
|
||||
}
|
||||
else
|
||||
{
|
||||
LLWString selected_item = utf8str_to_wstring(mList->getSelectedItemLabel());
|
||||
LLWString selected_item = utf8str_to_wstring(getSelectedItemLabel());
|
||||
LLWString wtext = left_wstring + selected_item.substr(left_wstring.size(), selected_item.size());
|
||||
mTextEntry->setText(wstring_to_utf8str(wtext));
|
||||
mTextEntry->setSelection(left_wstring.size(), mTextEntry->getWText().size());
|
||||
mTextEntry->endSelection();
|
||||
mTextEntry->setTentative(FALSE);
|
||||
mHasAutocompletedText = TRUE;
|
||||
mLastSelectedIndex = mList->getFirstSelectedIndex();
|
||||
}
|
||||
else // no matching items found
|
||||
{
|
||||
mList->deselectAllItems();
|
||||
mTextEntry->setText(wstring_to_utf8str(user_wstring)); // removes text added by autocompletion
|
||||
mTextEntry->setTentative(mTextEntryTentative);
|
||||
mHasAutocompletedText = FALSE;
|
||||
mLastSelectedIndex = -1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1109,7 +1180,8 @@ BOOL LLComboBox::setCurrentByID(const LLUUID& id)
|
||||
|
||||
if (found)
|
||||
{
|
||||
setLabel(mList->getSelectedItemLabel());
|
||||
setLabel(getSelectedItemLabel());
|
||||
mLastSelectedIndex = mList->getFirstSelectedIndex();
|
||||
}
|
||||
|
||||
return found;
|
||||
@@ -1124,7 +1196,7 @@ BOOL LLComboBox::setSelectedByValue(const LLSD& value, BOOL selected)
|
||||
BOOL found = mList->setSelectedByValue(value, selected);
|
||||
if (found)
|
||||
{
|
||||
setLabel(mList->getSelectedItemLabel());
|
||||
setLabel(getSelectedItemLabel());
|
||||
}
|
||||
return found;
|
||||
}
|
||||
|
||||
@@ -123,6 +123,7 @@ public:
|
||||
LLScrollListItem* addSeparator(EAddPosition pos = ADD_BOTTOM);
|
||||
BOOL remove( S32 index ); // remove item by index, return TRUE if found and removed
|
||||
void removeall() { clearRows(); }
|
||||
bool itemExists(const std::string& name);
|
||||
|
||||
void sortByName(BOOL ascending = TRUE); // Sort the entries in the combobox by name
|
||||
|
||||
@@ -131,12 +132,15 @@ public:
|
||||
// Get name of current item. Returns an empty string if not found.
|
||||
const std::string getSimple() const;
|
||||
// Get contents of column x of selected row
|
||||
const std::string getSelectedItemLabel(S32 column = 0) const;
|
||||
virtual const std::string getSelectedItemLabel(S32 column = 0) const;
|
||||
|
||||
// Sets the label, which doesn't have to exist in the label.
|
||||
// This is probably a UI abuse.
|
||||
void setLabel(const LLStringExplicit& name);
|
||||
|
||||
// Updates the combobox label to match the selected list item.
|
||||
void updateLabel();
|
||||
|
||||
BOOL remove(const std::string& name); // remove item "name", return TRUE if found and removed
|
||||
|
||||
BOOL setCurrentByIndex( S32 index );
|
||||
@@ -185,7 +189,8 @@ public:
|
||||
void setButtonVisible(BOOL visible);
|
||||
|
||||
void onButtonMouseDown();
|
||||
void onItemSelected();
|
||||
void onListMouseUp();
|
||||
void onItemSelected(const LLSD& data);
|
||||
|
||||
void onTextCommit(const LLSD& data);
|
||||
|
||||
@@ -205,10 +210,12 @@ protected:
|
||||
EPreferredPosition mListPosition;
|
||||
LLPointer<LLUIImage> mArrowImage;
|
||||
std::string mLabel;
|
||||
BOOL mHasAutocompletedText;
|
||||
LLColor4 mListColor;
|
||||
|
||||
private:
|
||||
BOOL mAllowTextEntry;
|
||||
BOOL mAllowNewValues;
|
||||
S32 mMaxChars;
|
||||
BOOL mTextEntryTentative;
|
||||
bool mSuppressAutoComplete;
|
||||
@@ -216,6 +223,7 @@ private:
|
||||
commit_callback_t mPrearrangeCallback;
|
||||
commit_callback_t mTextEntryCallback;
|
||||
boost::signals2::connection mTopLostSignalConnection;
|
||||
S32 mLastSelectedIndex;
|
||||
};
|
||||
|
||||
class LLFlyoutButton : public LLComboBox
|
||||
|
||||
@@ -49,6 +49,11 @@ LLUICtrl::LLUICtrl() :
|
||||
mValidateSignal(NULL),
|
||||
mMouseEnterSignal(NULL),
|
||||
mMouseLeaveSignal(NULL),
|
||||
mMouseDownSignal(NULL),
|
||||
mMouseUpSignal(NULL),
|
||||
mRightMouseDownSignal(NULL),
|
||||
mRightMouseUpSignal(NULL),
|
||||
mDoubleClickSignal(NULL),
|
||||
mTentative(FALSE),
|
||||
mTabStop(TRUE),
|
||||
mIsChrome(FALSE)
|
||||
@@ -66,6 +71,11 @@ LLUICtrl::LLUICtrl(const std::string& name, const LLRect rect, BOOL mouse_opaque
|
||||
mViewModel(LLViewModelPtr(new LLViewModel)),
|
||||
mMouseEnterSignal(NULL),
|
||||
mMouseLeaveSignal(NULL),
|
||||
mMouseDownSignal(NULL),
|
||||
mMouseUpSignal(NULL),
|
||||
mRightMouseDownSignal(NULL),
|
||||
mRightMouseUpSignal(NULL),
|
||||
mDoubleClickSignal(NULL),
|
||||
mTentative( FALSE ),
|
||||
mTabStop( TRUE ),
|
||||
mIsChrome(FALSE)
|
||||
@@ -86,6 +96,13 @@ LLUICtrl::~LLUICtrl()
|
||||
|
||||
delete mCommitSignal;
|
||||
delete mValidateSignal;
|
||||
delete mMouseEnterSignal;
|
||||
delete mMouseLeaveSignal;
|
||||
delete mMouseDownSignal;
|
||||
delete mMouseUpSignal;
|
||||
delete mRightMouseDownSignal;
|
||||
delete mRightMouseUpSignal;
|
||||
delete mDoubleClickSignal;
|
||||
}
|
||||
|
||||
|
||||
@@ -107,6 +124,60 @@ void LLUICtrl::onMouseLeave(S32 x, S32 y, MASK mask)
|
||||
}
|
||||
}
|
||||
|
||||
//virtual
|
||||
BOOL LLUICtrl::handleMouseDown(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
BOOL handled = LLView::handleMouseDown(x,y,mask);
|
||||
if (mMouseDownSignal)
|
||||
{
|
||||
(*mMouseDownSignal)(this,x,y,mask);
|
||||
}
|
||||
return handled;
|
||||
}
|
||||
|
||||
//virtual
|
||||
BOOL LLUICtrl::handleMouseUp(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
BOOL handled = LLView::handleMouseUp(x,y,mask);
|
||||
if (mMouseUpSignal)
|
||||
{
|
||||
(*mMouseUpSignal)(this,x,y,mask);
|
||||
}
|
||||
return handled;
|
||||
}
|
||||
|
||||
//virtual
|
||||
BOOL LLUICtrl::handleRightMouseDown(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
BOOL handled = LLView::handleRightMouseDown(x,y,mask);
|
||||
if (mRightMouseDownSignal)
|
||||
{
|
||||
(*mRightMouseDownSignal)(this,x,y,mask);
|
||||
}
|
||||
return handled;
|
||||
}
|
||||
|
||||
//virtual
|
||||
BOOL LLUICtrl::handleRightMouseUp(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
BOOL handled = LLView::handleRightMouseUp(x,y,mask);
|
||||
if(mRightMouseUpSignal)
|
||||
{
|
||||
(*mRightMouseUpSignal)(this,x,y,mask);
|
||||
}
|
||||
return handled;
|
||||
}
|
||||
|
||||
BOOL LLUICtrl::handleDoubleClick(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
BOOL handled = LLView::handleDoubleClick(x, y, mask);
|
||||
if (mDoubleClickSignal)
|
||||
{
|
||||
(*mDoubleClickSignal)(this, x, y, mask);
|
||||
}
|
||||
return handled;
|
||||
}
|
||||
|
||||
void LLUICtrl::onCommit()
|
||||
{
|
||||
if (mCommitSignal)
|
||||
@@ -697,3 +768,33 @@ boost::signals2::connection LLUICtrl::setMouseLeaveCallback( const commit_signal
|
||||
if (!mMouseLeaveSignal) mMouseLeaveSignal = new commit_signal_t();
|
||||
return mMouseLeaveSignal->connect(cb);
|
||||
}
|
||||
|
||||
boost::signals2::connection LLUICtrl::setMouseDownCallback( const mouse_signal_t::slot_type& cb )
|
||||
{
|
||||
if (!mMouseDownSignal) mMouseDownSignal = new mouse_signal_t();
|
||||
return mMouseDownSignal->connect(cb);
|
||||
}
|
||||
|
||||
boost::signals2::connection LLUICtrl::setMouseUpCallback( const mouse_signal_t::slot_type& cb )
|
||||
{
|
||||
if (!mMouseUpSignal) mMouseUpSignal = new mouse_signal_t();
|
||||
return mMouseUpSignal->connect(cb);
|
||||
}
|
||||
|
||||
boost::signals2::connection LLUICtrl::setRightMouseDownCallback( const mouse_signal_t::slot_type& cb )
|
||||
{
|
||||
if (!mRightMouseDownSignal) mRightMouseDownSignal = new mouse_signal_t();
|
||||
return mRightMouseDownSignal->connect(cb);
|
||||
}
|
||||
|
||||
boost::signals2::connection LLUICtrl::setRightMouseUpCallback( const mouse_signal_t::slot_type& cb )
|
||||
{
|
||||
if (!mRightMouseUpSignal) mRightMouseUpSignal = new mouse_signal_t();
|
||||
return mRightMouseUpSignal->connect(cb);
|
||||
}
|
||||
|
||||
boost::signals2::connection LLUICtrl::setDoubleClickCallback( const mouse_signal_t::slot_type& cb )
|
||||
{
|
||||
if (!mDoubleClickSignal) mDoubleClickSignal = new mouse_signal_t();
|
||||
return mDoubleClickSignal->connect(cb);
|
||||
}
|
||||
|
||||
@@ -49,6 +49,7 @@ class LLUICtrl
|
||||
public:
|
||||
typedef boost::function<void (LLUICtrl* ctrl, const LLSD& param)> commit_callback_t;
|
||||
typedef boost::signals2::signal<void (LLUICtrl* ctrl, const LLSD& param)> commit_signal_t;
|
||||
typedef boost::signals2::signal<void (LLUICtrl* ctrl, S32 x, S32 y, MASK mask)> mouse_signal_t;
|
||||
typedef boost::function<bool (LLUICtrl* ctrl, const LLSD& param)> enable_callback_t;
|
||||
typedef boost::signals2::signal<bool (LLUICtrl* ctrl, const LLSD& param), boost_boolean_combiner> enable_signal_t;
|
||||
|
||||
@@ -69,6 +70,11 @@ public:
|
||||
/*virtual*/ BOOL isCtrl() const;
|
||||
/*virtual*/ void onMouseEnter(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ BOOL handleRightMouseUp(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
|
||||
|
||||
// From LLFocusableElement
|
||||
/*virtual*/ void setFocus( BOOL b );
|
||||
@@ -132,6 +138,14 @@ public:
|
||||
|
||||
boost::signals2::connection setMouseEnterCallback( const commit_signal_t::slot_type& cb );
|
||||
boost::signals2::connection setMouseLeaveCallback( const commit_signal_t::slot_type& cb );
|
||||
|
||||
boost::signals2::connection setMouseDownCallback( const mouse_signal_t::slot_type& cb );
|
||||
boost::signals2::connection setMouseUpCallback( const mouse_signal_t::slot_type& cb );
|
||||
boost::signals2::connection setRightMouseDownCallback( const mouse_signal_t::slot_type& cb );
|
||||
boost::signals2::connection setRightMouseUpCallback( const mouse_signal_t::slot_type& cb );
|
||||
|
||||
boost::signals2::connection setDoubleClickCallback( const mouse_signal_t::slot_type& cb );
|
||||
|
||||
// *TODO: Deprecate; for backwards compatability only:
|
||||
boost::signals2::connection setCommitCallback( boost::function<void (LLUICtrl*,void*)> cb, void* data);
|
||||
boost::signals2::connection setValidateBeforeCommit( boost::function<bool (const LLSD& data)> cb );
|
||||
@@ -165,6 +179,13 @@ protected:
|
||||
commit_signal_t* mMouseEnterSignal;
|
||||
commit_signal_t* mMouseLeaveSignal;
|
||||
|
||||
mouse_signal_t* mMouseDownSignal;
|
||||
mouse_signal_t* mMouseUpSignal;
|
||||
mouse_signal_t* mRightMouseDownSignal;
|
||||
mouse_signal_t* mRightMouseUpSignal;
|
||||
|
||||
mouse_signal_t* mDoubleClickSignal;
|
||||
|
||||
LLViewModelPtr mViewModel;
|
||||
|
||||
LLControlVariable* mMakeVisibleControlVariable;
|
||||
|
||||
@@ -63,7 +63,25 @@ LLDir_Win32::LLDir_Win32()
|
||||
//
|
||||
// We used to store the cache in AppData\Roaming, and the installer
|
||||
// cleans up that version on upgrade. JC
|
||||
SHGetSpecialFolderPath(NULL, w_str, CSIDL_LOCAL_APPDATA, TRUE);
|
||||
|
||||
if(HMODULE shell = LoadLibrary(L"shell32")) //SHGetSpecialFolderPath is deprecated from Vista an onwards. Try to use SHGetSpecialFolderPath if it's available
|
||||
{
|
||||
HRESULT (WINAPI* pSHGetKnownFolderPath)(REFKNOWNFOLDERID rfid, DWORD dwFlags, HANDLE hToken, PWSTR *ppszPath);
|
||||
pSHGetKnownFolderPath = (HRESULT (WINAPI *)(REFKNOWNFOLDERID, DWORD, HANDLE, PWSTR *))GetProcAddress(shell, "SHGetKnownFolderPath");
|
||||
WCHAR* pPath = NULL;
|
||||
if(pSHGetKnownFolderPath && (*pSHGetKnownFolderPath)(FOLDERID_LocalAppData, 0, NULL, &pPath) == S_OK)
|
||||
wcscpy_s(w_str,pPath);
|
||||
else
|
||||
SHGetSpecialFolderPath(NULL, w_str, CSIDL_LOCAL_APPDATA, TRUE);
|
||||
|
||||
FreeLibrary(shell);
|
||||
if(pPath)
|
||||
CoTaskMemFree(pPath);
|
||||
}
|
||||
else //XP doesn't support SHGetKnownFolderPath
|
||||
{
|
||||
SHGetSpecialFolderPath(NULL, w_str, CSIDL_LOCAL_APPDATA, TRUE);
|
||||
}
|
||||
mOSCacheDir = utf16str_to_utf8str(llutf16string(w_str));
|
||||
|
||||
if (GetTempPath(MAX_PATH, w_str))
|
||||
|
||||
@@ -44,7 +44,9 @@ void main(void)
|
||||
vec4 prev_pos = prev_proj * pos;
|
||||
prev_pos/=prev_pos.w;
|
||||
prev_pos.w = 1.0;
|
||||
vec2 vel = ((ndc.xy-prev_pos.xy) * .5) * screen_res * .001 * blur_strength;
|
||||
vec2 vel = ((ndc.xy-prev_pos.xy) * .5) * screen_res * .01 * blur_strength * 1.0/SAMPLE_COUNT;
|
||||
float len = length(vel);
|
||||
vel = normalize(vel) * min(len, 50);
|
||||
vec3 color = texture2DRect(tex0, vary_texcoord0.st).rgb;
|
||||
vec2 texcoord = vary_texcoord0 + vel;
|
||||
for(int i = 1; i < SAMPLE_COUNT; ++i, texcoord += vel)
|
||||
|
||||
@@ -646,6 +646,8 @@ HippoGridManager::HippoGridManager() :
|
||||
HippoGridManager::~HippoGridManager()
|
||||
{
|
||||
cleanup();
|
||||
if(mCurrentGridChangeSignal)
|
||||
delete mCurrentGridChangeSignal;
|
||||
}
|
||||
|
||||
|
||||
@@ -805,6 +807,7 @@ void HippoGridManager::setDefaultGrid(const std::string& grid)
|
||||
|
||||
void HippoGridManager::setCurrentGrid(const std::string& grid)
|
||||
{
|
||||
HippoGridInfo* prevGrid = getGrid(mCurrentGrid);
|
||||
GridIterator it = mGridInfo.find(grid);
|
||||
if (it != mGridInfo.end())
|
||||
{
|
||||
@@ -815,6 +818,8 @@ void HippoGridManager::setCurrentGrid(const std::string& grid)
|
||||
llwarns << "Unknown grid '" << grid << "'. Setting to default grid." << llendl;
|
||||
mCurrentGrid = mDefaultGrid;
|
||||
}
|
||||
if(mCurrentGridChangeSignal)
|
||||
(*mCurrentGridChangeSignal)(getGrid(mCurrentGrid),prevGrid);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
#include "expat/expat.h"
|
||||
#endif
|
||||
|
||||
#include <boost/signals2.hpp>
|
||||
|
||||
class LLSD;
|
||||
|
||||
|
||||
@@ -152,6 +154,8 @@ private:
|
||||
class HippoGridManager
|
||||
{
|
||||
public:
|
||||
typedef boost::signals2::signal<void (HippoGridInfo* pNewGrid, HippoGridInfo* pPrevGrid)> current_grid_change_signal_t;
|
||||
|
||||
HippoGridManager();
|
||||
~HippoGridManager();
|
||||
|
||||
@@ -179,6 +183,13 @@ public:
|
||||
GridIterator beginGrid() { return mGridInfo.begin(); }
|
||||
GridIterator endGrid() { return mGridInfo.end(); }
|
||||
|
||||
boost::signals2::connection setCurrentGridChangeCallback( const current_grid_change_signal_t::slot_type& cb )
|
||||
{
|
||||
if(!mCurrentGridChangeSignal)
|
||||
mCurrentGridChangeSignal = new current_grid_change_signal_t;
|
||||
return mCurrentGridChangeSignal->connect(cb);
|
||||
}
|
||||
|
||||
private:
|
||||
friend class HippoGridInfo;
|
||||
std::map<std::string, HippoGridInfo*> mGridInfo;
|
||||
@@ -187,6 +198,8 @@ private:
|
||||
HippoGridInfo* mConnectedGrid;
|
||||
int mDefaultGridsVersion;
|
||||
|
||||
current_grid_change_signal_t* mCurrentGridChangeSignal;
|
||||
|
||||
void cleanup();
|
||||
void loadFromFile();
|
||||
void parseFile(const std::string& fileName, bool mergeIfNewer);
|
||||
|
||||
@@ -227,7 +227,6 @@ void HippoPanelGridsImpl::apply()
|
||||
// adding new grid did not fail
|
||||
gHippoGridManager->setCurrentGrid(mCurGrid);
|
||||
}
|
||||
LLPanelLogin::refreshLoginPage();
|
||||
gHippoGridManager->saveFile();
|
||||
refresh();
|
||||
// update render compatibility
|
||||
|
||||
@@ -2332,7 +2332,6 @@ bool LLAppViewer::initConfiguration()
|
||||
if(LLStartUp::getStartSLURL().getType() == LLSLURL::LOCATION)
|
||||
{
|
||||
gHippoGridManager->setCurrentGrid(LLStartUp::getStartSLURL().getGrid());
|
||||
|
||||
}
|
||||
}
|
||||
else if(clp.hasOption("slurl"))
|
||||
|
||||
@@ -216,15 +216,8 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
|
||||
setBackgroundVisible(FALSE);
|
||||
setBackgroundOpaque(TRUE);
|
||||
|
||||
// instance management
|
||||
if (LLPanelLogin::sInstance)
|
||||
{
|
||||
LL_WARNS("AppInit") << "Duplicate instance of login view deleted" << LL_ENDL;
|
||||
// Don't leave bad pointer in gFocusMgr
|
||||
gFocusMgr.setDefaultKeyboardFocus(NULL);
|
||||
|
||||
delete LLPanelLogin::sInstance;
|
||||
}
|
||||
gViewerWindow->abortShowProgress(); //Kill previous instance. It might still be alive, and if so, its probably pending
|
||||
//deletion via the progressviews idle callback. Kill it now and unregister said idle callback.
|
||||
|
||||
LLPanelLogin::sInstance = this;
|
||||
|
||||
@@ -285,9 +278,8 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
|
||||
{
|
||||
LL_INFOS("AppInit")<<"no valid LoginLocation, using home"<<LL_ENDL;
|
||||
LLSLURL homeStart(LLSLURL::SIM_LOCATION_HOME);
|
||||
LLStartUp::setStartSLURL(homeStart);
|
||||
LLStartUp::setStartSLURL(homeStart); // calls onUpdateStartSLURL
|
||||
}
|
||||
start_slurl = LLStartUp::getStartSLURL(); // calls onUpdateStartSLURL
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -326,9 +318,9 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
|
||||
|
||||
reshapeBrowser();
|
||||
|
||||
loadLoginPage();
|
||||
|
||||
refreshLoginPage();
|
||||
|
||||
gHippoGridManager->setCurrentGridChangeCallback(boost::bind(&LLPanelLogin::onCurGridChange,this,_1,_2));
|
||||
}
|
||||
|
||||
void LLPanelLogin::setSiteIsAlive( bool alive )
|
||||
@@ -638,7 +630,6 @@ void LLPanelLogin::setFields(const LLSavedLoginEntry& entry, bool takeFocus)
|
||||
if(!grid.empty() && gHippoGridManager->getGrid(grid) && grid != gHippoGridManager->getCurrentGridName())
|
||||
{
|
||||
gHippoGridManager->setCurrentGrid(grid);
|
||||
LLPanelLogin::refreshLoginPage();
|
||||
}
|
||||
|
||||
if (entry.getPassword().empty())
|
||||
@@ -709,13 +700,10 @@ void LLPanelLogin::updateLocationSelectorsVisibility()
|
||||
#endif // RLV_EXTENSION_STARTLOCATION
|
||||
// [/RLVa:KB]
|
||||
|
||||
sInstance->getChild<LLComboBox>("start_location_combo")->setVisible(show_start); // maintain ShowStartLocation if legacy
|
||||
sInstance->getChild<LLTextBox>("start_location_text")->setVisible(show_start);
|
||||
sInstance->getChildView("location_panel")->setVisible(show_start);
|
||||
|
||||
bool show_server = true;
|
||||
sInstance->getChild<LLComboBox>("grids_combo")->setVisible(show_server);
|
||||
sInstance->getChild<LLTextBox>("grids_text")->setVisible(show_server);
|
||||
sInstance->getChild<LLButton>("grids_btn")->setVisible(show_server);
|
||||
bool show_server = true;
|
||||
sInstance->getChildView("grids_panel")->setVisible(show_server);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -745,6 +733,7 @@ void LLPanelLogin::onUpdateStartSLURL(const LLSLURL& new_start_slurl)
|
||||
location_combo->setCurrentByIndex( 2 );
|
||||
location_combo->setTextEntry(new_start_slurl.getLocationString());
|
||||
}
|
||||
break;
|
||||
case LLSLURL::HOME_LOCATION:
|
||||
location_combo->setCurrentByIndex( 0 ); // home location
|
||||
break;
|
||||
@@ -1036,6 +1025,17 @@ void LLPanelLogin::onPassKey(LLLineEditor* caller)
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelLogin::onCurGridChange(HippoGridInfo* new_grid, HippoGridInfo* old_grid)
|
||||
{
|
||||
refreshLoginPage();
|
||||
if(old_grid != new_grid) //Changed grid? Reset the location combobox
|
||||
{
|
||||
std::string defaultStartLocation = gSavedSettings.getString("LoginLocation");
|
||||
LLSLURL defaultStart(defaultStartLocation);
|
||||
LLStartUp::setStartSLURL(defaultStart.isSpatial() ? defaultStart : LLSLURL(LLSLURL::SIM_LOCATION_HOME)); // calls onUpdateStartSLURL
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
//void LLPanelLogin::updateServer()
|
||||
void LLPanelLogin::refreshLoginPage()
|
||||
@@ -1080,7 +1080,6 @@ void LLPanelLogin::refreshLoginPage()
|
||||
void LLPanelLogin::onSelectGrid(LLUICtrl *ctrl)
|
||||
{
|
||||
gHippoGridManager->setCurrentGrid(ctrl->getValue());
|
||||
LLPanelLogin::refreshLoginPage();
|
||||
}
|
||||
|
||||
void LLPanelLogin::onLocationSLURL()
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
|
||||
class LLUIImage;
|
||||
class LLComboBox;
|
||||
class HippoGridInfo;
|
||||
|
||||
class LLPanelLogin:
|
||||
public LLPanel,
|
||||
@@ -92,6 +93,7 @@ public:
|
||||
|
||||
void updateGridCombo();
|
||||
|
||||
void onCurGridChange(HippoGridInfo* new_grid, HippoGridInfo* old_grid);
|
||||
static void loadLoginPage();
|
||||
static void refreshLoginPage();
|
||||
static void giveFocus();
|
||||
|
||||
@@ -134,6 +134,14 @@ void LLProgressView::revealIntroPanel()
|
||||
mFadeFromLoginTimer.start();
|
||||
gIdleCallbacks.addFunction(onIdle, this);
|
||||
}
|
||||
|
||||
void LLProgressView::abortShowProgress()
|
||||
{
|
||||
mFadeFromLoginTimer.stop();
|
||||
LLPanelLogin::close();
|
||||
gIdleCallbacks.deleteFunction(onIdle, this);
|
||||
}
|
||||
|
||||
void LLProgressView::setStartupComplete()
|
||||
{
|
||||
mStartupComplete = true;
|
||||
|
||||
@@ -62,6 +62,7 @@ public:
|
||||
void setMessage(const std::string& msg);
|
||||
|
||||
void revealIntroPanel();
|
||||
void abortShowProgress();
|
||||
|
||||
void setStartupComplete();
|
||||
|
||||
|
||||
@@ -2187,6 +2187,38 @@ public:
|
||||
private:
|
||||
std::set< LLViewerFetchedTexture*> mTextures;
|
||||
};
|
||||
|
||||
void reload_objects(LLTextureReloader& texture_list, LLViewerObject::const_child_list_t& object_list, bool recurse)
|
||||
{
|
||||
for(LLViewerObject::const_child_list_t::const_iterator it = object_list.begin(); it!=object_list.end(); ++it)
|
||||
{
|
||||
if(it->isNull())
|
||||
continue;
|
||||
|
||||
LLViewerObject* object = it->get();
|
||||
object->markForUpdate(TRUE);
|
||||
|
||||
if(object->isSculpted() && !object->isMesh())
|
||||
{
|
||||
LLSculptParams *sculpt_params = (LLSculptParams *)object->getParameterEntry(LLNetworkData::PARAMS_SCULPT);
|
||||
if(sculpt_params)
|
||||
{
|
||||
texture_list.addTexture(LLViewerTextureManager::getFetchedTexture(sculpt_params->getSculptTexture()));
|
||||
}
|
||||
}
|
||||
|
||||
for (U8 i = 0; i < object->getNumTEs(); i++)
|
||||
{
|
||||
texture_list.addTexture(object->getTEImage(i));
|
||||
}
|
||||
|
||||
if(recurse)
|
||||
{
|
||||
reload_objects(texture_list,object->getChildren(), true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class LLAvatarReloadTextures : public view_listener_t
|
||||
{
|
||||
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
|
||||
@@ -2215,6 +2247,7 @@ class LLAvatarReloadTextures : public view_listener_t
|
||||
texture_list.addTexture(avatar->getTEImage((ETextureIndex)i));
|
||||
}
|
||||
}
|
||||
reload_objects(texture_list,avatar->getChildren(),true);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -2223,30 +2256,16 @@ class LLObjectReloadTextures : public view_listener_t
|
||||
{
|
||||
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
|
||||
{
|
||||
LLTextureReloader texture_list;
|
||||
for (LLObjectSelection::valid_iterator iter = LLSelectMgr::getInstance()->getSelection()->valid_begin();
|
||||
iter != LLSelectMgr::getInstance()->getSelection()->valid_end(); iter++)
|
||||
{
|
||||
LLViewerObject* object = (*iter)->getObject();
|
||||
object->markForUpdate(TRUE);
|
||||
LLViewerObject::vobj_list_t object_list;
|
||||
|
||||
if(object->isSculpted() && !object->isMesh())
|
||||
{
|
||||
LLSculptParams *sculpt_params = (LLSculptParams *)object->getParameterEntry(LLNetworkData::PARAMS_SCULPT);
|
||||
if(sculpt_params)
|
||||
{
|
||||
texture_list.addTexture(LLViewerTextureManager::getFetchedTexture(sculpt_params->getSculptTexture()));
|
||||
}
|
||||
}
|
||||
|
||||
for (U8 i = 0; i < object->getNumTEs(); i++)
|
||||
{
|
||||
if((*iter)->isTESelected(i))
|
||||
{
|
||||
texture_list.addTexture(object->getTEImage(i));
|
||||
}
|
||||
}
|
||||
for (LLObjectSelection::iterator iter = LLSelectMgr::getInstance()->getSelection()->begin();
|
||||
iter != LLSelectMgr::getInstance()->getSelection()->end(); iter++)
|
||||
{
|
||||
object_list.push_back((*iter)->getObject());
|
||||
}
|
||||
|
||||
reload_objects(LLTextureReloader(),object_list,false);
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -5154,6 +5154,14 @@ void LLViewerWindow::revealIntroPanel()
|
||||
}
|
||||
}
|
||||
|
||||
void LLViewerWindow::abortShowProgress()
|
||||
{
|
||||
if (mProgressView)
|
||||
{
|
||||
mProgressView->abortShowProgress();
|
||||
}
|
||||
}
|
||||
|
||||
void LLViewerWindow::setShowProgress(const BOOL show)
|
||||
{
|
||||
if (mProgressView)
|
||||
|
||||
@@ -280,6 +280,7 @@ public:
|
||||
void setProgressCancelButtonVisible( BOOL b, const std::string& label = LLStringUtil::null );
|
||||
LLProgressView *getProgressView() const;
|
||||
void revealIntroPanel();
|
||||
void abortShowProgress();
|
||||
void setStartupComplete();
|
||||
|
||||
void updateObjectUnderCursor();
|
||||
|
||||
@@ -13,72 +13,81 @@
|
||||
<string name="forgot_password_url">
|
||||
http://secondlife.com/account/request.php
|
||||
</string>
|
||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||
bottom="54" drop_shadow_visible="true" follows="left|bottom"
|
||||
<layout_stack name="element_stack" border_size="0" left="28" right="800" top="70" bottom="10" follows="left|bottom" orientation="horizontal">
|
||||
<layout_panel name="name_panel" left="0" user_resize="false" auto_resize="false" width="163" min_width="0">
|
||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||
bottom="44" drop_shadow_visible="true" follows="left|bottom"
|
||||
font="SansSerif" h_pad="0" halign="left" height="16"
|
||||
left="32" mouse_opaque="true" name="name_label" v_pad="0" width="120">
|
||||
Name or Username:
|
||||
</text>
|
||||
<combo_box bevel_style="in" border_style="line" border_thickness="1" bottom_delta="-24"
|
||||
font="SansSerif" handle_edit_keys_directly="true" height="20" left="32"
|
||||
max_chars="64" mouse_opaque="true" name="name_combo"
|
||||
select_all_on_focus_received="true" width="155" allow_text_entry="true" />
|
||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||
bottom="54" drop_shadow_visible="true" follows="left|bottom"
|
||||
font="SansSerif" h_pad="0" halign="left" height="16"
|
||||
left="203" mouse_opaque="true" name="password_text" v_pad="0" width="120">
|
||||
Password:
|
||||
</text>
|
||||
<line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="-24"
|
||||
follows="left|bottom" font="SansSerifSmall" handle_edit_keys_directly="true"
|
||||
height="20" left="203" max_length="16" mouse_opaque="true"
|
||||
name="password_edit" select_all_on_focus_received="true" width="120" />
|
||||
<check_box bottom="10" control_name="RememberName"
|
||||
left="4" mouse_opaque="true" name="name_label" v_pad="0" width="120">
|
||||
Name or Username:
|
||||
</text>
|
||||
<combo_box bevel_style="in" border_style="line" border_thickness="1" bottom_delta="-24"
|
||||
font="SansSerif" handle_edit_keys_directly="true" height="20" left="4"
|
||||
max_chars="64" mouse_opaque="true" name="name_combo"
|
||||
select_all_on_focus_received="true" width="155" allow_text_entry="true" />
|
||||
<check_box bottom="0" control_name="RememberName"
|
||||
follows="left|bottom" font="SansSerifSmall" height="16"
|
||||
initial_value="true" label="Remember name"
|
||||
left="28" mouse_opaque="true" name="remember_name_check" width="158" />
|
||||
<check_box bottom="10" control_name="RememberPassword"
|
||||
follows="left|bottom" font="SansSerifSmall" height="16"
|
||||
initial_value="false" label="Remember password"
|
||||
left="199" mouse_opaque="true" name="remember_check" width="138" />
|
||||
|
||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||
bottom="54" drop_shadow_visible="true" follows="left|bottom"
|
||||
initial_value="true" label="Remember name"
|
||||
left="0" mouse_opaque="true" name="remember_name_check" width="158" />
|
||||
</layout_panel>
|
||||
<layout_panel name="password_panel" left="0" user_resize="false" auto_resize="false" width="134" min_width="0">
|
||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||
bottom="44" drop_shadow_visible="true" follows="left|bottom"
|
||||
font="SansSerif" h_pad="0" halign="left" height="16"
|
||||
left="339" mouse_opaque="true" name="grids_combo_text" v_pad="0" width="120">
|
||||
Grid:
|
||||
</text>
|
||||
<combo_box allow_text_entry="false" bottom_delta="-24" follows="left|bottom" height="20"
|
||||
left="339" mouse_opaque="true" name="grids_combo" width="120" />
|
||||
|
||||
<button name="grids_btn" label="Grid Manager"
|
||||
bottom_delta="-20" left_delta="10" height="16" width="100"
|
||||
follows="left|bottom" font="SansSerifSmall" halign="center"
|
||||
mouse_opaque="true" scale_image="TRUE" />
|
||||
|
||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||
bottom="54" drop_shadow_visible="true" follows="left|bottom"
|
||||
left="4" mouse_opaque="true" name="password_text" v_pad="0" width="120">
|
||||
Password:
|
||||
</text>
|
||||
<line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="-24"
|
||||
follows="left|bottom" font="SansSerifSmall" handle_edit_keys_directly="true"
|
||||
height="20" left="4" max_length="16" mouse_opaque="true"
|
||||
name="password_edit" select_all_on_focus_received="true" width="120" />
|
||||
<check_box bottom="0" control_name="RememberPassword"
|
||||
follows="left|bottom" font="SansSerifSmall" height="16"
|
||||
initial_value="false" label="Remember password"
|
||||
left="0" mouse_opaque="true" name="remember_check" width="138" />
|
||||
</layout_panel>
|
||||
<layout_panel name="grids_panel" left="0" user_resize="false" auto_resize="false" width="129" min_width="0">
|
||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||
bottom="44" drop_shadow_visible="true" follows="left|bottom"
|
||||
font="SansSerif" h_pad="0" halign="left" height="16"
|
||||
left="475" mouse_opaque="true" name="start_location_text" v_pad="0" width="120">
|
||||
Start Location:
|
||||
</text>
|
||||
<combo_box allow_text_entry="true" bottom_delta="-24" left="475" follows="left|bottom" height="20"
|
||||
max_chars="128" mouse_opaque="true" name="start_location_combo" width="155">
|
||||
<combo_item name="MyHome" value="home">
|
||||
My Home
|
||||
</combo_item>
|
||||
<combo_item name="MyLastLocation" value="last">
|
||||
My Last Location
|
||||
</combo_item>
|
||||
<combo_item name="Typeregionname" value="<Type region name>">
|
||||
<Type region name>
|
||||
</combo_item>
|
||||
</combo_box>
|
||||
|
||||
<button bottom_delta="-3" follows="left|bottom" font="SansSerif" halign="center"
|
||||
left="0" mouse_opaque="true" name="grids_combo_text" v_pad="0" width="120">
|
||||
Grid:
|
||||
</text>
|
||||
<combo_box allow_text_entry="false" bottom_delta="-24" follows="left|bottom" height="20"
|
||||
left="0" mouse_opaque="true" name="grids_combo" width="120" />
|
||||
<button name="grids_btn" label="Grid Manager"
|
||||
bottom_delta="-20" left_delta="10" height="16" width="100"
|
||||
follows="left|bottom" font="SansSerifSmall" halign="center"
|
||||
mouse_opaque="true" scale_image="TRUE" />
|
||||
</layout_panel>
|
||||
<layout_panel name="location_panel" left="0" user_resize="false" auto_resize="false" width="165" min_width="0">
|
||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||
bottom="44" drop_shadow_visible="true" follows="left|bottom"
|
||||
font="SansSerif" h_pad="0" halign="left" height="16"
|
||||
left="0" mouse_opaque="true" name="start_location_text" v_pad="0" width="120">
|
||||
Start Location:
|
||||
</text>
|
||||
<combo_box allow_text_entry="true" bottom_delta="-24" left="0" follows="left|bottom" height="20"
|
||||
max_chars="128" mouse_opaque="true" name="start_location_combo" width="155">
|
||||
<combo_item name="MyHome" value="home">
|
||||
My Home
|
||||
</combo_item>
|
||||
<combo_item name="MyLastLocation" value="last">
|
||||
My Last Location
|
||||
</combo_item>
|
||||
<combo_item name="Typeregionname" value="">
|
||||
<Type region name>
|
||||
</combo_item>
|
||||
</combo_box>
|
||||
</layout_panel>
|
||||
<layout_panel name="connect_panel" user_resize="false" auto_resize="true" width="100" min_width="100">
|
||||
<button bottom="18" follows="left|bottom" font="SansSerif" halign="center"
|
||||
height="24" label="Log In" label_selected="Log In"
|
||||
left="634" mouse_opaque="true" name="connect_btn" scale_image="TRUE"
|
||||
left="0" mouse_opaque="true" name="connect_btn" scale_image="TRUE"
|
||||
width="100" />
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
|
||||
|
||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||
bottom="45" drop_shadow_visible="true" follows="right|bottom"
|
||||
|
||||
@@ -1,46 +1,48 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel name="panel_login">
|
||||
<string name="real_url">
|
||||
http://secondlife.com/app/login/
|
||||
</string>
|
||||
<string name="forgot_password_url">
|
||||
http://secondlife.com/account/request.ph
|
||||
</string>
|
||||
<text name="name_label">
|
||||
Nombre o Usuario:
|
||||
</text>
|
||||
<combo_box name="name_combo" />
|
||||
<text name="password_text">
|
||||
Contraseña:
|
||||
</text>
|
||||
<check_box label="Recordar Nombre" name="remember_name_check"/>
|
||||
<check_box label="Recordar Contraseña" name="remember_check" width="138" />
|
||||
<text name="grids_combo_text">
|
||||
Grid:
|
||||
</text>
|
||||
<button name="grids_btn" label="Administrar Grid"/>
|
||||
<text name="start_location_text" v_pad="0" width="120">
|
||||
Posición Inicial:
|
||||
</text>
|
||||
<combo_box name="start_location_combo" width="155">
|
||||
<combo_item name="MyHome" value="My Home">
|
||||
Mi Base
|
||||
</combo_item>
|
||||
<combo_item name="MyLastLocation" value="My Last Location">
|
||||
Mi Última Ubicación
|
||||
</combo_item>
|
||||
<combo_item name="Typeregionname" value="<Type region name>">
|
||||
<Escribe el Nombre de la Región>
|
||||
</combo_item>
|
||||
</combo_box>
|
||||
<button label="Iniciar Sesión" label_selected="Iniciar Sesión" name="connect_btn" width="100" />
|
||||
<text name="create_new_account_text" width="200">
|
||||
<layout_stack name="element_stack">
|
||||
<layout_panel name="name_panel">
|
||||
<text name="name_label">
|
||||
Nombre o Usuario:
|
||||
</text>
|
||||
<check_box label="Recordar Nombre" name="remember_name_check"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="password_panel">
|
||||
<text name="password_text">
|
||||
Contraseña:
|
||||
</text>
|
||||
<check_box label="Recordar Contraseña" name="remember_check"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="grids_panel">
|
||||
<text name="grids_combo_text">
|
||||
Grid:
|
||||
</text>
|
||||
<button name="grids_btn" label="Administrar Grid"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="location_panel">
|
||||
<text name="start_location_text">
|
||||
Posición Inicial:
|
||||
</text>
|
||||
<combo_box name="start_location_combo">
|
||||
<combo_item name="MyHome">
|
||||
Mi Base
|
||||
</combo_item>
|
||||
<combo_item name="MyLastLocation">
|
||||
Mi Última Ubicación
|
||||
</combo_item>
|
||||
<combo_item name="Typeregionname">
|
||||
<Escribe el Nombre de la Región>
|
||||
</combo_item>
|
||||
</combo_box>
|
||||
</layout_panel>
|
||||
<layout_panel name="connect_panel">
|
||||
<button label="Iniciar Sesión" label_selected="Iniciar Sesión" name="connect_btn"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
<text name="create_new_account_text">
|
||||
Registrate para obtener una Cuenta
|
||||
</text>
|
||||
<text name="forgot_password_text" width="200">
|
||||
<text name="forgot_password_text">
|
||||
¿Olvidaste tu Nombre o tu Contraseña?
|
||||
</text>
|
||||
<text name="channel_text">
|
||||
[CHANNEL] [VERSION]
|
||||
</text>
|
||||
</panel>
|
||||
|
||||
@@ -1,49 +1,44 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel name="panel_login">
|
||||
<web_browser name="login_html" />
|
||||
<string name="real_url">
|
||||
http://secondlife.com/app/login/
|
||||
</string>
|
||||
<string name="forgot_password_url">
|
||||
http://secondlife.com/account/request.php
|
||||
</string>
|
||||
<text left="32" name="name_label" width="120">
|
||||
Nom:
|
||||
</text>
|
||||
<text name="password_text">
|
||||
Mot de passe:
|
||||
</text>
|
||||
<text name="start_location_text">
|
||||
Lieu d'arrivée:
|
||||
</text>
|
||||
<combo_box name="start_location_combo">
|
||||
<combo_item name="MyHome">
|
||||
Domicile
|
||||
</combo_item>
|
||||
<combo_item name="MyLastLocation">
|
||||
Dernier emplacement
|
||||
</combo_item>
|
||||
<combo_item name="<Typeregionname>">
|
||||
<Choisir région>
|
||||
</combo_item>
|
||||
<combo_item name="Typeregionname">
|
||||
<Nom de la région>
|
||||
</combo_item>
|
||||
</combo_box>
|
||||
<check_box bottom="10" label="Mémoriser le nom" left="28" name="remember_name_check" width="158"/>
|
||||
<check_box label="Mémoriser mot de passe" name="remember_check"/>
|
||||
<text bottom="54" left="339" name="grids_combo_text" width="120">
|
||||
Grille:
|
||||
</text>
|
||||
<combo_box bottom_delta="-24" left="339" name="grids_combo" width="120" />
|
||||
<button name="grids_btn" label="Choix de Grille" bottom_delta="-20" left_delta="10" width="100"/>
|
||||
<text name="full_screen_text">
|
||||
Le plein écran sera activé après identification.
|
||||
</text>
|
||||
<button label="Nouveau Compte" label_selected="Nouveau Compte" name="new_account_btn"/>
|
||||
<button label="Connexion" label_selected="Me connecter" name="connect_btn"/>
|
||||
<button label="Préférences" label_selected="Préférences" name="preferences_btn"/>
|
||||
<button label="Quitter" label_selected="Quitter" name="quit_btn"/>
|
||||
<layout_stack name="element_stack">
|
||||
<layout_panel name="name_panel">
|
||||
<text name="name_label">
|
||||
Nom:
|
||||
</text>
|
||||
<check_box label="Mémoriser le nom" name="remember_name_check"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="password_panel">
|
||||
<text name="password_text">
|
||||
Mot de passe:
|
||||
</text>
|
||||
<check_box label="Mémoriser mot de passe" name="remember_check"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="grids_panel">
|
||||
<text name="grids_combo_text">
|
||||
Grille:
|
||||
</text>
|
||||
<button name="grids_btn" label="Choix de Grille"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="location_panel">
|
||||
<text name="start_location_text">
|
||||
Lieu d'arrivée:
|
||||
</text>
|
||||
<combo_box name="start_location_combo">
|
||||
<combo_item name="MyHome">
|
||||
Domicile
|
||||
</combo_item>
|
||||
<combo_item name="MyLastLocation">
|
||||
Dernier emplacement
|
||||
</combo_item>
|
||||
<combo_item name="Typeregionname">
|
||||
<Nom de la région>
|
||||
</combo_item>
|
||||
</combo_box>
|
||||
</layout_panel>
|
||||
<layout_panel name="connect_panel">
|
||||
<button label="Connexion" label_selected="Me connecter" name="connect_btn"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
<text name="create_new_account_text">
|
||||
Créer un compte
|
||||
</text>
|
||||
|
||||
@@ -1,30 +1,44 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel name="panel_login">
|
||||
<text name="first_name_text">
|
||||
Primeiro nome:
|
||||
</text>
|
||||
<text name="last_name_text">
|
||||
Sobrenome:
|
||||
</text>
|
||||
<text name="password_text">
|
||||
Senha:
|
||||
</text>
|
||||
<text name="start_location_text">
|
||||
Posição inicial:
|
||||
</text>
|
||||
<combo_box name="start_location_combo">
|
||||
<combo_item name="MyHome">
|
||||
Minha casa
|
||||
</combo_item>
|
||||
<combo_item name="MyLastLocation">
|
||||
Minha última localização
|
||||
</combo_item>
|
||||
<combo_item name="Typeregionname">
|
||||
<Digite o nome da região>
|
||||
</combo_item>
|
||||
</combo_box>
|
||||
<check_box label="Lembrar senha" name="remember_check"/>
|
||||
<button label="Entrar" label_selected="Entrar" name="connect_btn"/>
|
||||
<layout_stack name="element_stack">
|
||||
<layout_panel name="name_panel">
|
||||
<text name="name_label">
|
||||
Nome:
|
||||
</text>
|
||||
<check_box label="Lembre-se Nome" name="remember_name_check"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="password_panel">
|
||||
<text name="password_text">
|
||||
Senha:
|
||||
</text>
|
||||
<check_box label="Lembrar senha" name="remember_check"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="grids_panel">
|
||||
<text name="grids_combo_text">
|
||||
Grelha:
|
||||
</text>
|
||||
<!--<button name="grids_btn" label="Administrar Grid"/>-->
|
||||
</layout_panel>
|
||||
<layout_panel name="location_panel">
|
||||
<text name="start_location_text">
|
||||
Posição inicial:
|
||||
</text>
|
||||
<combo_box name="start_location_combo">
|
||||
<combo_item name="MyHome">
|
||||
Minha casa
|
||||
</combo_item>
|
||||
<combo_item name="MyLastLocation">
|
||||
Minha última localização
|
||||
</combo_item>
|
||||
<combo_item name="Typeregionname">
|
||||
<Digite o nome da região>
|
||||
</combo_item>
|
||||
</combo_box>
|
||||
</layout_panel>
|
||||
<layout_panel name="connect_panel">
|
||||
<button label="Entrar" label_selected="Entrar" name="connect_btn"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
<text name="create_new_account_text">
|
||||
Registrar-se para uma conta
|
||||
</text>
|
||||
|
||||
Reference in New Issue
Block a user