Fixed location combobox not updating properly when a slurl link is clicked. Reset the location combobox when a different grid is selected (added setCurrentGridChangeCallback to hippogridmanager). Moved login panel elements into a layout_stack so hiding the grid or location columns no longer leaves big empty gaps.

This commit is contained in:
Shyotl
2013-07-05 02:28:36 -05:00
parent 624141a31a
commit bbb0bd54bf
12 changed files with 357 additions and 231 deletions

View File

@@ -64,17 +64,20 @@ LLComboBox::LLComboBox( const std::string& name, const LLRect &rect, const std::
commit_callback_t commit_callback) commit_callback_t commit_callback)
: LLUICtrl(name, rect, TRUE, commit_callback, FOLLOWS_LEFT | FOLLOWS_TOP), : LLUICtrl(name, rect, TRUE, commit_callback, FOLLOWS_LEFT | FOLLOWS_TOP),
mTextEntry(NULL), mTextEntry(NULL),
mArrowImage(NULL),
mAllowTextEntry(FALSE),
mMaxChars(20),
mTextEntryTentative(TRUE), mTextEntryTentative(TRUE),
mListPosition(BELOW), mArrowImage(NULL),
mHasAutocompletedText(false),
mAllowTextEntry(false),
mAllowNewValues(false),
mMaxChars(20),
mPrearrangeCallback( NULL ), mPrearrangeCallback( NULL ),
mTextEntryCallback( NULL ), mTextEntryCallback( NULL ),
mListPosition(BELOW),
mSuppressTentative( false ), mSuppressTentative( false ),
mSuppressAutoComplete( false ), mSuppressAutoComplete( false ),
mLabel(label), mListColor(LLUI::sColorsGroup->getColor("ComboBoxBg")),
mListColor(LLUI::sColorsGroup->getColor("ComboBoxBg")) mLastSelectedIndex(-1),
mLabel(label)
{ {
// Always use text box // Always use text box
// Text label button // Text label button
@@ -91,17 +94,25 @@ LLComboBox::LLComboBox( const std::string& name, const LLRect &rect, const std::
mButton->setFont(LLFontGL::getFontSansSerifSmall()); mButton->setFont(LLFontGL::getFontSansSerifSmall());
mButton->setFollows(FOLLOWS_LEFT | FOLLOWS_BOTTOM | FOLLOWS_RIGHT); mButton->setFollows(FOLLOWS_LEFT | FOLLOWS_BOTTOM | FOLLOWS_RIGHT);
mButton->setHAlign( LLFontGL::LEFT ); mButton->setHAlign( LLFontGL::LEFT );
mButton->setRightHPad(2); if(mAllowTextEntry)
{
mButton->setRightHPad(2);
}
addChild(mButton); addChild(mButton);
// disallow multiple selection // disallow multiple selection
mList = new LLScrollListCtrl(std::string("ComboBox"), LLRect(), mList = new LLScrollListCtrl(std::string("ComboBox"), LLRect(),
boost::bind(&LLComboBox::onItemSelected, this), FALSE); boost::bind(&LLComboBox::onItemSelected, this, _2), FALSE);
mList->setVisible(FALSE); mList->setVisible(FALSE);
mList->setBgWriteableColor(mListColor); mList->setBgWriteableColor(mListColor);
mList->setCommitOnKeyboardMovement(FALSE); mList->setCommitOnKeyboardMovement(FALSE);
addChild(mList); 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"); mArrowImage = LLUI::getUIImage("combobox_arrow.tga");
mButton->setImageOverlay("combobox_arrow.tga", LLFontGL::RIGHT); mButton->setImageOverlay("combobox_arrow.tga", LLFontGL::RIGHT);
@@ -234,6 +245,7 @@ void LLComboBox::clear()
mButton->setLabelSelected(LLStringUtil::null); mButton->setLabelSelected(LLStringUtil::null);
mButton->setLabelUnselected(LLStringUtil::null); mButton->setLabelUnselected(LLStringUtil::null);
mList->deselectAllItems(); mList->deselectAllItems();
mLastSelectedIndex = -1;
} }
void LLComboBox::onCommit() void LLComboBox::onCommit()
@@ -280,6 +292,11 @@ void LLComboBox::resetDirty()
} }
} }
bool LLComboBox::itemExists(const std::string& name)
{
return mList->getItemByLabel(name);
}
void LLComboBox::resetTextDirty() void LLComboBox::resetTextDirty()
{ {
if ( mTextEntry ) if ( mTextEntry )
@@ -358,6 +375,7 @@ BOOL LLComboBox::setSimple(const LLStringExplicit& name)
if (found) if (found)
{ {
setLabel(name); setLabel(name);
mLastSelectedIndex = mList->getFirstSelectedIndex();
} }
return found; return found;
@@ -372,14 +390,19 @@ void LLComboBox::setValue(const LLSD& value)
LLScrollListItem* item = mList->getFirstSelected(); LLScrollListItem* item = mList->getFirstSelected();
if (item) if (item)
{ {
setLabel( mList->getSelectedItemLabel() ); updateLabel();
} }
mLastSelectedIndex = mList->getFirstSelectedIndex();
}
else
{
mLastSelectedIndex = -1;
} }
} }
const std::string LLComboBox::getSimple() const const std::string LLComboBox::getSimple() const
{ {
const std::string res = mList->getSelectedItemLabel(); const std::string res = getSelectedItemLabel();
if (res.empty() && mAllowTextEntry) if (res.empty() && mAllowTextEntry)
{ {
return mTextEntry->getText(); return mTextEntry->getText();
@@ -421,6 +444,7 @@ void LLComboBox::setLabel(const LLStringExplicit& name)
if (mList->selectItemByLabel(name, FALSE)) if (mList->selectItemByLabel(name, FALSE))
{ {
mTextEntry->setTentative(FALSE); mTextEntry->setTentative(FALSE);
mLastSelectedIndex = mList->getFirstSelectedIndex();
} }
else 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) BOOL LLComboBox::remove(const std::string& name)
{ {
@@ -447,6 +490,7 @@ BOOL LLComboBox::remove(const std::string& name)
{ {
mList->deleteSingleItem(mList->getItemIndex(item)); mList->deleteSingleItem(mList->getItemIndex(item));
} }
mLastSelectedIndex = mList->getFirstSelectedIndex();
} }
return found; return found;
@@ -457,6 +501,7 @@ BOOL LLComboBox::remove(S32 index)
if (index < mList->getItemCount()) if (index < mList->getItemCount())
{ {
mList->deleteSingleItem(index); mList->deleteSingleItem(index);
setLabel(getSelectedItemLabel());
return TRUE; return TRUE;
} }
return FALSE; return FALSE;
@@ -502,7 +547,8 @@ BOOL LLComboBox::setCurrentByIndex( S32 index )
BOOL found = mList->selectNthItem( index ); BOOL found = mList->selectNthItem( index );
if (found) if (found)
{ {
setLabel(mList->getSelectedItemLabel()); setLabel(getSelectedItemLabel());
mLastSelectedIndex = index;
} }
return found; return found;
} }
@@ -560,10 +606,12 @@ void LLComboBox::updateLayout()
mButton->setFollows(FOLLOWS_BOTTOM | FOLLOWS_TOP | FOLLOWS_RIGHT); mButton->setFollows(FOLLOWS_BOTTOM | FOLLOWS_TOP | FOLLOWS_RIGHT);
} }
else if (!mAllowTextEntry) else
{ {
mButton->setRect(rect); mButton->setRect(rect);
mButton->setTabStop(TRUE); mButton->setTabStop(TRUE);
mButton->setLabelUnselected(mLabel);
mButton->setLabelSelected(mLabel);
if (mTextEntry) if (mTextEntry)
{ {
@@ -682,24 +730,28 @@ void LLComboBox::showList()
void LLComboBox::hideList() void LLComboBox::hideList()
{ {
#if 0 // Don't do this! mTextEntry->getText() can be truncated, in which case selectItemByLabel if (mList->getVisible())
// 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 )
{ {
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 ); setFocus( TRUE );
// pass mouse capture on to list if button is depressed // 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 else
{ {
@@ -742,15 +798,23 @@ void LLComboBox::onButtonMouseDown()
} }
void LLComboBox::onItemSelected() void LLComboBox::onListMouseUp()
{ {
// Note: item is the LLScrollListCtrl // In some cases this is the termination of a mouse click that started on
const std::string name = mList->getSelectedItemLabel(); // 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) if (mAllowTextEntry)
{ {
@@ -758,7 +822,6 @@ void LLComboBox::onItemSelected()
mTextEntry->selectAll(); mTextEntry->selectAll();
} }
} }
// hiding the list reasserts the old value stored in the text editor/dropdown button // hiding the list reasserts the old value stored in the text editor/dropdown button
hideList(); hideList();
@@ -879,6 +942,7 @@ void LLComboBox::setTextEntry(const LLStringExplicit& text)
if (mTextEntry) if (mTextEntry)
{ {
mTextEntry->setText(text); mTextEntry->setText(text);
mHasAutocompletedText = FALSE;
updateSelection(); updateSelection();
} }
} }
@@ -902,12 +966,14 @@ void LLComboBox::onTextEntry(LLLineEditor* line_editor)
if (mList->selectItemByLabel(line_editor->getText(), FALSE)) if (mList->selectItemByLabel(line_editor->getText(), FALSE))
{ {
line_editor->setTentative(FALSE); line_editor->setTentative(FALSE);
mLastSelectedIndex = mList->getFirstSelectedIndex();
} }
else else
{ {
if (!mSuppressTentative) if (!mSuppressTentative)
line_editor->setTentative(mTextEntryTentative); line_editor->setTentative(mTextEntryTentative);
mList->deselectAllItems(); mList->deselectAllItems();
mLastSelectedIndex = -1;
} }
return; return;
} }
@@ -964,7 +1030,7 @@ void LLComboBox::updateSelection()
LLWString left_wstring = mTextEntry->getWText().substr(0, mTextEntry->getCursor()); LLWString left_wstring = mTextEntry->getWText().substr(0, mTextEntry->getCursor());
// user-entered portion of string, based on assumption that any selected // user-entered portion of string, based on assumption that any selected
// text was a result of auto-completion // 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(); std::string full_string = mTextEntry->getText();
// go ahead and arrange drop down list on first typed character, even // 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)) if (mList->selectItemByLabel(full_string, FALSE))
{ {
mTextEntry->setTentative(FALSE); mTextEntry->setTentative(FALSE);
mLastSelectedIndex = mList->getFirstSelectedIndex();
} }
else if (!mList->selectItemByPrefix(left_wstring, FALSE)) else if (mList->selectItemByPrefix(left_wstring, FALSE))
{ {
mList->deselectAllItems(); LLWString selected_item = utf8str_to_wstring(getSelectedItemLabel());
mTextEntry->setText(wstring_to_utf8str(user_wstring));
if (!mSuppressTentative) mTextEntry->setTentative(mTextEntryTentative);
}
else
{
LLWString selected_item = utf8str_to_wstring(mList->getSelectedItemLabel());
LLWString wtext = left_wstring + selected_item.substr(left_wstring.size(), selected_item.size()); LLWString wtext = left_wstring + selected_item.substr(left_wstring.size(), selected_item.size());
mTextEntry->setText(wstring_to_utf8str(wtext)); mTextEntry->setText(wstring_to_utf8str(wtext));
mTextEntry->setSelection(left_wstring.size(), mTextEntry->getWText().size()); mTextEntry->setSelection(left_wstring.size(), mTextEntry->getWText().size());
mTextEntry->endSelection(); mTextEntry->endSelection();
mTextEntry->setTentative(FALSE); 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) if (found)
{ {
setLabel(mList->getSelectedItemLabel()); setLabel(getSelectedItemLabel());
mLastSelectedIndex = mList->getFirstSelectedIndex();
} }
return found; return found;
@@ -1124,7 +1196,7 @@ BOOL LLComboBox::setSelectedByValue(const LLSD& value, BOOL selected)
BOOL found = mList->setSelectedByValue(value, selected); BOOL found = mList->setSelectedByValue(value, selected);
if (found) if (found)
{ {
setLabel(mList->getSelectedItemLabel()); setLabel(getSelectedItemLabel());
} }
return found; return found;
} }

View File

@@ -123,6 +123,7 @@ public:
LLScrollListItem* addSeparator(EAddPosition pos = ADD_BOTTOM); LLScrollListItem* addSeparator(EAddPosition pos = ADD_BOTTOM);
BOOL remove( S32 index ); // remove item by index, return TRUE if found and removed BOOL remove( S32 index ); // remove item by index, return TRUE if found and removed
void removeall() { clearRows(); } void removeall() { clearRows(); }
bool itemExists(const std::string& name);
void sortByName(BOOL ascending = TRUE); // Sort the entries in the combobox by 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. // Get name of current item. Returns an empty string if not found.
const std::string getSimple() const; const std::string getSimple() const;
// Get contents of column x of selected row // 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. // Sets the label, which doesn't have to exist in the label.
// This is probably a UI abuse. // This is probably a UI abuse.
void setLabel(const LLStringExplicit& name); 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 remove(const std::string& name); // remove item "name", return TRUE if found and removed
BOOL setCurrentByIndex( S32 index ); BOOL setCurrentByIndex( S32 index );
@@ -185,7 +189,8 @@ public:
void setButtonVisible(BOOL visible); void setButtonVisible(BOOL visible);
void onButtonMouseDown(); void onButtonMouseDown();
void onItemSelected(); void onListMouseUp();
void onItemSelected(const LLSD& data);
void onTextCommit(const LLSD& data); void onTextCommit(const LLSD& data);
@@ -205,10 +210,12 @@ protected:
EPreferredPosition mListPosition; EPreferredPosition mListPosition;
LLPointer<LLUIImage> mArrowImage; LLPointer<LLUIImage> mArrowImage;
std::string mLabel; std::string mLabel;
BOOL mHasAutocompletedText;
LLColor4 mListColor; LLColor4 mListColor;
private: private:
BOOL mAllowTextEntry; BOOL mAllowTextEntry;
BOOL mAllowNewValues;
S32 mMaxChars; S32 mMaxChars;
BOOL mTextEntryTentative; BOOL mTextEntryTentative;
bool mSuppressAutoComplete; bool mSuppressAutoComplete;
@@ -216,6 +223,7 @@ private:
commit_callback_t mPrearrangeCallback; commit_callback_t mPrearrangeCallback;
commit_callback_t mTextEntryCallback; commit_callback_t mTextEntryCallback;
boost::signals2::connection mTopLostSignalConnection; boost::signals2::connection mTopLostSignalConnection;
S32 mLastSelectedIndex;
}; };
class LLFlyoutButton : public LLComboBox class LLFlyoutButton : public LLComboBox

