diff options
Diffstat (limited to 'indra/newview/llfloatermap.cpp')
-rw-r--r-- | indra/newview/llfloatermap.cpp | 199 |
1 files changed, 199 insertions, 0 deletions
diff --git a/indra/newview/llfloatermap.cpp b/indra/newview/llfloatermap.cpp new file mode 100644 index 0000000000..bbac916331 --- /dev/null +++ b/indra/newview/llfloatermap.cpp @@ -0,0 +1,199 @@ +/** + * @file llfloatermap.cpp + * @brief The "mini-map" or radar in the upper right part of the screen. + * + * Copyright (c) 2001-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#include "llviewerprecompiledheaders.h" + +// self include +#include "llfloatermap.h" + +// Library includes +#include "llfontgl.h" +#include "llinventory.h" +#include "message.h" + +// Viewer includes +#include "llagent.h" +#include "llcolorscheme.h" +#include "llviewercontrol.h" +#include "lldraghandle.h" +#include "lleconomy.h" +#include "llfloaterworldmap.h" +#include "llfocusmgr.h" +#include "llnetmap.h" +#include "llregionhandle.h" +#include "llresizebar.h" +#include "llresizehandle.h" +#include "llresmgr.h" +#include "llsky.h" +#include "llsliderctrl.h" +#include "llspinctrl.h" +#include "llstatgraph.h" +#include "llstatusbar.h" +#include "lltextbox.h" +#include "llui.h" +#include "llviewermenu.h" +#include "llviewerparceloverlay.h" +#include "llviewerregion.h" +#include "llviewerstats.h" +#include "viewer.h" + +#include "llglheaders.h" + +// +// Constants +// +const S32 LEGEND_SIZE = 16; + +const S32 HPAD = 4; + +const S32 MAP_COMBOBOX_WIDTH = 128; +const S32 MAP_COMBOBOX_HEIGHT = 20; +const S32 GO_BTN_WIDTH = 20; +const S32 SLIDER_WIDTH = LEGEND_SIZE + MAP_COMBOBOX_WIDTH + HPAD + GO_BTN_WIDTH - HPAD; +const S32 SLIDER_HEIGHT = 16; + +const S32 SIM_STAT_WIDTH = 8; + +const S32 MAP_SCALE_MIN = 35; // in pixels per sim +const S32 MAP_SCALE_MAX = 180; // in pixels per sim +const S32 MAP_SCALE_INCREMENT = 5; + +const char MAP_TITLE[] = ""; + +const S32 NETMAP_MIN_WIDTH = 128; +const S32 NETMAP_MIN_HEIGHT = 128; + +const S32 FLOATERMAP_MIN_WIDTH = + SLIDER_WIDTH + + 2 * (HPAD + LLPANEL_BORDER_WIDTH); + +const S32 MORE_BTN_VPAD = 2; + +const S32 SPIN_VPAD = 4; + +const S32 TRACKING_LABEL_HEIGHT = 16; + +const S32 FLOATERMAP_MIN_HEIGHT_LARGE = 60; + +// +// Globals +// +LLFloaterMap *gFloaterMap = NULL; + + + + +// +// Member functions +// + +LLFloaterMap::LLFloaterMap(const std::string& name) + : + LLFloater(name, + "FloaterMapRect", + MAP_TITLE, + TRUE, + FLOATERMAP_MIN_WIDTH, + FLOATERMAP_MIN_HEIGHT_LARGE, + FALSE, + FALSE, + TRUE) // close button +{ + const S32 LEFT = LLPANEL_BORDER_WIDTH; + const S32 TOP = mRect.getHeight(); + + S32 y = 0; + + // Map itself + LLRect map_rect( + LEFT, + TOP - LLPANEL_BORDER_WIDTH, + mRect.getWidth() - LLPANEL_BORDER_WIDTH, + y ); + LLColor4 bg_color = gColors.getColor( "NetMapBackgroundColor" ); + mMap = new LLNetMap("Net Map", map_rect, bg_color); + mMap->setFollowsAll(); + addChildAtEnd(mMap); + + // Get the drag handle all the way in back + removeChild(mDragHandle); + addChildAtEnd(mDragHandle); + + setIsChrome(TRUE); +} + + +LLFloaterMap::~LLFloaterMap() +{ +} + + +// virtual +void LLFloaterMap::setVisible(BOOL visible) +{ + LLFloater::setVisible(visible); + + gSavedSettings.setBOOL("ShowMiniMap", visible); +} + + +// virtual +void LLFloaterMap::onClose(bool app_quitting) +{ + LLFloater::setVisible(FALSE); + + if (!app_quitting) + { + gSavedSettings.setBOOL("ShowMiniMap", FALSE); + } +} + +BOOL LLFloaterMap::canClose() +{ + return !gQuit; +} + + +// virtual +void LLFloaterMap::draw() +{ + if( getVisible() ) + { + // Note: we can't just gAgent.check cameraMouselook() because the transition states are wrong. + if( gAgent.cameraMouselook()) + { + setMouseOpaque(FALSE); + mDragHandle->setMouseOpaque(FALSE); + + drawChild(mMap); + } + else + { + setMouseOpaque(TRUE); + mDragHandle->setMouseOpaque(TRUE); + + LLFloater::draw(); + } + } +} + +// static +void LLFloaterMap::toggle(void*) +{ + if( gFloaterMap ) + { + if (gFloaterMap->getVisible()) + { + gFloaterMap->close(); + } + else + { + gFloaterMap->open(); + } + } +} |