Removed LLUICtrl::setDoubleClickCallback and LLPanel::childSetDoubleClickCallback as they aren't used/needed and complicate things. Added LLPanel::childSetAction overload that accepts boost::singal2::signal (for boost::bind). Now using boost::function for various callbacks in LLScrollListCtrl (for boost::bind).

This commit is contained in:
Shyotl
2012-12-04 21:54:01 -06:00
parent ca3e0d2ba9
commit ef6f411b70
29 changed files with 82 additions and 103 deletions

View File

@@ -765,19 +765,6 @@ void LLPanel::childSetCommitCallback(const std::string& id, void (*cb)(LLUICtrl*
}
}
void LLPanel::childSetDoubleClickCallback(const std::string& id, void (*cb)(void*), void *userdata )
{
LLUICtrl* child = getChild<LLUICtrl>(id, true);
if (child)
{
child->setDoubleClickCallback(cb);
if (userdata)
{
child->setCallbackUserData(userdata);
}
}
}
void LLPanel::childSetValidate(const std::string& id, BOOL (*cb)(LLUICtrl*, void*))
{
LLUICtrl* child = getChild<LLUICtrl>(id, true);
@@ -962,7 +949,7 @@ void LLPanel::childSetWrappedText(const std::string& id, const std::string& text
}
}
void LLPanel::childSetAction(const std::string& id, void(*function)(void*), void* value)
void LLPanel::childSetAction(const std::string& id, boost::function<void(void*)> function, void* value)
{
LLButton* button = getChild<LLButton>(id);
if (button)
@@ -971,6 +958,15 @@ void LLPanel::childSetAction(const std::string& id, void(*function)(void*), void
}
}
void LLPanel::childSetAction(const std::string& id, const commit_signal_t::slot_type& function)
{
LLButton* button = getChild<LLButton>(id);
if (button)
{
button->setClickedCallback(function);
}
}
void LLPanel::childSetActionTextbox(const std::string& id, void(*function)(void*), void* value)
{
LLTextBox* textbox = getChild<LLTextBox>(id);

View File

@@ -170,7 +170,6 @@ public:
BOOL childHasFocus(const std::string& id);
void childSetCommitCallback(const std::string& id, void (*cb)(LLUICtrl*, void*), void* userdata = NULL );
void childSetDoubleClickCallback(const std::string& id, void (*cb)(void*), void* userdata = NULL );
void childSetValidate(const std::string& id, BOOL (*cb)(LLUICtrl*, void*) );
void childSetUserData(const std::string& id, void* userdata);
@@ -211,7 +210,8 @@ public:
void childSetPrevalidate(const std::string& id, BOOL (*func)(const LLWString &) );
// LLButton
void childSetAction(const std::string& id, void(*function)(void*), void* value);
void childSetAction(const std::string& id, boost::function<void(void*)> function, void* value);
void childSetAction(const std::string& id, const commit_signal_t::slot_type& function);
void childSetActionTextbox(const std::string& id, void(*function)(void*), void* value = NULL);
void childSetControlName(const std::string& id, const std::string& control_name);

View File

@@ -2050,7 +2050,7 @@ BOOL LLScrollListCtrl::selectItemAt(S32 x, S32 y, MASK mask)
{
if(mOnMaximumSelectCallback)
{
mOnMaximumSelectCallback(mCallbackUserData);
mOnMaximumSelectCallback();
}
break;
}
@@ -2088,7 +2088,7 @@ BOOL LLScrollListCtrl::selectItemAt(S32 x, S32 y, MASK mask)
{
if(mOnMaximumSelectCallback)
{
mOnMaximumSelectCallback(mCallbackUserData);
mOnMaximumSelectCallback();
}
}
}
@@ -2181,7 +2181,7 @@ BOOL LLScrollListCtrl::handleDoubleClick(S32 x, S32 y, MASK mask)
{
if( mCanSelect && mOnDoubleClickCallback )
{
mOnDoubleClickCallback( mCallbackUserData );
mOnDoubleClickCallback();
}
}
}
@@ -3320,7 +3320,7 @@ void LLScrollListCtrl::onClickColumn(void *userdata)
if (parent->mOnSortChangedCallback)
{
parent->mOnSortChangedCallback(parent->getCallbackUserData());
parent->mOnSortChangedCallback();
}
}

