/** * @file floaterbusy.cpp * @brief Custom busy mode settings for Imprudence * * $LicenseInfo:firstyear=2009&license=viewergpl$ * * Copyright (c) 2010, McCabe Maxsted * * Imprudence Viewer Source Code * The source code in this file ("Source Code") is provided to you * under the terms of the GNU General Public License, version 2.0 * ("GPL"). Terms of the GPL can be found in doc/GPL-license.txt in * this distribution, or online at * http://secondlifegrid.net/programs/open_source/licensing/gplv2 * * There are special exceptions to the terms and conditions of the GPL as * it is applied to this Source Code. View the full text of the exception * in the file doc/FLOSS-exception.txt in this software distribution, or * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception * * By copying, modifying or distributing this software, you acknowledge * that you have read and understood your obligations described above, * and agree to abide by those obligations. * * ALL SOURCE CODE IS PROVIDED "AS IS." THE AUTHOR MAKES NO * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, * COMPLETENESS OR PERFORMANCE. * $/LicenseInfo$ */ #include "llviewerprecompiledheaders.h" #include "floaterbusy.h" #include "llinventorymodel.h" #include "llstartup.h" #include "lltexteditor.h" #include "lluictrlfactory.h" #include "llviewercontrol.h" #include "llviewerinventory.h" ////////begin drop utility///////////// //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Class InvDropTarget // // This handy class is a simple way to drop something on another // view. It handles drop events, always setting itself to the size of // its parent. // // altered to support a callback so i can slap it in things and it just return the item to a func of my choice //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ InvDropTarget::InvDropTarget(const std::string& name, const LLRect& rect, void (*callback)(LLViewerInventoryItem*)) : LLView(name, rect, NOT_MOUSE_OPAQUE, FOLLOWS_ALL), mDownCallback(callback) { } InvDropTarget::~InvDropTarget() { } void InvDropTarget::doDrop(EDragAndDropType cargo_type, void* cargo_data) { llinfos << "InvDropTarget::doDrop()" << llendl; } BOOL InvDropTarget::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void* cargo_data, EAcceptance* accept, std::string& tooltip_msg) { BOOL handled = FALSE; if (getParent()) { handled = TRUE; // check the type //switch(cargo_type) //{ //case DAD_ANIMATION: //{ LLViewerInventoryItem* inv_item = (LLViewerInventoryItem*)cargo_data; if (gInventory.getItem(inv_item->getUUID())) { *accept = ACCEPT_YES_COPY_SINGLE; if (drop) { //printchat("accepted"); mDownCallback(inv_item); } } else { *accept = ACCEPT_NO; } // break; //} //default: // *accept = ACCEPT_NO; // break; //} } return handled; } ////////end drop utility/////////////// // static InvDropTarget * FloaterBusy::mObjectDropTarget; FloaterBusy::FloaterBusy(const LLSD& seed) : LLFloater("floater_busy") { LLUICtrlFactory::getInstance()->buildFloater(this, "floater_busy.xml"); } BOOL FloaterBusy::postBuild() { childSetAction("btn_ok", onClickOK, this); childSetAction("btn_cancel", onClickCancel, this); LLView *target_view = getChild("im_give_drop_target_rect"); if (target_view) { if (mObjectDropTarget)//shouldn't happen { delete mObjectDropTarget; } mObjectDropTarget = new InvDropTarget("drop target", target_view->getRect(), IMAutoResponseItemDrop);//, mAvatarID); addChild(mObjectDropTarget); } if (LLStartUp::getStartupState() == STATE_STARTED) { LLUUID itemid = (LLUUID)gSavedPerAccountSettings.getString("InstantMessageResponseItemData"); LLViewerInventoryItem* item = gInventory.getItem(itemid); if (item) { childSetValue("im_give_disp_rect_txt","Currently set to: "+item->getName()); } else if (itemid.isNull()) { childSetValue("im_give_disp_rect_txt","Currently not set"); } else { childSetValue("im_give_disp_rect_txt","Currently set to a item not on this account"); } } else { childSetValue("im_give_disp_rect_txt","Not logged in"); } LLWString auto_response = utf8str_to_wstring( gSavedPerAccountSettings.getString("InstantMessageResponse") ); LLWStringUtil::replaceChar(auto_response, '^', '\n'); LLWStringUtil::replaceChar(auto_response, '%', ' '); childSetText("im_response", wstring_to_utf8str(auto_response)); childSetValue("InstantMessageResponseEnabled", gSavedPerAccountSettings.getBOOL("InstantMessageResponseEnabled")); childSetValue("InstantMessageResponseFriends", gSavedPerAccountSettings.getBOOL("InstantMessageResponseFriends")); childSetValue("InstantMessageResponseMuted", gSavedPerAccountSettings.getBOOL("InstantMessageResponseMuted")); childSetValue("InstantMessageResponseAnyone", gSavedPerAccountSettings.getBOOL("InstantMessageResponseAnyone")); childSetValue("InstantMessageShowResponded", gSavedPerAccountSettings.getBOOL("InstantMessageShowResponded")); childSetValue("InstantMessageShowOnTyping", gSavedPerAccountSettings.getBOOL("InstantMessageShowOnTyping")); childSetValue("InstantMessageResponseRepeat", gSavedPerAccountSettings.getBOOL("InstantMessageResponseRepeat" )); childSetValue("InstantMessageResponseItem", gSavedPerAccountSettings.getBOOL("InstantMessageResponseItem")); childSetValue("InstantMessageAnnounceIncoming", gSavedPerAccountSettings.getBOOL("InstantMessageAnnounceIncoming")); childSetValue("InstantMessageAnnounceStealFocus", gSavedPerAccountSettings.getBOOL("InstantMessageAnnounceStealFocus")); return TRUE; } FloaterBusy::~FloaterBusy() { delete mObjectDropTarget; mObjectDropTarget = NULL; } void FloaterBusy::IMAutoResponseItemDrop(LLViewerInventoryItem* item) { gSavedPerAccountSettings.setString("InstantMessageResponseItemData", item->getUUID().asString()); FloaterBusy::getInstance()->childSetValue("im_give_disp_rect_txt","Currently set to: "+item->getName()); } // static void FloaterBusy::onClickOK(void* userdata) { FloaterBusy* self = (FloaterBusy*)userdata; self->apply(); self->close(); } // static void FloaterBusy::onClickCancel(void* userdata) { FloaterBusy* self = (FloaterBusy*)userdata; self->cancel(); } void FloaterBusy::cancel() { close(); } void FloaterBusy::apply() { LLTextEditor* im = getChild("im_response"); LLWString im_response; if (im) im_response = im->getWText(); LLWStringUtil::replaceTabsWithSpaces(im_response, 4); LLWStringUtil::replaceChar(im_response, '\n', '^'); LLWStringUtil::replaceChar(im_response, ' ', '%'); gSavedPerAccountSettings.setString("InstantMessageResponse", std::string(wstring_to_utf8str(im_response))); gSavedPerAccountSettings.setBOOL("InstantMessageResponseEnabled", childGetValue("InstantMessageResponseEnabled").asBoolean()); gSavedPerAccountSettings.setBOOL("InstantMessageResponseMuted", childGetValue("InstantMessageResponseMuted").asBoolean()); gSavedPerAccountSettings.setBOOL("InstantMessageResponseFriends", childGetValue("InstantMessageResponseFriends").asBoolean()); gSavedPerAccountSettings.setBOOL("InstantMessageResponseMuted", childGetValue("InstantMessageResponseMuted").asBoolean()); gSavedPerAccountSettings.setBOOL("InstantMessageResponseAnyone", childGetValue("InstantMessageResponseAnyone").asBoolean()); gSavedPerAccountSettings.setBOOL("InstantMessageShowResponded", childGetValue("InstantMessageShowResponded").asBoolean()); gSavedPerAccountSettings.setBOOL("InstantMessageShowOnTyping", childGetValue("InstantMessageShowOnTyping").asBoolean()); gSavedPerAccountSettings.setBOOL("InstantMessageResponseRepeat", childGetValue("InstantMessageResponseRepeat").asBoolean()); gSavedPerAccountSettings.setBOOL("InstantMessageResponseItem", childGetValue("InstantMessageResponseItem").asBoolean()); gSavedPerAccountSettings.setBOOL("InstantMessageAnnounceIncoming", childGetValue("InstantMessageAnnounceIncoming").asBoolean()); gSavedPerAccountSettings.setBOOL("InstantMessageAnnounceStealFocus", childGetValue("InstantMessageAnnounceStealFocus").asBoolean()); }