summaryrefslogtreecommitdiff
path: root/indra/newview/llfloateruipreview.cpp
AgeCommit message (Collapse)Author
2024-05-15Manual whitespace cleanup (fix_whitespace.py).Nat Goodspeed
2024-05-02Introduce LLLater::getRemaining(handle).Nat Goodspeed
Some timer use cases need to know not only whether the timer is active, but how much time remains before it (next) fires. Introduce LLLater::mDoneTimes to track, for each handle, the timestamp at which it's expected to fire. We can't just look up the target timestamp in mQueue's func_at entry because there's no documented way to navigate from a handle_type to a node iterator or pointer. Nor can we store it in mHandles because of order dependency: we need the mDoneTimes iterator so we can bind it into the Periodic functor for doPeriodically(), but we need the mQueue handle to store in mHandles. If we could find the mQueue node from the new handle, we could update the func_at entry after emplace() -- but if we could find the mQueue node from a handle, we wouldn't need to store the target timestamp separately anyway. Split LLLater::doAtTime() into internal doAtTime1() and doAtTime2(): the first creates an mDoneTimes entry and returns an iterator, the second finishes creating new mQueue and mHandles entries based on that mDoneTimes entry. This lets doPeriodically()'s Periodic bind the mDoneTimes iterator. Then instead of continually incrementing an internal data member, it increments the mDoneTimes entry to set the next upcoming timestamp. That lets getRemaining() report the next upcoming timestamp rather than only the original one. Add LLEventTimer::isRunning() and getRemaining(), forwarding to its LLLater handle. Fix various LLEventTimer subclass references to mEventTimer.stop(), etc. Fix non-inline LLEventTimer subclass tick() overrides for bool, not BOOL. Remove LLAppViewer::idle() call to LLEventTimer::updateClass(). Since LLApp::stepFrame() already calls LLCallbackList::callFunctions(), assume we've already handled that every tick.
2024-05-02WIP: In llcallbacklist.h, add singleton LLLater for time delays.Nat Goodspeed
The big idea is to reduce the number of per-tick callbacks asking, "Is it time yet? Is it time yet?" We do that for LLEventTimer and LLEventTimeout. LLLater presents doAtTime(LLDate), with doAfterInterval() and doPeriodically() methods implemented using doAtTime(). All return handles. The free functions doAfterInterval() and doPeriodically() now forward to the corresponding LLLater methods. LLLater also presents isRunning(handle) and cancel(handle). LLLater borrows the tactic of LLEventTimer: while there's at least one running timer, it registers an LLCallbackList tick() callback to service ready timers. But instead of looping over all of them asking, "Are you ready?" it keeps them in a priority queue ordered by desired timestamp, and only touches those whose timestamp has been reached. Also, it honors a maximum time slice: once the ready timers have run for longer than the limit, it defers processing other ready timers to the next tick() call. The intent is to consume fewer cycles per tick() call, both by the management machinery and the timers themselves. Revamp LLCallbackList to accept C++ callables in addition to (classic C function pointer, void*) pairs. Make addFunction() return a handle (different than LLLater handles) that can be passed to a new deleteFunction() overload, since std::function instances can't be compared for equality. In fact, implement LLCallbackList using boost::signals2::signal, which provides almost exactly what we want. LLCallbackList continues to accept (function pointer, void*) pairs, but now we store a lambda that calls the function pointer with that void*. It takes less horsing around to create a C++ callable from a (function pointer, void*) pair than the other way around. For containsFunction() and deleteFunction(), such pairs are the keys for a lookup table whose values are handles. Instead of having a static global LLCallbackList gIdleCallbacks, make LLCallbackList an LLSingleton to guarantee initialization. For backwards compatibility, gIdleCallbacks is now a macro for LLCallbackList::instance(). Move doOnIdleOneTime() and doOnIdleRepeating() functions to LLCallbackList methods, but for backwards compatibility continue providing free functions. Reimplement LLEventTimer using LLLater::doPeriodically(). One implication is that LLEventTimer need no longer be derived from LLInstanceTracker, which we used to iterate over all instances every tick. Give it start() and stop() methods, since some subclasses (e.g. LLFlashTimer) used to call its member LLTimer's start() and stop(). Remove updateClass(): LLCallbackList::callFunctions() now takes care of that. Remove LLToastLifeTimer::start() and stop(), since LLEventTimer now provides those. Remove getRemainingTimeF32(), since LLLater does not (yet) provide that feature. While at it, make LLEventTimer::tick() return bool instead of BOOL, and change existing overrides. Make LLApp::stepFrame() call LLCallbackList::callFunctions() instead of LLEventTimer::updateClass(). We could have refactored LLEventTimer to use the mechanism now built into LLLater, but frankly the LLEventTimer API is rather clumsy. You MUST derive a subclass and override tick(), and you must instantiate your subclass on the heap because, when your tick() override returns false, LLEventTimer deletes its subclass instance. The LLLater API is simpler to use, and LLEventTimer is much simplified by using it. Merge lleventfilter.h's LLEventTimeoutBase into LLEventTimeout, and likewise merge LLEventThrottleBase into LLEventThrottle. The separation was for testability, but now that they're no longer based on LLTimer, it becomes harder to use dummy time for testing. Temporarily skip tests based on LLEventTimeoutBase and LLEventThrottleBase. Instead of listening for LLEventPump("mainloop") ticks and using LLTimer, LLEventTimeout now uses LLLater::doAfterInterval(). Instead of LLTimer and LLEventTimeout, LLEventThrottle likewise now uses LLLater::doAfterInterval(). Recast a couple local LLEventTimeout pre-lambda callable classes with lambdas. Dignify F64 with a new typedef LLDate::timestamp. LLDate heavily depends on that as its base time representation, but there are those who question use of floating-point for time. This is a step towards insulating us from any future change.
2024-03-01Merge branch 'main' into marchcat/yz-mergeAndrey Lihatskiy
# Conflicts: # indra/newview/llinventorygallery.cpp
2024-01-17SL-20795 Part of previously typed emojis disappear in the 'Save settings as ↵Alexander Gavriliuk
a preset...' option of the 'Preferences' floater
2024-01-08replace boost library to standardAiraYumi
2023-12-05Merge branch 'main' into DRTVWR-489Alexander Gavriliuk
2022-08-28Merge branch 'contribution/emoji'Kitty Barnett
2022-08-23SL-17653 Local gltf materials #2Andrey Kleshchev
2019-11-06Characters can have more than one representation in LLFontFreetypeKitty Barnett
* By default all viewer text will use B/W glyphs * Added temporary use_color attribute to LLTextBase for testing
2019-08-10DRTVWR-493 LLUI to LLParamSingletonandreykproductengine
2018-11-22line endings fixmaxim_productengine
2018-11-21SL-10113 FIXED [Win] File pickers are not threaded in XUI preview floatermaxim_productengine
2015-11-10remove execute permission from many files that should not have itOz Linden
2014-10-18Update to build on Xcode 6.0: remove unused member variablecallum_linden
2014-05-06Pull merge from lindenlab/viewer-release. Fixed some conflicts and compile ↵Merov Linden
errors
2013-12-18Fix FFLOAD_ALL issue in file picker, add FFLOAD_EXE to fix exe picking on ↵Merov Linden
Mac Cocoa
2013-08-09second phase summer cleaningRichard Linden
replace llinfos, lldebugs, etc with new LL_INFOS(), LL_DEBUGS(), etc.
2013-04-19merge changes for DRTVWR-294Oz Linden
2013-03-29Update Mac and Windows breakpad builds to latestGraham Madarasz
2012-11-28SH-3563. Pull and merge from viewer-development. Modest code changes to fix ↵prep
alignment issue in llAppearance.
2012-10-11Updating linux build to gcc4.6Don Kjer
2012-10-10Introduce new LLDir::findSkinnedFilenames() method. Use as needed.Nat Goodspeed
In a number of different places, for different reasons, the viewer wants to load a UI-related file that might be overridden by a non-default skin; and within that skin, might further be overridden by a non-default language. Apparently, for each of those use cases, every individual developer approached it as an entirely new problem, solving it idiosyncratically for that one case. Not only is this a maintenance problem, but it rubs one's nose in the fact that most such solutions consider only a subset of the relevant skin directories. Richard and I evolved an API intended to address all such cases: a central LLDir method returning a list of relevant pathnames, from most general to most localized, filtered to present only existing files; plus a couple of convenience methods to specifically obtain the most general and most localized available file. There were several load-skinned-file methods (LLFloater::buildFromFile(), LLPanel::buildFromFile() and LLUICtrlFactory::createFromFile() -- apparently cloned-and-modified from each other) that contained funky bolted-on logic to output the loaded data to an optional passed LLXMLNodePtr param. The trouble is that passing that param forced each of these methods to subvert its normal search: specifically for that case, it needed to find the baseline XML file instead of the localized one. Richard agreed that for the intended usage (reformatting XML files) we should use XML schema instead, and that the hacky functionality should be removed. Remove it. Also remove LLUICtrlFactory::getLocalizedXMLNode(), only used for those three special cases. Some callers explicitly passed the optional LLXMLNodePtr param as NULL. Remove that. Remove LLFloaterUIPreview::displayFloater(save) param, which relied on the optional output LLXMLNodePtr param. Make onClickSaveFloater() and onClickSaveAll() emit popupAndPrintWarning() about discontinued functionality. Recast LLFloater::buildFromFile(), LLPanel::buildFromFile(), LLUICtrlFactory::createFromFile(), LLNotifications::loadTemplates(), LLUI::locateSkin(), LLFontRegistry::parseFontInfo(), LLUIColorTable::loadFromSettings(), LLUICtrlFactory::loadWidgetTemplate(), LLUICtrlFactory::getLayeredXMLNode(), LLUIImageList::initFromFile(), LLAppViewer::launchUpdater() and LLMediaCtrl::navigateToLocalPage() to use findSkinnedFilenames(). (Is LLAppViewer::launchUpdater() ever called any more? Apparently so -- though the linux-updater.bin logic to process the relevant command-line switch has been disabled. Shrug.) (Is LLMediaCtrl::navigateToLocalPage() ever used?? If so, why?) Remove LLUI::setupPaths(), getXUIPaths(), getSkinPath() and getLocalizedSkinPath(). Remove the skins/paths.xml file read by setupPaths(). The only configuration it contained was the pair of partial paths "xui/en" and "xui/[LANGUAGE]" -- hardly likely to change. getSkinPath() specifically returned the first of these, while getLocalizedSkinPath() specifically returned the second. This knowledge is now embedded in findSkinnedFilenames(). Also remove paths.xml from viewer_manifest.py. Remove injected xui_paths from LLFontGL::initClass() and LLFontRegistry::LLFontRegistry(). These are no longer needed since LLFontRegistry can now directly consult LLDir for its path search. Stop passing LLUI::getXUIPaths() to LLFontGL::initClass() in LLViewerWindow's constructor and initFonts() method. Add LLDir::append() and add() methods for the simple task of combining two path components separated by getDirDelimiter() -- but only if they're both non-empty. Amazing how often that logic is replicated. Replace some existing concatenations with add() or append(). New LLDir::findSkinnedFilenames() method must know current language. Allow injecting current language by adding an LLDir::setSkinFolder(language) param, and pass it where LLAppViewer::init() and initConfiguration() currently call setSkinFolder(). Also add LLDir::getSkinFolder() and getLanguage() methods. Change LLFLoaterUIPreview's LLLocalizationResetForcer helper to "forcibly reset language" using LLDir::setSkinFolder() instead of LLUI::setupPaths(). Update LLDir stubs in lldir_stub.cpp and llupdaterservice_test.cpp. Add LLDir::getUserDefaultSkinDir() to obtain often-overlooked possible skin directory -- like getUserSkinDir() but with "default" in place of the current skin name as the last path component. (However, we hope findSkinnedFilenames() obviates most explicit use of such individual skin directory pathnames.) Add LLDir unit tests for new findSkinnedFilenames() and add() methods -- the latter exercises append() as well. Tweak indra/integration_tests/llui_libtest/llui_libtest.cpp for all the above. Notably, comment out its export_test_floaters() function, since the essential LLFloater::buildFromFile(optional LLXMLNodePtr) functionality has been removed. This may mean that llui_libtest.cpp has little remaining value, not sure.
2012-01-17EXP-1811 FIX Login progress floater has smaller than expected sizeRichard Linden
made minimum size reflect default size for 1024 width window of old layout stack no way to match behavior
2011-05-11STORM-477 Restored the backed out changeset: b62b260aa04dSeth ProductEngine
2011-03-07STORM-1018 FIXED Improved error messaging for the External Editor feature.Vadim ProductEngine
Let the user know what's wrong with external editor. Added meaningful messages for the following errors: * Editor not specified. * Error parsing command line. * Specified binary not found. * Editor failed to run. All the messages are translatable.
2011-01-13STORM-477 : backout changeset 6f5cb303d3e2Merov Linden
2011-01-11STORM-477 FIXED Re-implemented LLDir::getNextFileInDir() as an iterator object.Seth ProductEngine
- Replaced all existing usages of LLDir::getNextFileInDir() with the new directory iterator object. - Removed platform specific LLDir::getNextFileInDir() implementation.
2010-11-15Automated merge with https://bitbucket.org/vadim_productengine/storm-52Oz Linden
2010-11-13STORM-52 FIXED Made it possible to use an external script editor.Vadim ProductEngine
The editor can be specified: * via "ExternalEditor" setting in settings.xml * via LL_SCRIPT_EDITOR variable Removed obsolete XUIEditor setting in favor of the new one.
2010-10-28STORM-480 remove unused "wrap" parameter from LLDir::getNetFileInDirOz Linden
--HG-- branch : storm-102
2010-08-27Post-convert merge by convert_monolith.py from ./viewer-experienceMonroe Linden
2010-08-20fixed buildRichard Nelson
2010-08-20changed buildPanel/buildFloater to member functions buildFromFileRichard Nelson
streamlined LLUICtrlFactory's interface
2010-08-16moved buildFloater out of lluictrlfactory to llfloater.cppRichard Nelson
2010-08-16cleaned up LLUICtrlFactory...Richard Nelson
removed redundant functionality moved buildPanel to LLPanel
2010-08-24Backed out changeset c3d41f18ce2bTofu Linden
back-out the back-out for this branch. yay.
2010-08-24Backed out changeset a62bf7c0af21Tofu Linden
Backing out this merge that I pushed (prematurely) to the wrong place.
2010-08-24merge heads. whew.Tofu Linden
2010-08-13Change license from GPL to LGPL (version 2.1)Oz Linden
2010-07-30deprecated LLPanel::child*() methodsRichard Nelson
2010-05-25DEV-50015 FIX Implement changes to the Buy L$ button in the top bar of the ↵Richard Linden
viewer
2010-02-11Fixing another suicidal timer tick()Aimee Linden
2010-02-06Update the rest of the LLEventTimer users to #include lleventtimer.h. I think.Tofu Linden
2010-02-01DEV-45525 - don't change the current directory before running the text editorKent Quirk
2010-01-31Fix for XUI previewer on Windows - DEV-45525Kent Quirk
2009-11-25Created lightweight LLNotificationsUtil::add(), switched most alerts to use itJames Cook
Cuts number of includes of llnotifications.h from 300+ to 40.
2009-11-24Removed include llnotifications.h from llfloater.h trying to speed buildsJames Cook
Fixed many other includes related to this file. Cleaned out llfloatertestlistview to be an empty test floater.
2009-11-16Eliminated redundant selection callback for LLComboBox (mSelectionCallback).Steve Bennetts
2009-11-10No Ticket: added possibility to resize a floater in UI Preview Tool (if ↵Mike Antipov
can_resize attribute is set in xml) --HG-- branch : product-engine