View File

@@ -385,6 +385,7 @@ class LLScrollListCtrl : public LLUICtrl, public LLEditMenuHandler,
public LLCtrlListInterface, public LLCtrlScrollInterface
{
public:
typedef boost::function<void (void)> callback_t;
LLScrollListCtrl(
const std::string& name,
const LLRect& rect,
@@ -466,9 +467,11 @@ public:
void deselectAllItems(BOOL no_commit_on_change = FALSE); // by default, go ahead and commit on selection change
void highlightNthItem( S32 index );
void setDoubleClickCallback( void (*cb)(void*) ) { mOnDoubleClickCallback = cb; }
void setMaximumSelectCallback( void (*cb)(void*) ) { mOnMaximumSelectCallback = cb; }
void setSortChangedCallback( void (*cb)(void*) ) { mOnSortChangedCallback = cb; }
void setDoubleClickCallback( callback_t cb ) { mOnDoubleClickCallback = cb; }
void setMaximumSelectCallback( callback_t cb ) { mOnMaximumSelectCallback = cb; }
void setSortChangedCallback( callback_t cb ) { mOnSortChangedCallback = cb; }
// Convenience function; *TODO: replace with setter above + boost::bind() in calling code
void setDoubleClickCallback( boost::function<void (void* userdata)> cb, void* userdata) { mOnDoubleClickCallback = boost::bind(cb, userdata); }
void swapWithNext(S32 index);
void swapWithPrevious(S32 index);
@@ -700,9 +703,9 @@ private:
LLColor4 mDefaultListTextColor;
S32 mBorderThickness;
void (*mOnDoubleClickCallback)(void* userdata);
void (*mOnMaximumSelectCallback)(void* userdata );
void (*mOnSortChangedCallback)(void* userdata);
callback_t mOnDoubleClickCallback;
callback_t mOnMaximumSelectCallback;
callback_t mOnSortChangedCallback;
S32 mHighlightedItem;
class LLViewBorder* mBorder;

View File

@@ -527,10 +527,6 @@ BOOL LLUICtrl::getTentative() const
return mTentative;
}
// virtual
void LLUICtrl::setDoubleClickCallback( void (*cb)(void*) )
{
}
// virtual
void LLUICtrl::setColor(const LLColor4& color)

View File

@@ -103,7 +103,6 @@ public:
// Default to no-op:
virtual void onTabInto();
virtual void clear();
virtual void setDoubleClickCallback( void (*cb)(void*) );
virtual void setColor(const LLColor4& color);
virtual void setAlpha(F32 alpha);
virtual void setMinValue(LLSD min_value);

View File

@@ -127,8 +127,7 @@ BOOL HBFloaterGroupTitles::postBuild()
{
return FALSE;
}
mTitlesList->setCallbackUserData(this);
mTitlesList->setDoubleClickCallback(onActivate);
mTitlesList->setDoubleClickCallback(boost::bind(&HBFloaterGroupTitles::onActivate,this));
childSetAction("activate", onActivate, this);
update_titles_list(this);
return TRUE;

View File

@@ -88,8 +88,7 @@ void JCFloaterAreaSearch::close(bool app)
BOOL JCFloaterAreaSearch::postBuild()
{
mResultList = getChild<LLScrollListCtrl>("result_list");
mResultList->setCallbackUserData(this);
mResultList->setDoubleClickCallback(onDoubleClick);
mResultList->setDoubleClickCallback(onDoubleClick,this);
mResultList->sortByColumn("Name", TRUE);
mCounterText = getChild<LLTextBox>("counter");

View File

@@ -333,10 +333,10 @@ BOOL LLPanelActiveSpeakers::postBuild()
mSpeakerList = getChild<LLScrollListCtrl>("speakers_list");
mSpeakerList->sortByColumn(sort_column, sort_ascending);
mSpeakerList->setDoubleClickCallback(onDoubleClickSpeaker);
mSpeakerList->setDoubleClickCallback(boost::bind(&onDoubleClickSpeaker,this));
mSpeakerList->setCommitOnSelectionChange(TRUE);
mSpeakerList->setCommitCallback(onSelectSpeaker);
mSpeakerList->setSortChangedCallback(onSortChanged);
mSpeakerList->setSortChangedCallback(boost::bind(&LLPanelActiveSpeakers::onSortChanged,this));
mSpeakerList->setCallbackUserData(this);
mMuteTextCtrl = getChild<LLUICtrl>("mute_text_btn");

View File

@@ -354,7 +354,7 @@ BOOL LLFloaterAvatarList::postBuild()
mAvatarList->setCommitOnSelectionChange(TRUE);
mAvatarList->setCallbackUserData(this);
mAvatarList->setCommitCallback(onSelectName);
mAvatarList->setDoubleClickCallback(onClickFocus);
mAvatarList->setDoubleClickCallback(boost::bind(&LLFloaterAvatarList::onClickFocus,this));
refreshAvatarList();
gIdleCallbacks.addFunction(LLFloaterAvatarList::callbackIdle);

View File

@@ -108,23 +108,25 @@ BOOL LLFloaterAvatarPicker::postBuild()
childSetKeystrokeCallback("Edit", editKeystroke, this);
childSetKeystrokeCallback("EditUUID", editKeystroke, this);
childSetAction("Find", onBtnFind, this);
childDisable("Find");
childSetAction("Refresh", onBtnRefresh, this);
childSetCommitCallback("near_me_range", onRangeAdjust, this);
childSetAction("Find", boost::bind(&LLFloaterAvatarPicker::onBtnFind, this));
getChildView("Find")->setEnabled(FALSE);
childSetAction("Refresh", boost::bind(&LLFloaterAvatarPicker::onBtnRefresh, this));
getChild<LLUICtrl>("near_me_range")->setCommitCallback(boost::bind(&LLFloaterAvatarPicker::onRangeAdjust, _1, this));
childSetDoubleClickCallback("SearchResults", onBtnSelect);
childSetDoubleClickCallback("NearMe", onBtnSelect);
childSetCommitCallback("SearchResults", onList, this);
childSetCommitCallback("NearMe", onList, this);
childDisable("SearchResults");
LLScrollListCtrl* searchresults = getChild<LLScrollListCtrl>("SearchResults");
searchresults->setDoubleClickCallback( boost::bind(&LLFloaterAvatarPicker::onBtnSelect, this));
searchresults->setCommitCallback(boost::bind(&LLFloaterAvatarPicker::onList, _1, this));
getChildView("SearchResults")->setEnabled(FALSE);
childSetAction("Select", onBtnSelect, this);
childDisable("Select");
LLScrollListCtrl* nearme = getChild<LLScrollListCtrl>("NearMe");
nearme->setDoubleClickCallback(boost::bind(&LLFloaterAvatarPicker::onBtnSelect, this));
nearme->setCommitCallback(boost::bind(&LLFloaterAvatarPicker::onList, _1, this));
childSetAction("Cancel", onBtnClose, this);
childSetAction("Select", boost::bind(&LLFloaterAvatarPicker::onBtnSelect, this));
getChildView("Select")->setEnabled(FALSE);
childSetAction("Cancel", boost::bind(&LLFloaterAvatarPicker::onBtnClose, this));
childSetFocus("Edit");
getChild<LLUICtrl>("Edit")->setFocus(TRUE);
LLPanel* search_panel = getChild<LLPanel>("SearchPanel");
if (search_panel)
@@ -162,10 +164,9 @@ LLFloaterAvatarPicker::~LLFloaterAvatarPicker()
sInstance = NULL;
}
void LLFloaterAvatarPicker::onBtnFind(void* userdata)
void LLFloaterAvatarPicker::onBtnFind()
{
LLFloaterAvatarPicker* self = (LLFloaterAvatarPicker*)userdata;
if(self) self->find();
find();
}
static void getSelectedAvatarData(const LLScrollListCtrl* from, std::vector<std::string>& avatar_names, std::vector<LLUUID>& avatar_ids)

View File

@@ -56,7 +56,7 @@ private:
static void editKeystroke(class LLLineEditor* caller, void* user_data);
static void onBtnFind(void* userdata);
void onBtnFind();
static void onBtnSelect(void* userdata);
static void onBtnRefresh(void* userdata);
static void onRangeAdjust(LLUICtrl* source, void* data);

View File

@@ -75,15 +75,16 @@ void LLFloaterExploreSounds::close(bool app_quitting)
BOOL LLFloaterExploreSounds::postBuild(void)
{
childSetDoubleClickCallback("sound_list", handle_play_locally, this);
LLScrollListCtrl* soundlist = getChild<LLScrollListCtrl>("sound_list");
soundlist->setDoubleClickCallback(boost::bind(&LLFloaterExploreSounds::handle_play_locally,this));
soundlist->sortByColumn("playing", TRUE);
childSetAction("play_locally_btn", handle_play_locally, this);
childSetAction("look_at_btn", handle_look_at, this);
childSetAction("stop_btn", handle_stop, this);
childSetAction("bl_btn", blacklistSound, this);
LLScrollListCtrl* list = getChild<LLScrollListCtrl>("sound_list");
list->sortByColumn("playing", TRUE);
return TRUE;
}

View File

@@ -369,7 +369,7 @@ BOOL LLPanelFriends::postBuild()
mFriendsList->setCommitOnSelectionChange(TRUE);
childSetCommitCallback("friend_list", onSelectName, this);
childSetCommitCallback("buddy_group_combobox", onChangeContactGroup, this);
childSetDoubleClickCallback("friend_list", onClickIM);
mFriendsList->setDoubleClickCallback(onClickIM, this);
// <dogmode>
// Contact search and group system.

View File

@@ -114,8 +114,9 @@ BOOL LLFloaterGesture::postBuild()
setTitle(label);
childSetCommitCallback("gesture_list", onCommitList, this);
childSetDoubleClickCallback("gesture_list", onClickPlay);
LLScrollListCtrl* gesture_list = getChild<LLScrollListCtrl>("avatar_list");
gesture_list->setCommitCallback(boost::bind(&LLFloaterGesture::onCommitList,this));
gesture_list->setDoubleClickCallback(boost::bind(&LLFloaterGesture::onClickPlay,this));
childSetAction("inventory_btn", onClickInventory, this);

View File

@@ -136,8 +136,7 @@ BOOL LLFloaterGroupPicker::postBuild()
setDefaultBtn("OK");
childSetDoubleClickCallback("group list", onBtnOK);
childSetUserData("group list", this);
group_list->setDoubleClickCallback(boost::bind(&LLFloaterGroupPicker::onBtnOK,this));
childEnable("OK");
@@ -222,7 +221,8 @@ BOOL LLPanelGroups::postBuild()
const std::string none_text = getString("none");
LLScrollListCtrl *group_list = getChild<LLScrollListCtrl>("group list");
init_group_list(group_list, gAgent.getGroupID(), none_text);
group_list->setSortChangedCallback(onGroupSortChanged); //Force 'none' to always be first entry.
group_list->setSortChangedCallback(boost::bind(&onGroupSortChanged,this)); //Force 'none' to always be first entry.
group_list->setDoubleClickCallback(boost::bind(&LLPanelGroups::onBtnIM,this));
childSetAction("Activate", onBtnActivate, this);
@@ -242,9 +242,6 @@ BOOL LLPanelGroups::postBuild()
setDefaultBtn("IM");
childSetDoubleClickCallback("group list", onBtnIM);
childSetUserData("group list", this);
reset();
return TRUE;

View File

@@ -1126,7 +1126,7 @@ BOOL LLPanelLandObjects::postBuild()
mOwnerList = getChild<LLNameListCtrl>("owner list");
mOwnerList->sortByColumnIndex(3, FALSE);
childSetCommitCallback("owner list", onCommitList, this);
mOwnerList->setDoubleClickCallback(onDoubleClickOwner);
mOwnerList->setDoubleClickCallback(boost::bind(&LLPanelLandObjects::onDoubleClickOwner, this));
return TRUE;
}