View File

@@ -646,6 +646,8 @@ HippoGridManager::HippoGridManager() :
HippoGridManager::~HippoGridManager() HippoGridManager::~HippoGridManager()
{ {
cleanup(); cleanup();
if(mCurrentGridChangeSignal)
delete mCurrentGridChangeSignal;
} }
@@ -805,6 +807,7 @@ void HippoGridManager::setDefaultGrid(const std::string& grid)
void HippoGridManager::setCurrentGrid(const std::string& grid) void HippoGridManager::setCurrentGrid(const std::string& grid)
{ {
HippoGridInfo* prevGrid = getGrid(mCurrentGrid);
GridIterator it = mGridInfo.find(grid); GridIterator it = mGridInfo.find(grid);
if (it != mGridInfo.end()) if (it != mGridInfo.end())
{ {
@@ -815,6 +818,8 @@ void HippoGridManager::setCurrentGrid(const std::string& grid)
llwarns << "Unknown grid '" << grid << "'. Setting to default grid." << llendl; llwarns << "Unknown grid '" << grid << "'. Setting to default grid." << llendl;
mCurrentGrid = mDefaultGrid; mCurrentGrid = mDefaultGrid;
} }
if(mCurrentGridChangeSignal)
(*mCurrentGridChangeSignal)(getGrid(mCurrentGrid),prevGrid);
} }

