summaryrefslogtreecommitdiff
path: root/indra/newview/llpanelgroup.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llpanelgroup.cpp')
-rw-r--r--indra/newview/llpanelgroup.cpp196
1 files changed, 65 insertions, 131 deletions
diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp
index d9d796fd9e..3acaa6b68e 100644
--- a/indra/newview/llpanelgroup.cpp
+++ b/indra/newview/llpanelgroup.cpp
@@ -46,12 +46,21 @@
#include "llviewerwindow.h"
#include "llappviewer.h"
#include "llnotifications.h"
+#include "llfloater.h"
// static
void* LLPanelGroupTab::createTab(void* data)
{
LLUUID* group_id = static_cast<LLUUID*>(data);
- return new LLPanelGroupTab("panel group tab", *group_id);
+ return new LLPanelGroupTab(*group_id);
+}
+
+LLPanelGroupTab::LLPanelGroupTab(const LLUUID& group_id)
+ : LLPanel(),
+ mGroupID(group_id),
+ mAllowEdit(TRUE),
+ mHasModal(FALSE)
+{
}
LLPanelGroupTab::~LLPanelGroupTab()
@@ -68,13 +77,11 @@ BOOL LLPanelGroupTab::isVisibleByAgent(LLAgent* agentp)
BOOL LLPanelGroupTab::postBuild()
{
// Hook up the help button callback.
- LLButton* button = getChild<LLButton>("help_button");
+ LLButton* button = findChild<LLButton>("help_button");
if (button)
{
- button->setClickedCallback(onClickHelp);
- button->setCallbackUserData(this);
+ button->setCommitCallback(boost::bind(&LLPanelGroupTab::handleClickHelp, this));
}
-
mHelpText = getString("help_text");
return TRUE;
}
@@ -103,13 +110,6 @@ void LLPanelGroupTab::notifyObservers()
}
}
-// static
-void LLPanelGroupTab::onClickHelp(void* user_data)
-{
- LLPanelGroupTab* self = static_cast<LLPanelGroupTab*>(user_data);
- self->handleClickHelp();
-}
-
void LLPanelGroupTab::handleClickHelp()
{
// Display the help text.
@@ -125,67 +125,48 @@ void LLPanelGroupTab::handleClickHelp()
}
}
-LLPanelGroup::LLPanelGroup(const std::string& filename,
- const std::string& name,
- const LLUUID& group_id,
- const std::string& initial_tab_selected)
-: LLPanel(name, LLRect(), FALSE),
+LLPanelGroup::LLPanelGroup(const LLUUID& group_id)
+: LLPanel(),
LLGroupMgrObserver( group_id ),
mCurrentTab( NULL ),
mRequestedTab( NULL ),
mTabContainer( NULL ),
mIgnoreTransition( FALSE ),
+ mApplyBtn( NULL ),
mForceClose( FALSE ),
- mInitialTab(initial_tab_selected),
mAllowEdit( TRUE ),
mShowingNotifyDialog( FALSE )
{
// Set up the factory callbacks.
- mFactoryMap["general_tab"] = LLCallbackMap(LLPanelGroupGeneral::createTab,
- &mID);
- mFactoryMap["roles_tab"] = LLCallbackMap(LLPanelGroupRoles::createTab,
- &mID);
- mFactoryMap["notices_tab"] = LLCallbackMap(LLPanelGroupNotices::createTab,
- &mID);
- mFactoryMap["land_money_tab"]= LLCallbackMap(LLPanelGroupLandMoney::createTab,
- &mID);
+ mFactoryMap["general_tab"] = LLCallbackMap(LLPanelGroupGeneral::createTab, &mID);
+ mFactoryMap["roles_tab"] = LLCallbackMap(LLPanelGroupRoles::createTab, &mID);
+ mFactoryMap["notices_tab"] = LLCallbackMap(LLPanelGroupNotices::createTab, &mID);
+ mFactoryMap["land_money_tab"]= LLCallbackMap(LLPanelGroupLandMoney::createTab, &mID);
// Roles sub tabs
mFactoryMap["members_sub_tab"] = LLCallbackMap(LLPanelGroupMembersSubTab::createTab, &mID);
mFactoryMap["roles_sub_tab"] = LLCallbackMap(LLPanelGroupRolesSubTab::createTab, &mID);
mFactoryMap["actions_sub_tab"] = LLCallbackMap(LLPanelGroupActionsSubTab::createTab, &mID);
LLGroupMgr::getInstance()->addObserver(this);
-
- // Pass on construction of this panel to the control factory.
- LLUICtrlFactory::getInstance()->buildPanel(this, filename, &getFactoryMap());
- mFilename = filename;
}
LLPanelGroup::~LLPanelGroup()
{
LLGroupMgr::getInstance()->removeObserver(this);
- int i;
- int tab_count = mTabContainer->getTabCount();
-
- for (i = tab_count - 1; i >=0; --i)
+ for (S32 i=mTabContainer->getTabCount() - 1; i >=0; --i)
{
- LLPanelGroupTab* panelp =
- (LLPanelGroupTab*) mTabContainer->getPanelByIndex(i);
-
- if ( panelp ) panelp->removeObserver(this);
+ LLPanelGroupTab* panelp = (LLPanelGroupTab*) mTabContainer->getPanelByIndex(i);
+ if ( panelp )
+ panelp->removeObserver(this);
}
}
void LLPanelGroup::updateTabVisibility()
{
- S32 i;
- S32 tab_count = mTabContainer->getTabCount();
-
- for (i = tab_count - 1; i >=0; --i)
+ for (S32 i = mTabContainer->getTabCount() - 1; i >=0; --i)
{
- LLPanelGroupTab* panelp =
- (LLPanelGroupTab*) mTabContainer->getPanelByIndex(i);
+ LLPanelGroupTab* panelp = (LLPanelGroupTab*) mTabContainer->getPanelByIndex(i);
BOOL visible = panelp->isVisibleByAgent(&gAgent) || gAgent.isGodlike();
mTabContainer->enableTabButton(i, visible);
@@ -195,8 +176,7 @@ void LLPanelGroup::updateTabVisibility()
//we are disabling the currently selected tab
//select the previous one
mTabContainer->selectPrevTab();
- mCurrentTab =
- (LLPanelGroupTab*) mTabContainer->getCurrentPanel();
+ mCurrentTab = (LLPanelGroupTab*) mTabContainer->getCurrentPanel();
}
}
}
@@ -209,49 +189,24 @@ BOOL LLPanelGroup::postBuild()
if (mTabContainer)
{
- // Select the initial tab specified via constructor
- const BOOL recurse = TRUE;
- LLPanelGroupTab* tabp =
- getChild<LLPanelGroupTab>(mInitialTab, recurse);
-
- if (!tabp)
+ mCurrentTab = dynamic_cast<LLPanelGroupTab*>(mTabContainer->getCurrentPanel());
+ llassert_always(mCurrentTab);
+
+ // Add click callback.
+ mTabContainer->setCommitCallback(boost::bind(&LLPanelGroup::handleClickTab, this));
+
+ // Setup pabels
+ for (S32 i = mTabContainer->getTabCount() - 1; i >=0; --i)
{
- //our initial tab selection was invalid, just select the
- //first tab then or default to selecting the initial
- //selected tab specified in the layout file
- tabp = (LLPanelGroupTab*) mTabContainer->getCurrentPanel();
-
- //no tab was initially selected through constructor
- //or the XML, select the first tab
- if (!tabp)
+ LLPanel* tab_panel = mTabContainer->getPanelByIndex(i);
+ LLPanelGroupTab* panelp = dynamic_cast<LLPanelGroupTab*>(tab_panel);
+ if (panelp)
{
- mTabContainer->selectFirstTab();
- tabp = (LLPanelGroupTab*) mTabContainer->getCurrentPanel();
+ // Pass on whether or not to allow edit to tabs.
+ panelp->setAllowEdit(mAllowEdit);
+ panelp->addObserver(this);
}
}
- else
- {
- mTabContainer->selectTabPanel(tabp);
- }
-
- mCurrentTab = tabp;
-
- // Add click callbacks.
- S32 i;
- S32 tab_count = mTabContainer->getTabCount();
-
- for (i = tab_count - 1; i >=0; --i)
- {
- LLPanel* tab_panel = mTabContainer->getPanelByIndex(i);
- LLPanelGroupTab* panelp =(LLPanelGroupTab*)tab_panel; // bit of a hack
-
- // Pass on whether or not to allow edit to tabs.
- panelp->setAllowEdit(mAllowEdit);
- panelp->addObserver(this);
-
- mTabContainer->setTabChangeCallback(panelp, onClickTab);
- mTabContainer->setTabUserData(panelp, this);
- }
updateTabVisibility();
// Act as though this tab was just activated.
@@ -262,38 +217,22 @@ BOOL LLPanelGroup::postBuild()
mWantApplyMesg = getString("want_apply_text");
LLButton* button = getChild<LLButton>("btn_ok");
- if (button)
- {
- button->setClickedCallback(onBtnOK);
- button->setCallbackUserData(this);
- button->setVisible(mAllowEdit);
- }
+ button->setClickedCallback(onBtnOK, this);
+ button->setVisible(mAllowEdit);
button = getChild<LLButton>("btn_cancel");
- if (button)
- {
- button->setClickedCallback(onBtnCancel);
- button->setCallbackUserData(this);
- button->setVisible(mAllowEdit);
- }
+ button->setClickedCallback(onBtnCancel, this);
+ button->setVisible(mAllowEdit);
button = getChild<LLButton>("btn_apply");
- if (button)
- {
- button->setClickedCallback(onBtnApply);
- button->setVisible(mAllowEdit);
- button->setEnabled(FALSE);
-
- mApplyBtn = button;
- }
+ button->setClickedCallback(onBtnApply, this);
+ button->setVisible(mAllowEdit);
+ button->setEnabled(FALSE);
+ mApplyBtn = button;
button = getChild<LLButton>("btn_refresh");
- if (button)
- {
- button->setClickedCallback(onBtnRefresh);
- button->setCallbackUserData(this);
- button->setVisible(mAllowEdit);
- }
+ button->setClickedCallback(onBtnRefresh, this);
+ button->setVisible(mAllowEdit);
return TRUE;
}
@@ -322,13 +261,6 @@ void LLPanelGroup::tabChanged()
}
}
-// static
-void LLPanelGroup::onClickTab(void* user_data, bool from_click)
-{
- LLPanelGroup* self = static_cast<LLPanelGroup*>(user_data);
- self->handleClickTab();
-}
-
void LLPanelGroup::handleClickTab()
{
// If we are already handling a transition,
@@ -357,7 +289,8 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
LLGroupMgr::getInstance()->removeObserver(this);
mID = group_id;
LLGroupMgr::getInstance()->addObserver(this);
- //TODO: this is really bad, we should add a method
+
+ //*TODO: this is really bad, we should add a method
// where the panels can just update themselves
// on a group id change. Similar to update() but with a group
// id change.
@@ -365,20 +298,19 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
// For now, rebuild panel
//delete children and rebuild panel
deleteAllChildren();
- LLUICtrlFactory::getInstance()->buildPanel(this, mFilename, &getFactoryMap());
+ LLUICtrlFactory::getInstance()->buildPanel(this, "panel_group.xml");
}
void LLPanelGroup::selectTab(std::string tab_name)
{
const BOOL recurse = TRUE;
- LLPanelGroupTab* tabp =
- getChild<LLPanelGroupTab>(tab_name, recurse);
+ LLPanelGroupTab* tabp = findChild<LLPanelGroupTab>(tab_name, recurse);
if ( tabp && mTabContainer )
{
mTabContainer->selectTabPanel(tabp);
- onClickTab(this, false);
+ handleClickTab();
}
}
@@ -455,7 +387,7 @@ void LLPanelGroup::transitionToTab()
}
else // NULL requested indicates a close action.
{
- close();
+ closePanel();
}
}
@@ -507,7 +439,7 @@ void LLPanelGroup::onBtnOK(void* user_data)
// If we are able to apply changes, then close.
if(self->apply())
{
- self->close();
+ self->closePanel();
}
}
@@ -515,7 +447,7 @@ void LLPanelGroup::onBtnOK(void* user_data)
void LLPanelGroup::onBtnCancel(void* user_data)
{
LLPanelGroup* self = static_cast<LLPanelGroup*>(user_data);
- self->close();
+ self->closePanel();
}
// static
@@ -528,10 +460,12 @@ void LLPanelGroup::onBtnApply(void* user_data)
bool LLPanelGroup::apply()
{
// Pass this along to the currently visible tab.
- if (!mTabContainer) return false;
+ if (!mTabContainer)
+ return false;
- LLPanelGroupTab* panelp = (LLPanelGroupTab*) mTabContainer->getCurrentPanel();
- if (!panelp) return false;
+ LLPanelGroupTab* panelp = dynamic_cast<LLPanelGroupTab*>(mTabContainer->getCurrentPanel());
+ if (!panelp)
+ return false;
std::string mesg;
if ( !panelp->needsApply(mesg) )
@@ -598,7 +532,7 @@ void LLPanelGroup::refreshData()
mRefreshTimer.setTimerExpirySec(5);
}
-void LLPanelGroup::close()
+void LLPanelGroup::closePanel()
{
// Pass this to the parent, if it is a floater.
LLView* viewp = getParent();
@@ -609,7 +543,7 @@ void LLPanelGroup::close()
// will be asking us whether it can close.
mForceClose = TRUE;
// Tell the parent floater to close.
- floaterp->close();
+ floaterp->closeFloater();
}
}