View File

@@ -100,11 +100,12 @@ BOOL LLFloaterLandHoldings::postBuild()
childSetAction("Teleport", onClickTeleport, this);
childSetAction("Show on Map", onClickMap, this);
// Grant list
childSetDoubleClickCallback("grant list", onGrantList);
childSetUserData("grant list", this);
LLScrollListCtrl *grant_list = getChild<LLScrollListCtrl>("grant list");
LLCtrlListInterface *list = childGetListInterface("grant list");
// Grant list
grant_list->setDoubleClickCallback(boost::bind(&LLFloaterLandHoldings::onGrantList,this));
LLCtrlListInterface *list = grant_list->getListInterface();
if (!list) return TRUE;
S32 count = gAgent.mGroups.count();

View File

@@ -60,8 +60,7 @@ BOOL LLFloaterNewIM::postBuild()
mSelectionList = getChild<LLNameListCtrl>("user_list");
if (mSelectionList)
{
mSelectionList->setDoubleClickCallback(&LLFloaterNewIM::onStart);
mSelectionList->setCallbackUserData(this);
mSelectionList->setDoubleClickCallback(boost::bind(&LLFloaterNewIM::onStart,this));
}
else
{

View File

@@ -77,12 +77,10 @@ BOOL LLNotificationChannelPanel::postBuild()
mChannelRejectsPtr->connectChanged(boost::bind(&LLNotificationChannelPanel::update, this, _1, false));
LLScrollListCtrl* scroll = getChild<LLScrollListCtrl>("notifications_list");
scroll->setDoubleClickCallback(onClickNotification);
scroll->setCallbackUserData(this);
scroll->setDoubleClickCallback(boost::bind(&LLNotificationChannelPanel::onClickNotification,this));
scroll = getChild<LLScrollListCtrl>("notification_rejects_list");
scroll->setDoubleClickCallback(onClickNotificationReject);
scroll->setCallbackUserData(this);
scroll->setDoubleClickCallback(boost::bind(&LLNotificationChannelPanel::onClickNotificationReject,this));
return TRUE;
}