View File

@@ -15,6 +15,8 @@
#include "expat/expat.h" #include "expat/expat.h"
#endif #endif
#include <boost/signals2.hpp>
class LLSD; class LLSD;
@@ -152,6 +154,8 @@ private:
class HippoGridManager class HippoGridManager
{ {
public: public:
typedef boost::signals2::signal<void (HippoGridInfo* pNewGrid, HippoGridInfo* pPrevGrid)> current_grid_change_signal_t;
HippoGridManager(); HippoGridManager();
~HippoGridManager(); ~HippoGridManager();
@@ -179,6 +183,13 @@ public:
GridIterator beginGrid() { return mGridInfo.begin(); } GridIterator beginGrid() { return mGridInfo.begin(); }
GridIterator endGrid() { return mGridInfo.end(); } 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: private:
friend class HippoGridInfo; friend class HippoGridInfo;
std::map<std::string, HippoGridInfo*> mGridInfo; std::map<std::string, HippoGridInfo*> mGridInfo;
@@ -187,6 +198,8 @@ private:
HippoGridInfo* mConnectedGrid; HippoGridInfo* mConnectedGrid;
int mDefaultGridsVersion; int mDefaultGridsVersion;
current_grid_change_signal_t* mCurrentGridChangeSignal;
void cleanup(); void cleanup();
void loadFromFile(); void loadFromFile();
void parseFile(const std::string& fileName, bool mergeIfNewer); void parseFile(const std::string& fileName, bool mergeIfNewer);

View File

@@ -227,7 +227,6 @@ void HippoPanelGridsImpl::apply()
// adding new grid did not fail // adding new grid did not fail
gHippoGridManager->setCurrentGrid(mCurGrid); gHippoGridManager->setCurrentGrid(mCurGrid);
} }
LLPanelLogin::refreshLoginPage();
gHippoGridManager->saveFile(); gHippoGridManager->saveFile();
refresh(); refresh();
// update render compatibility // update render compatibility

