From 85a6de50298244d8bae55f99b0997f3976ee2982 Mon Sep 17 00:00:00 2001 From: Cinder <cinder@sdf.org> Date: Tue, 28 Oct 2014 23:10:51 -0600 Subject: [PATCH] ALCH-125 - Initial implementation of transaction log --- indra/newview/CMakeLists.txt | 2 + indra/newview/llfloatertransactionlog.cpp | 103 ++++++++++++++++++ indra/newview/llfloatertransactionlog.h | 59 ++++++++++ indra/newview/llviewerfloaterreg.cpp | 2 + indra/newview/llviewermessage.cpp | 4 + .../xui/en/floater_transaction_log.xml | 56 ++++++++++ .../skins/default/xui/en/menu_viewer.xml | 32 ++++-- 7 files changed, 247 insertions(+), 11 deletions(-) create mode 100644 indra/newview/llfloatertransactionlog.cpp create mode 100644 indra/newview/llfloatertransactionlog.h create mode 100644 indra/newview/skins/default/xui/en/floater_transaction_log.xml diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 74f11b3be0..05f4e361bf 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -317,6 +317,7 @@ set(viewer_SOURCE_FILES llfloatertopobjects.cpp llfloatertos.cpp llfloatertoybox.cpp + llfloatertransactionlog.cpp llfloatertranslationsettings.cpp llfloatertwitter.cpp llfloateruipreview.cpp @@ -948,6 +949,7 @@ set(viewer_HEADER_FILES llfloatertopobjects.h llfloatertos.h llfloatertoybox.h + llfloatertransactionlog.h llfloatertranslationsettings.h llfloatertwitter.h llfloateruipreview.h diff --git a/indra/newview/llfloatertransactionlog.cpp b/indra/newview/llfloatertransactionlog.cpp new file mode 100644 index 0000000000..edd0db44ff --- /dev/null +++ b/indra/newview/llfloatertransactionlog.cpp @@ -0,0 +1,103 @@ +/* + * @file llfloatertransactionlog.h + * @brief Transaction log floater + * + * (C) 2014 Cinder Roxley @ Second Life <cinder@sdf.org> + * + * Permission is hereby granted, free of charge, to any person or organization + * obtaining a copy of the software and accompanying documentation covered by + * this license (the "Software") to use, reproduce, display, distribute, + * execute, and transmit the Software, and to prepare derivative works of the + * Software, and to permit third-parties to whom the Software is furnished to + * do so, all subject to the following: + * + * The copyright notices in the Software and this entire statement, including + * the above license grant, this restriction and the following disclaimer, + * must be included in all copies of the Software, in whole or in part, and + * all derivative works of the Software, unless such copies or derivative + * works are solely in the form of machine-executable object code generated by + * a source language processor. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT + * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE + * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include "llviewerprecompiledheaders.h" +#include "llfloatertransactionlog.h" + +#include "llavataractions.h" +#include "llavatarnamecache.h" +#include "llscrolllistctrl.h" +#include "llscrolllistitem.h" +#include "lltextbase.h" + +LLFloaterTransactionLog::LLFloaterTransactionLog(const LLSD& key) +: LLFloater(key) +, mList(nullptr) +, mTotalText(nullptr) +, mTotal(0) +, mAvatarNameCacheConnection() +{ + mCommitCallbackRegistrar.add("TL.Reset", boost::bind(&LLFloaterTransactionLog::reset, this)); +} + +LLFloaterTransactionLog::~LLFloaterTransactionLog() +{ + if (mAvatarNameCacheConnection.connected()) + mAvatarNameCacheConnection.disconnect(); +} + +BOOL LLFloaterTransactionLog::postBuild() +{ + mList = getChild<LLScrollListCtrl>("transaction_list"); + mList->setDoubleClickCallback(boost::bind(&LLFloaterTransactionLog::onDoubleClick, this)); + mTotalText = getChild<LLTextBase>("total"); + return TRUE; +} + +void LLFloaterTransactionLog::addTransaction(const LLDate& date, const LLUUID& sender, S32 amount) +{ + // drop it + if (!getVisible()) return; + + LLStringUtil::format_map_t args; + args["TOTAL"] = std::to_string(mTotal += amount); + mTotalText->setValue(getString("total_fmt", args)); + + LLSD row; + row["value"] = sender; + row["column"][0]["column"] = "time"; + row["column"][0]["value"] = date.toHTTPDateString(LLStringExplicit("%H:%M:%S"));; + row["column"][2]["column"] = "amount"; + row["column"][2]["value"] = llformat("L$%d", amount); + row["column"][2]["halign"] = LLFontGL::RIGHT; + + mAvatarNameCacheConnection = LLAvatarNameCache::get(sender, boost::bind(&LLFloaterTransactionLog::onAvatarNameCache, this, _1, _2, row)); +} + +void LLFloaterTransactionLog::onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name, LLSD& row) +{ + row["column"][1]["column"] = "name"; + row["column"][1]["value"] = av_name.getDisplayName(); + mList->addElement(row); +} + +void LLFloaterTransactionLog::onDoubleClick() +{ + const LLUUID& id = mList->getFirstSelected()->getValue().asUUID(); + LLAvatarActions::showProfile(id); +} + +void LLFloaterTransactionLog::reset() +{ + mList->deleteAllItems(); + mTotal = 0; + LLStringUtil::format_map_t args; + args["TOTAL"] = std::to_string(mTotal); + mTotalText->setValue(getString("total_fmt", args)); +} diff --git a/indra/newview/llfloatertransactionlog.h b/indra/newview/llfloatertransactionlog.h new file mode 100644 index 0000000000..ff47afe01d --- /dev/null +++ b/indra/newview/llfloatertransactionlog.h @@ -0,0 +1,59 @@ +/* + * @file llfloatertransactionlog.h + * @brief Transaction log floater + * + * (C) 2014 Cinder Roxley @ Second Life <cinder@sdf.org> + * + * Permission is hereby granted, free of charge, to any person or organization + * obtaining a copy of the software and accompanying documentation covered by + * this license (the "Software") to use, reproduce, display, distribute, + * execute, and transmit the Software, and to prepare derivative works of the + * Software, and to permit third-parties to whom the Software is furnished to + * do so, all subject to the following: + * + * The copyright notices in the Software and this entire statement, including + * the above license grant, this restriction and the following disclaimer, + * must be included in all copies of the Software, in whole or in part, and + * all derivative works of the Software, unless such copies or derivative + * works are solely in the form of machine-executable object code generated by + * a source language processor. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT + * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE + * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#ifndef LL_FLOATERTRANSACTIONLOG_H +#define LL_FLOATERTRANSACTIONLOG_H + +#include "llfloater.h" + +class LLAvatarName; +class LLScrollListCtrl; +class LLTextBase; + +class LLFloaterTransactionLog : public LLFloater +{ +public: + LLFloaterTransactionLog(const LLSD& key); + BOOL postBuild(); + void addTransaction(const LLDate& date, const LLUUID& sender, S32 amount); + +private: + ~LLFloaterTransactionLog(); + void reset(); + void onDoubleClick(); + void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name, LLSD& row); + + LLScrollListCtrl* mList; + LLTextBase* mTotalText; + S32 mTotal; + + boost::signals2::connection mAvatarNameCacheConnection; +}; + +#endif // LL_FLOATERTRANSACTIONLOG_H diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 64844c966f..bfc0fe027d 100755 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -125,6 +125,7 @@ #include "llfloatertopobjects.h" #include "llfloatertos.h" #include "llfloatertoybox.h" +#include "llfloatertransactionlog.h" #include "llfloatertranslationsettings.h" #include "llfloatertwitter.h" #include "llfloateruipreview.h" @@ -305,6 +306,7 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("test_widgets", "floater_test_widgets.xml", &LLFloaterReg::build<LLFloater>); LLFloaterReg::add("top_objects", "floater_top_objects.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterTopObjects>); LLFloaterReg::add("toybox", "floater_toybox.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterToybox>); + LLFloaterReg::add("transaction_log", "floater_transaction_log.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterTransactionLog>); LLFloaterReg::add("quick_settings", "floater_quick_settings.xml", (LLFloaterBuildFunc) &LLFloaterReg::build<LLFloater>); diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index d086d4561f..ea77d4d4df 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -65,6 +65,7 @@ #include "llfloaterprogressview.h" #include "llfloatersidepanelcontainer.h" #include "llfloatersnapshot.h" +#include "llfloatertransactionlog.h" #include "llhudeffecttrail.h" #include "llhudmanager.h" #include "llimview.h" @@ -5703,6 +5704,9 @@ static void process_money_balance_reply_extended(LLMessageSystem* msg) // make notification loggable payload["from_id"] = source_id; notification = "PaymentReceived"; + + LLFloaterTransactionLog* floater = LLFloaterReg::findTypedInstance<LLFloaterTransactionLog>("transaction_log"); + if (floater) floater->addTransaction(LLDate::now(), source_id, amount); } // Despite using SLURLs, wait until the name is available before diff --git a/indra/newview/skins/default/xui/en/floater_transaction_log.xml b/indra/newview/skins/default/xui/en/floater_transaction_log.xml new file mode 100644 index 0000000000..321965c7cb --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_transaction_log.xml @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<floater + can_close="true" + can_drag_on_left="false" + can_minimize="true" + can_resize="true" + height="300" + width="300" + name="floater_transaction_log" + title="Transaction Log" + single_instance="true" + save_rect="true"> + <floater.string + name="total_fmt"> +Total: L$[TOTAL] + </floater.string> + <scroll_list + draw_heading="true" + follows="left|top|bottom|right" + name="transaction_list" + background_visible="true" + fg_unselected_color="ScrollSelectedFGColor" + fg_selected_color="ScrollSelectedFGColor" + column_padding="0" + top="0" + left="4" + right="-4" + bottom="-26"> + <column name="time" width="50" label="Time" /> + <column name="name" dynamicwidth="true" label="Name" /> + <column name="amount" width="70" label="Amount" /> + </scroll_list> + <text + type="string" + length="1" + follows="bottom|right" + font="SansSerif" + height="20" + layout="topleft" + name="total" + top_pad="2" + width="89" + left="129" + halign="right" + value="Total: L$0" /> + <button + label="Reset" + follows="bottom|right" + height="20" + left_pad="3" + name="btn_reset" + width="75"> + <button.commit_callback + function="TL.Reset" /> + </button> +</floater> diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 404c548a5d..88f9fd5147 100755 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -180,6 +180,16 @@ <menu_item_call.on_click function="BuyCurrency" /> </menu_item_call> + <menu_item_check + label="Transaction Log..." + name="transaction_log"> + <menu_item_check.on_check + function="Floater.Visible" + parameter="transaction_log" /> + <menu_item_check.on_click + function="Floater.Toggle" + parameter="transaction_log" /> + </menu_item_check> <menu_item_call label="Merchant Outbox..." name="MerchantOutbox"> @@ -2191,17 +2201,17 @@ label="Consoles" name="Consoles" tear_off="true"> - <menu_item_check - label="Region Debug Console" - name="Region Debug Console" - shortcut="control|shift|`" - use_mac_ctrl="true"> - <menu_item_check.on_check - function="Floater.Visible" - parameter="region_debug_console" /> - <menu_item_check.on_click - function="Floater.Toggle" - parameter="region_debug_console" /> + <menu_item_check + label="Region Debug Console" + name="Region Debug Console" + shortcut="control|shift|`" + use_mac_ctrl="true"> + <menu_item_check.on_check + function="Floater.Visible" + parameter="region_debug_console" /> + <menu_item_check.on_click + function="Floater.Toggle" + parameter="region_debug_console" /> </menu_item_check> <menu_item_check label="Texture Console" -- GitLab