View File

@@ -96,8 +96,8 @@ BOOL LLFloaterTeleportHistory::postBuild()
}
// setup callbacks for the scroll list
mPlacesList->setDoubleClickCallback(onTeleport);
childSetCommitCallback("places_list", onPlacesSelected, this);
mPlacesList->setDoubleClickCallback(boost::bind(&LLFloaterTeleportHistory::onTeleport,this));
mPlacesList->setCommitCallback(boost::bind(&LLFloaterTeleportHistory::onPlacesSelected,_1,this));
childSetAction("teleport", onTeleport, this);
childSetAction("show_on_map", onShowOnMap, this);
childSetAction("copy_slurl", onCopySLURL, this);

View File

@@ -92,12 +92,13 @@ LLFloaterTopObjects::~LLFloaterTopObjects()
// virtual
BOOL LLFloaterTopObjects::postBuild()
{
childSetCommitCallback("objects_list", onCommitObjectsList, this);
childSetDoubleClickCallback("objects_list", onDoubleClickObjectsList);
childSetFocus("objects_list");
LLScrollListCtrl *objects_list = getChild<LLScrollListCtrl>("objects_list");
if (objects_list)
{
objects_list->setCommitCallback(boost::bind(&LLFloaterTopObjects::onCommitObjectsList,_1,this));
objects_list->setDoubleClickCallback(boost::bind(&LLFloaterTopObjects::onDoubleClickObjectsList,this));
objects_list->setFocus(true);
objects_list->setCommitOnSelectionChange(TRUE);
}

View File

@@ -220,13 +220,9 @@ BOOL LLFloaterWorldMap::postBuild()
location_editor->setKeystrokeCallback( onSearchTextEntry );
LLScrollListCtrl* search_results = getChild<LLScrollListCtrl>("search_results");
search_results->setDoubleClickCallback(&LLFloaterWorldMap::onClickTeleportBtn_static);
search_results->setCallbackUserData(this);
search_results->setDoubleClickCallback(boost::bind(&LLFloaterWorldMap::onClickTeleportBtn,this));
mListSearchResults = dynamic_cast<LLCtrlListInterface *>(search_results);
LLComboBox *landmark_combo = getChild<LLComboBox>( "landmark combo");
landmark_combo->selectFirstItem();

View File

@@ -127,7 +127,6 @@ protected:
void onClearBtn();
void onClickTeleportBtn();
static void onClickTeleportBtn_static(void* data) {((LLFloaterWorldMap*)data)->onClickTeleportBtn();};
void onShowTargetBtn();
void onShowAgentBtn();
void onCopySLURL();

View File

@@ -582,11 +582,10 @@ BOOL LLPanelAvatarSecondLife::postBuild(void)
childSetAction("Offer Teleport...", LLPanelAvatar::onClickOfferTeleport,
getPanelAvatar() );
childSetDoubleClickCallback("groups", onDoubleClickGroup, this );
getChild<LLScrollListCtrl>("groups")->setDoubleClickCallback(boost::bind(&LLPanelAvatarSecondLife::onDoubleClickGroup,this));
childSetAction("bigimg", onClickImage, this);
getChild<LLTextureCtrl>("img")->setFallbackImageName("default_profile_picture.j2c");
return TRUE;

View File

@@ -156,8 +156,7 @@ BOOL LLPanelGroupGeneral::postBuild()
mListVisibleMembers = getChild<LLNameListCtrl>("visible_members", recurse);
if (mListVisibleMembers)
{
mListVisibleMembers->setDoubleClickCallback(&LLPanelGroupGeneral::openProfile);
mListVisibleMembers->setCallbackUserData(this);
mListVisibleMembers->setDoubleClickCallback(boost::bind(&LLPanelGroupGeneral::openProfile,this));
}
// Options

View File

@@ -890,11 +890,10 @@ BOOL LLPanelGroupMembersSubTab::postBuildSubTab(LLView* root)
if (!mMembersList || !mAssignedRolesList || !mAllowedActionsList) return FALSE;
// We want to be notified whenever a member is selected.
mMembersList->setCallbackUserData(this);
mMembersList->setCommitOnSelectionChange(TRUE);
mMembersList->setCommitCallback(onMemberSelect);
mMembersList->setCommitCallback(boost::bind(&LLPanelGroupMembersSubTab::onMemberSelect,_1,this));
// Show the member's profile on double click.
mMembersList->setDoubleClickCallback(onMemberDoubleClick);
mMembersList->setDoubleClickCallback(boost::bind(&LLPanelGroupMembersSubTab::onMemberDoubleClick,this));
LLButton* button = parent->getChild<LLButton>("member_invite", recurse);
if ( button )

View File

@@ -1579,11 +1579,9 @@ BOOL LLPanelGroupVoting::postBuild()
//associate callbacks
if ( success )
{
mImpl->mProposals->setDoubleClickCallback(impl::onDoubleClickProposal);
mImpl->mProposals->setCallbackUserData(mImpl);
mImpl->mProposals->setDoubleClickCallback(boost::bind(&LLPanelGroupVoting::impl::onDoubleClickProposal,mImpl));
mImpl->mVotesHistory->setDoubleClickCallback(impl::onDoubleClickHistoryItem);
mImpl->mVotesHistory->setCallbackUserData(mImpl);
mImpl->mVotesHistory->setDoubleClickCallback(boost::bind(&LLPanelGroupVoting::impl::onDoubleClickHistoryItem,mImpl));
mImpl->mBtnAbstain->setClickedCallback(boost::bind(&impl::onClickAbstain,mImpl));

View File

@@ -434,8 +434,8 @@ BOOL LLPreviewGesture::postBuild()
list = getChild<LLScrollListCtrl>("library_list");
list->setCommitCallback(onCommitLibrary);
list->setDoubleClickCallback(onClickAdd);
list->setCallbackUserData(this);
list->setDoubleClickCallback(boost::bind(&LLPreviewGesture::onClickAdd,this));
mLibraryList = list;
btn = getChild<LLButton>( "add_btn");
@@ -527,12 +527,10 @@ BOOL LLPreviewGesture::postBuild()
btn = getChild<LLButton>( "save_btn");
btn->setClickedCallback(boost::bind(&LLPreviewGesture::onClickSave,this));
btn->setCallbackUserData(this);
mSaveBtn = btn;
btn = getChild<LLButton>( "preview_btn");
btn->setClickedCallback(boost::bind(&LLPreviewGesture::onClickPreview,this));
btn->setCallbackUserData(this);
mPreviewBtn = btn;