View File

@@ -2332,7 +2332,6 @@ bool LLAppViewer::initConfiguration()
if(LLStartUp::getStartSLURL().getType() == LLSLURL::LOCATION) if(LLStartUp::getStartSLURL().getType() == LLSLURL::LOCATION)
{ {
gHippoGridManager->setCurrentGrid(LLStartUp::getStartSLURL().getGrid()); gHippoGridManager->setCurrentGrid(LLStartUp::getStartSLURL().getGrid());
} }
} }
else if(clp.hasOption("slurl")) else if(clp.hasOption("slurl"))

View File

@@ -278,9 +278,8 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
{ {
LL_INFOS("AppInit")<<"no valid LoginLocation, using home"<<LL_ENDL; LL_INFOS("AppInit")<<"no valid LoginLocation, using home"<<LL_ENDL;
LLSLURL homeStart(LLSLURL::SIM_LOCATION_HOME); LLSLURL homeStart(LLSLURL::SIM_LOCATION_HOME);
LLStartUp::setStartSLURL(homeStart); LLStartUp::setStartSLURL(homeStart); // calls onUpdateStartSLURL
} }
start_slurl = LLStartUp::getStartSLURL(); // calls onUpdateStartSLURL
} }
else else
{ {
@@ -319,9 +318,9 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
reshapeBrowser(); reshapeBrowser();
loadLoginPage();
refreshLoginPage(); refreshLoginPage();
gHippoGridManager->setCurrentGridChangeCallback(boost::bind(&LLPanelLogin::onCurGridChange,this,_1,_2));
} }
void LLPanelLogin::setSiteIsAlive( bool alive ) void LLPanelLogin::setSiteIsAlive( bool alive )
@@ -631,7 +630,6 @@ void LLPanelLogin::setFields(const LLSavedLoginEntry& entry, bool takeFocus)
if(!grid.empty() && gHippoGridManager->getGrid(grid) && grid != gHippoGridManager->getCurrentGridName()) if(!grid.empty() && gHippoGridManager->getGrid(grid) && grid != gHippoGridManager->getCurrentGridName())
{ {
gHippoGridManager->setCurrentGrid(grid); gHippoGridManager->setCurrentGrid(grid);
LLPanelLogin::refreshLoginPage();
} }
if (entry.getPassword().empty()) if (entry.getPassword().empty())
@@ -702,13 +700,10 @@ void LLPanelLogin::updateLocationSelectorsVisibility()
#endif // RLV_EXTENSION_STARTLOCATION #endif // RLV_EXTENSION_STARTLOCATION
// [/RLVa:KB] // [/RLVa:KB]
sInstance->getChild<LLComboBox>("start_location_combo")->setVisible(show_start); // maintain ShowStartLocation if legacy sInstance->getChildView("location_panel")->setVisible(show_start);
sInstance->getChild<LLTextBox>("start_location_text")->setVisible(show_start);
bool show_server = true; bool show_server = true;
sInstance->getChild<LLComboBox>("grids_combo")->setVisible(show_server); sInstance->getChildView("grids_panel")->setVisible(show_server);
sInstance->getChild<LLTextBox>("grids_text")->setVisible(show_server);
sInstance->getChild<LLButton>("grids_btn")->setVisible(show_server);
} }
} }
@@ -1030,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 // static
//void LLPanelLogin::updateServer() //void LLPanelLogin::updateServer()
void LLPanelLogin::refreshLoginPage() void LLPanelLogin::refreshLoginPage()
@@ -1074,7 +1080,6 @@ void LLPanelLogin::refreshLoginPage()
void LLPanelLogin::onSelectGrid(LLUICtrl *ctrl) void LLPanelLogin::onSelectGrid(LLUICtrl *ctrl)
{ {
gHippoGridManager->setCurrentGrid(ctrl->getValue()); gHippoGridManager->setCurrentGrid(ctrl->getValue());
LLPanelLogin::refreshLoginPage();
} }
void LLPanelLogin::onLocationSLURL() void LLPanelLogin::onLocationSLURL()

View File

@@ -41,6 +41,7 @@
class LLUIImage; class LLUIImage;
class LLComboBox; class LLComboBox;
class HippoGridInfo;
class LLPanelLogin: class LLPanelLogin:
public LLPanel, public LLPanel,
@@ -92,6 +93,7 @@ public:
void updateGridCombo(); void updateGridCombo();
void onCurGridChange(HippoGridInfo* new_grid, HippoGridInfo* old_grid);
static void loadLoginPage(); static void loadLoginPage();
static void refreshLoginPage(); static void refreshLoginPage();
static void giveFocus(); static void giveFocus();

View File

@@ -13,72 +13,81 @@
<string name="forgot_password_url"> <string name="forgot_password_url">
http://secondlife.com/account/request.php http://secondlife.com/account/request.php
</string> </string>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" <layout_stack name="element_stack" border_size="0" left="28" right="800" top="70" bottom="10" follows="left|bottom" orientation="horizontal">
bottom="54" drop_shadow_visible="true" follows="left|bottom" <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" font="SansSerif" h_pad="0" halign="left" height="16"
left="32" mouse_opaque="true" name="name_label" v_pad="0" width="120"> left="4" mouse_opaque="true" name="name_label" v_pad="0" width="120">
Name or Username: Name or Username:
</text> </text>
<combo_box bevel_style="in" border_style="line" border_thickness="1" bottom_delta="-24" <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" font="SansSerif" handle_edit_keys_directly="true" height="20" left="4"
max_chars="64" mouse_opaque="true" name="name_combo" max_chars="64" mouse_opaque="true" name="name_combo"
select_all_on_focus_received="true" width="155" allow_text_entry="true" /> select_all_on_focus_received="true" width="155" allow_text_entry="true" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" <check_box bottom="0" control_name="RememberName"
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"
follows="left|bottom" font="SansSerifSmall" height="16" follows="left|bottom" font="SansSerifSmall" height="16"
initial_value="true" label="Remember name" initial_value="true" label="Remember name"
left="28" mouse_opaque="true" name="remember_name_check" width="158" /> left="0" mouse_opaque="true" name="remember_name_check" width="158" />
<check_box bottom="10" control_name="RememberPassword" </layout_panel>
follows="left|bottom" font="SansSerifSmall" height="16" <layout_panel name="password_panel" left="0" user_resize="false" auto_resize="false" width="134" min_width="0">
initial_value="false" label="Remember password" <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
left="199" mouse_opaque="true" name="remember_check" width="138" /> bottom="44" drop_shadow_visible="true" follows="left|bottom"
<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" font="SansSerif" h_pad="0" halign="left" height="16"
left="339" mouse_opaque="true" name="grids_combo_text" v_pad="0" width="120"> left="4" mouse_opaque="true" name="password_text" v_pad="0" width="120">
Grid: Password:
</text> </text>
<combo_box allow_text_entry="false" bottom_delta="-24" follows="left|bottom" height="20" <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="-24"
left="339" mouse_opaque="true" name="grids_combo" width="120" /> follows="left|bottom" font="SansSerifSmall" handle_edit_keys_directly="true"
height="20" left="4" max_length="16" mouse_opaque="true"
<button name="grids_btn" label="Grid Manager" name="password_edit" select_all_on_focus_received="true" width="120" />
bottom_delta="-20" left_delta="10" height="16" width="100" <check_box bottom="0" control_name="RememberPassword"
follows="left|bottom" font="SansSerifSmall" halign="center" follows="left|bottom" font="SansSerifSmall" height="16"
mouse_opaque="true" scale_image="TRUE" /> initial_value="false" label="Remember password"
left="0" mouse_opaque="true" name="remember_check" width="138" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" </layout_panel>
bottom="54" drop_shadow_visible="true" follows="left|bottom" <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" font="SansSerif" h_pad="0" halign="left" height="16"
left="475" mouse_opaque="true" name="start_location_text" v_pad="0" width="120"> left="0" mouse_opaque="true" name="grids_combo_text" v_pad="0" width="120">
Start Location: Grid:
</text> </text>
<combo_box allow_text_entry="true" bottom_delta="-24" left="475" follows="left|bottom" height="20" <combo_box allow_text_entry="false" bottom_delta="-24" follows="left|bottom" height="20"
max_chars="128" mouse_opaque="true" name="start_location_combo" width="155"> left="0" mouse_opaque="true" name="grids_combo" width="120" />
<combo_item name="MyHome" value="home"> <button name="grids_btn" label="Grid Manager"
My Home bottom_delta="-20" left_delta="10" height="16" width="100"
</combo_item> follows="left|bottom" font="SansSerifSmall" halign="center"
<combo_item name="MyLastLocation" value="last"> mouse_opaque="true" scale_image="TRUE" />
My Last Location </layout_panel>
</combo_item> <layout_panel name="location_panel" left="0" user_resize="false" auto_resize="false" width="165" min_width="0">
<combo_item name="Typeregionname" value=""> <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
&lt;Type region name&gt; bottom="44" drop_shadow_visible="true" follows="left|bottom"
</combo_item> font="SansSerif" h_pad="0" halign="left" height="16"
</combo_box> left="0" mouse_opaque="true" name="start_location_text" v_pad="0" width="120">
Start Location:
<button bottom_delta="-3" follows="left|bottom" font="SansSerif" halign="center" </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="">
&lt;Type region name&gt;
</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" 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" /> width="100" />
</layout_panel>
</layout_stack>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="45" drop_shadow_visible="true" follows="right|bottom" bottom="45" drop_shadow_visible="true" follows="right|bottom"

View File

@@ -1,46 +1,48 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?> <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel name="panel_login"> <panel name="panel_login">
<string name="real_url"> <layout_stack name="element_stack">
http://secondlife.com/app/login/ <layout_panel name="name_panel">
</string> <text name="name_label">
<string name="forgot_password_url"> Nombre o Usuario:
http://secondlife.com/account/request.ph </text>
</string> <check_box label="Recordar Nombre" name="remember_name_check"/>
<text name="name_label"> </layout_panel>
Nombre o Usuario: <layout_panel name="password_panel">
</text> <text name="password_text">
<combo_box name="name_combo" /> Contraseña:
<text name="password_text"> </text>
Contraseña: <check_box label="Recordar Contraseña" name="remember_check"/>
</text> </layout_panel>
<check_box label="Recordar Nombre" name="remember_name_check"/> <layout_panel name="grids_panel">
<check_box label="Recordar Contraseña" name="remember_check" width="138" /> <text name="grids_combo_text">
<text name="grids_combo_text"> Grid:
Grid: </text>
</text> <button name="grids_btn" label="Administrar Grid"/>
<button name="grids_btn" label="Administrar Grid"/> </layout_panel>
<text name="start_location_text" v_pad="0" width="120"> <layout_panel name="location_panel">
Posición Inicial: <text name="start_location_text">
</text> Posición Inicial:
<combo_box name="start_location_combo" width="155"> </text>
<combo_item name="MyHome" value="My Home"> <combo_box name="start_location_combo">
Mi Base <combo_item name="MyHome">
</combo_item> Mi Base
<combo_item name="MyLastLocation" value="My Last Location"> </combo_item>
Mi Última Ubicación <combo_item name="MyLastLocation">
</combo_item> Mi Última Ubicación
<combo_item name="Typeregionname"> </combo_item>
&lt;Escribe el Nombre de la Región&gt; <combo_item name="Typeregionname">
</combo_item> &lt;Escribe el Nombre de la Región&gt;
</combo_box> </combo_item>
<button label="Iniciar Sesión" label_selected="Iniciar Sesión" name="connect_btn" width="100" /> </combo_box>
<text name="create_new_account_text" width="200"> </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 Registrate para obtener una Cuenta
</text> </text>
<text name="forgot_password_text" width="200"> <text name="forgot_password_text">
¿Olvidaste tu Nombre o tu Contraseña? ¿Olvidaste tu Nombre o tu Contraseña?
</text> </text>
<text name="channel_text">
[CHANNEL] [VERSION]
</text>
</panel> </panel>

View File

@@ -1,46 +1,44 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?> <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel name="panel_login"> <panel name="panel_login">
<web_browser name="login_html" /> <layout_stack name="element_stack">
<string name="real_url"> <layout_panel name="name_panel">
http://secondlife.com/app/login/ <text name="name_label">
</string> Nom:
<string name="forgot_password_url"> </text>
http://secondlife.com/account/request.php <check_box label="Mémoriser le nom" name="remember_name_check"/>
</string> </layout_panel>
<text left="32" name="name_label" width="120"> <layout_panel name="password_panel">
Nom: <text name="password_text">
</text> Mot de passe:
<text name="password_text"> </text>
Mot de passe: <check_box label="Mémoriser mot de passe" name="remember_check"/>
</text> </layout_panel>
<text name="start_location_text"> <layout_panel name="grids_panel">
Lieu d'arrivée: <text name="grids_combo_text">
</text> Grille:
<combo_box name="start_location_combo"> </text>
<combo_item name="MyHome"> <button name="grids_btn" label="Choix de Grille"/>
Domicile </layout_panel>
</combo_item> <layout_panel name="location_panel">
<combo_item name="MyLastLocation"> <text name="start_location_text">
Dernier emplacement Lieu d'arrivée:
</combo_item> </text>
<combo_item name="Typeregionname"> <combo_box name="start_location_combo">
&lt;Nom de la région&gt; <combo_item name="MyHome">
</combo_item> Domicile
</combo_box> </combo_item>
<check_box bottom="10" label="Mémoriser le nom" left="28" name="remember_name_check" width="158"/> <combo_item name="MyLastLocation">
<check_box label="Mémoriser mot de passe" name="remember_check"/> Dernier emplacement
<text bottom="54" left="339" name="grids_combo_text" width="120"> </combo_item>
Grille: <combo_item name="Typeregionname">
</text> &lt;Nom de la région&gt;
<combo_box bottom_delta="-24" left="339" name="grids_combo" width="120" /> </combo_item>
<button name="grids_btn" label="Choix de Grille" bottom_delta="-20" left_delta="10" width="100"/> </combo_box>
<text name="full_screen_text"> </layout_panel>
Le plein écran sera activé après identification. <layout_panel name="connect_panel">
</text> <button label="Connexion" label_selected="Me connecter" name="connect_btn"/>
<button label="Nouveau Compte" label_selected="Nouveau Compte" name="new_account_btn"/> </layout_panel>
<button label="Connexion" label_selected="Me connecter" name="connect_btn"/> </layout_stack>
<button label="Préférences" label_selected="Préférences" name="preferences_btn"/>
<button label="Quitter" label_selected="Quitter" name="quit_btn"/>
<text name="create_new_account_text"> <text name="create_new_account_text">
Créer un compte Créer un compte
</text> </text>

View File

@@ -1,30 +1,44 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?> <?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_login"> <panel name="panel_login">
<text name="first_name_text"> <layout_stack name="element_stack">
Primeiro nome: <layout_panel name="name_panel">
</text> <text name="name_label">
<text name="last_name_text"> Nome:
Sobrenome: </text>
</text> <check_box label="Lembre-se Nome" name="remember_name_check"/>
<text name="password_text"> </layout_panel>
Senha: <layout_panel name="password_panel">
</text> <text name="password_text">
<text name="start_location_text"> Senha:
Posição inicial: </text>
</text> <check_box label="Lembrar senha" name="remember_check"/>
<combo_box name="start_location_combo"> </layout_panel>
<combo_item name="MyHome"> <layout_panel name="grids_panel">
Minha casa <text name="grids_combo_text">
</combo_item> Grelha:
<combo_item name="MyLastLocation"> </text>
Minha última localização <!--<button name="grids_btn" label="Administrar Grid"/>-->
</combo_item> </layout_panel>
<combo_item name="Typeregionname"> <layout_panel name="location_panel">
&lt;Digite o nome da região&gt; <text name="start_location_text">
</combo_item> Posição inicial:
</combo_box> </text>
<check_box label="Lembrar senha" name="remember_check"/> <combo_box name="start_location_combo">
<button label="Entrar" label_selected="Entrar" name="connect_btn"/> <combo_item name="MyHome">
Minha casa
</combo_item>
<combo_item name="MyLastLocation">
Minha última localização
</combo_item>
<combo_item name="Typeregionname">
&lt;Digite o nome da região&gt;
</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"> <text name="create_new_account_text">
Registrar-se para uma conta Registrar-se para uma conta
</text> </text>