merge
commit
cfd132a0de
|
|
@ -507,22 +507,11 @@ LLFloater::~LLFloater()
|
|||
{
|
||||
LLFloaterReg::removeInstance(mInstanceName, mKey);
|
||||
|
||||
// delete mNotificationContext;
|
||||
// mNotificationContext = NULL;
|
||||
|
||||
//// am I not hosted by another floater?
|
||||
//if (mHostHandle.isDead())
|
||||
//{
|
||||
// LLFloaterView* parent = (LLFloaterView*) getParent();
|
||||
|
||||
// if( parent )
|
||||
// {
|
||||
// parent->removeChild( this );
|
||||
// }
|
||||
//}
|
||||
|
||||
// Just in case we might still have focus here, release it.
|
||||
releaseFocus();
|
||||
if( gFocusMgr.childHasKeyboardFocus(this))
|
||||
{
|
||||
// Just in case we might still have focus here, release it.
|
||||
releaseFocus();
|
||||
}
|
||||
|
||||
// This is important so that floaters with persistent rects (i.e., those
|
||||
// created with rect control rather than an LLRect) are restored in their
|
||||
|
|
@ -2788,7 +2777,7 @@ void LLFloaterView::adjustToFitScreen(LLFloater* floater, BOOL allow_partial_out
|
|||
}
|
||||
|
||||
// move window fully onscreen
|
||||
if (floater->translateIntoRect( getSnapRect(), allow_partial_outside ? FLOATER_MIN_VISIBLE_PIXELS : S32_MAX ))
|
||||
if (floater->translateIntoRect( gFloaterView->getRect(), allow_partial_outside ? FLOATER_MIN_VISIBLE_PIXELS : S32_MAX ))
|
||||
{
|
||||
floater->clearSnapTarget();
|
||||
}
|
||||
|
|
@ -3258,6 +3247,11 @@ bool LLFloater::isShown() const
|
|||
return ! isMinimized() && isInVisibleChain();
|
||||
}
|
||||
|
||||
bool LLFloater::isDetachedAndNotMinimized()
|
||||
{
|
||||
return !getHost() && !isMinimized();
|
||||
}
|
||||
|
||||
/* static */
|
||||
bool LLFloater::isShown(const LLFloater* floater)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -238,6 +238,7 @@ public:
|
|||
void center();
|
||||
|
||||
LLMultiFloater* getHost();
|
||||
bool isDetachedAndNotMinimized();
|
||||
|
||||
void applyTitle();
|
||||
std::string getCurrentTitle() const;
|
||||
|
|
|
|||
|
|
@ -214,8 +214,15 @@ LLLayoutStack::Params::Params()
|
|||
open_time_constant("open_time_constant", 0.02f),
|
||||
close_time_constant("close_time_constant", 0.03f),
|
||||
resize_bar_overlap("resize_bar_overlap", 1),
|
||||
border_size("border_size", LLCachedControl<S32>(*LLUI::sSettingGroups["config"], "UIResizeBarHeight", 0))
|
||||
{}
|
||||
border_size("border_size", LLCachedControl<S32>(*LLUI::sSettingGroups["config"], "UIResizeBarHeight", 0)),
|
||||
show_drag_handle("show_drag_handle", false),
|
||||
drag_handle_first_indent("drag_handle_first_indent", 0),
|
||||
drag_handle_second_indent("drag_handle_second_indent", 0),
|
||||
drag_handle_thickness("drag_handle_thickness", 5),
|
||||
drag_handle_shift("drag_handle_shift", 2)
|
||||
{
|
||||
addSynonym(border_size, "drag_handle_gap");
|
||||
}
|
||||
|
||||
LLLayoutStack::LLLayoutStack(const LLLayoutStack::Params& p)
|
||||
: LLView(p),
|
||||
|
|
@ -227,8 +234,14 @@ LLLayoutStack::LLLayoutStack(const LLLayoutStack::Params& p)
|
|||
mClip(p.clip),
|
||||
mOpenTimeConstant(p.open_time_constant),
|
||||
mCloseTimeConstant(p.close_time_constant),
|
||||
mResizeBarOverlap(p.resize_bar_overlap)
|
||||
{}
|
||||
mResizeBarOverlap(p.resize_bar_overlap),
|
||||
mShowDragHandle(p.show_drag_handle),
|
||||
mDragHandleFirstIndent(p.drag_handle_first_indent),
|
||||
mDragHandleSecondIndent(p.drag_handle_second_indent),
|
||||
mDragHandleThickness(p.drag_handle_thickness),
|
||||
mDragHandleShift(p.drag_handle_shift)
|
||||
{
|
||||
}
|
||||
|
||||
LLLayoutStack::~LLLayoutStack()
|
||||
{
|
||||
|
|
@ -262,6 +275,26 @@ void LLLayoutStack::draw()
|
|||
drawChild(panelp, 0, 0, !clip_rect.isEmpty());
|
||||
}
|
||||
}
|
||||
|
||||
const LLView::child_list_t * child_listp = getChildList();
|
||||
BOOST_FOREACH(LLView * childp, * child_listp)
|
||||
{
|
||||
LLResizeBar * resize_barp = dynamic_cast<LLResizeBar*>(childp);
|
||||
if (resize_barp && resize_barp->isShowDragHandle() && resize_barp->getVisible() && resize_barp->getRect().isValid())
|
||||
{
|
||||
LLRect screen_rect = resize_barp->calcScreenRect();
|
||||
if (LLUI::getRootView()->getLocalRect().overlaps(screen_rect) && LLUI::sDirtyRect.overlaps(screen_rect))
|
||||
{
|
||||
LLUI::pushMatrix();
|
||||
{
|
||||
const LLRect& rb_rect(resize_barp->getRect());
|
||||
LLUI::translate(rb_rect.mLeft, rb_rect.mBottom);
|
||||
resize_barp->draw();
|
||||
}
|
||||
LLUI::popMatrix();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLLayoutStack::removeChild(LLView* view)
|
||||
|
|
@ -390,7 +423,6 @@ void LLLayoutStack::updateLayout()
|
|||
BOOST_FOREACH(LLLayoutPanel* panelp, mPanels)
|
||||
{
|
||||
F32 panel_dim = llmax(panelp->getExpandedMinDim(), panelp->mTargetDim);
|
||||
F32 panel_visible_dim = panelp->getVisibleDim();
|
||||
|
||||
LLRect panel_rect;
|
||||
if (mOrientation == HORIZONTAL)
|
||||
|
|
@ -407,27 +439,61 @@ void LLLayoutStack::updateLayout()
|
|||
getRect().getWidth(),
|
||||
llround(panel_dim));
|
||||
}
|
||||
panelp->setIgnoreReshape(true);
|
||||
panelp->setShape(panel_rect);
|
||||
panelp->setIgnoreReshape(false);
|
||||
|
||||
LLRect resize_bar_rect(panel_rect);
|
||||
|
||||
LLResizeBar * resize_barp = panelp->getResizeBar();
|
||||
bool show_drag_handle = resize_barp->isShowDragHandle();
|
||||
F32 panel_spacing = (F32)mPanelSpacing * panelp->getVisibleAmount();
|
||||
F32 panel_visible_dim = panelp->getVisibleDim();
|
||||
S32 panel_spacing_round = (S32)(llround(panel_spacing));
|
||||
|
||||
if (mOrientation == HORIZONTAL)
|
||||
{
|
||||
resize_bar_rect.mLeft = panel_rect.mRight - mResizeBarOverlap;
|
||||
resize_bar_rect.mRight = panel_rect.mRight + (S32)(llround(panel_spacing)) + mResizeBarOverlap;
|
||||
|
||||
cur_pos += panel_visible_dim + panel_spacing;
|
||||
|
||||
if (show_drag_handle && panel_spacing_round > mDragHandleThickness)
|
||||
{
|
||||
resize_bar_rect.mLeft = panel_rect.mRight + mDragHandleShift;
|
||||
resize_bar_rect.mRight = resize_bar_rect.mLeft + mDragHandleThickness;
|
||||
}
|
||||
else
|
||||
{
|
||||
resize_bar_rect.mLeft = panel_rect.mRight - mResizeBarOverlap;
|
||||
resize_bar_rect.mRight = panel_rect.mRight + panel_spacing_round + mResizeBarOverlap;
|
||||
}
|
||||
|
||||
if (show_drag_handle)
|
||||
{
|
||||
resize_bar_rect.mBottom += mDragHandleSecondIndent;
|
||||
resize_bar_rect.mTop -= mDragHandleFirstIndent;
|
||||
}
|
||||
|
||||
}
|
||||
else //VERTICAL
|
||||
{
|
||||
resize_bar_rect.mTop = panel_rect.mBottom + mResizeBarOverlap;
|
||||
resize_bar_rect.mBottom = panel_rect.mBottom - (S32)(llround(panel_spacing)) - mResizeBarOverlap;
|
||||
|
||||
cur_pos -= panel_visible_dim + panel_spacing;
|
||||
|
||||
if (show_drag_handle && panel_spacing_round > mDragHandleThickness)
|
||||
{
|
||||
resize_bar_rect.mTop = panel_rect.mBottom - mDragHandleShift;
|
||||
resize_bar_rect.mBottom = resize_bar_rect.mTop - mDragHandleThickness;
|
||||
}
|
||||
else
|
||||
{
|
||||
resize_bar_rect.mTop = panel_rect.mBottom + mResizeBarOverlap;
|
||||
resize_bar_rect.mBottom = panel_rect.mBottom - panel_spacing_round - mResizeBarOverlap;
|
||||
}
|
||||
|
||||
if (show_drag_handle)
|
||||
{
|
||||
resize_bar_rect.mLeft += mDragHandleFirstIndent;
|
||||
resize_bar_rect.mRight -= mDragHandleSecondIndent;
|
||||
}
|
||||
}
|
||||
|
||||
panelp->setIgnoreReshape(true);
|
||||
panelp->setShape(panel_rect);
|
||||
panelp->setIgnoreReshape(false);
|
||||
panelp->mResizeBar->setShape(resize_bar_rect);
|
||||
}
|
||||
|
||||
|
|
@ -475,15 +541,13 @@ void LLLayoutStack::createResizeBar(LLLayoutPanel* panelp)
|
|||
{
|
||||
if (lp->mResizeBar == NULL)
|
||||
{
|
||||
LLResizeBar::Side side = (mOrientation == HORIZONTAL) ? LLResizeBar::RIGHT : LLResizeBar::BOTTOM;
|
||||
LLRect resize_bar_rect = getRect();
|
||||
|
||||
LLResizeBar::Params resize_params;
|
||||
resize_params.name("resize");
|
||||
resize_params.resizing_view(lp);
|
||||
resize_params.min_size(lp->getRelevantMinDim());
|
||||
resize_params.side(side);
|
||||
resize_params.side((mOrientation == HORIZONTAL) ? LLResizeBar::RIGHT : LLResizeBar::BOTTOM);
|
||||
resize_params.snapping_enabled(false);
|
||||
resize_params.show_drag_handle(mShowDragHandle);
|
||||
LLResizeBar* resize_bar = LLUICtrlFactory::create<LLResizeBar>(resize_params);
|
||||
lp->mResizeBar = resize_bar;
|
||||
LLView::addChild(resize_bar, 0);
|
||||
|
|
@ -865,3 +929,4 @@ void LLLayoutStack::updateResizeBarLimits()
|
|||
previous_visible_panelp = visible_panelp;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -62,6 +62,11 @@ public:
|
|||
Optional<F32> open_time_constant,
|
||||
close_time_constant;
|
||||
Optional<S32> resize_bar_overlap;
|
||||
Optional<bool> show_drag_handle;
|
||||
Optional<S32> drag_handle_first_indent;
|
||||
Optional<S32> drag_handle_second_indent;
|
||||
Optional<S32> drag_handle_thickness;
|
||||
Optional<S32> drag_handle_shift;
|
||||
|
||||
Params();
|
||||
};
|
||||
|
|
@ -126,6 +131,11 @@ private:
|
|||
F32 mCloseTimeConstant;
|
||||
bool mNeedsLayout;
|
||||
S32 mResizeBarOverlap;
|
||||
bool mShowDragHandle;
|
||||
S32 mDragHandleFirstIndent;
|
||||
S32 mDragHandleSecondIndent;
|
||||
S32 mDragHandleThickness;
|
||||
S32 mDragHandleShift;
|
||||
}; // end class LLLayoutStack
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -28,14 +28,53 @@
|
|||
|
||||
#include "llresizebar.h"
|
||||
|
||||
#include "lllocalcliprect.h"
|
||||
#include "llmath.h"
|
||||
#include "llui.h"
|
||||
#include "llmenugl.h"
|
||||
#include "llfocusmgr.h"
|
||||
#include "llwindow.h"
|
||||
|
||||
class LLImagePanel : public LLPanel
|
||||
{
|
||||
public:
|
||||
struct Params : public LLInitParam::Block<Params, LLPanel::Params>
|
||||
{
|
||||
Optional<bool> horizontal;
|
||||
Params() : horizontal("horizontal", false) {}
|
||||
};
|
||||
LLImagePanel(const Params& p) : LLPanel(p), mHorizontal(p.horizontal) {}
|
||||
virtual ~LLImagePanel() {}
|
||||
|
||||
void draw()
|
||||
{
|
||||
const LLRect& parent_rect = getParent()->getRect();
|
||||
const LLRect& rect = getRect();
|
||||
LLRect clip_rect( -rect.mLeft, parent_rect.getHeight() - rect.mBottom - 2
|
||||
, parent_rect.getWidth() - rect.mLeft - (mHorizontal ? 2 : 0), -rect.mBottom);
|
||||
LLLocalClipRect clip(clip_rect);
|
||||
LLPanel::draw();
|
||||
}
|
||||
|
||||
private:
|
||||
bool mHorizontal;
|
||||
};
|
||||
|
||||
static LLDefaultChildRegistry::Register<LLImagePanel> t1("resize_bar_image_panel");
|
||||
|
||||
LLResizeBar::Params::Params()
|
||||
: max_size("max_size", S32_MAX),
|
||||
snapping_enabled("snapping_enabled", true),
|
||||
resizing_view("resizing_view"),
|
||||
side("side"),
|
||||
allow_double_click_snapping("allow_double_click_snapping", true),
|
||||
show_drag_handle("show_drag_handle", false)
|
||||
{
|
||||
name = "resize_bar";
|
||||
}
|
||||
|
||||
LLResizeBar::LLResizeBar(const LLResizeBar::Params& p)
|
||||
: LLView(p),
|
||||
: LLPanel(p),
|
||||
mDragLastScreenX( 0 ),
|
||||
mDragLastScreenY( 0 ),
|
||||
mLastMouseScreenX( 0 ),
|
||||
|
|
@ -46,7 +85,9 @@ LLResizeBar::LLResizeBar(const LLResizeBar::Params& p)
|
|||
mSnappingEnabled(p.snapping_enabled),
|
||||
mAllowDoubleClickSnapping(p.allow_double_click_snapping),
|
||||
mResizingView(p.resizing_view),
|
||||
mResizeListener(NULL)
|
||||
mResizeListener(NULL),
|
||||
mShowDragHandle(p.show_drag_handle),
|
||||
mImagePanel(NULL)
|
||||
{
|
||||
setFollowsNone();
|
||||
// set up some generically good follow code.
|
||||
|
|
@ -75,8 +116,37 @@ LLResizeBar::LLResizeBar(const LLResizeBar::Params& p)
|
|||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (mShowDragHandle)
|
||||
{
|
||||
LLViewBorder::Params border_params;
|
||||
border_params.border_thickness = 1;
|
||||
border_params.highlight_light_color = LLUIColorTable::instance().getColor("ResizebarBorderLight");
|
||||
border_params.shadow_dark_color = LLUIColorTable::instance().getColor("ResizebarBorderDark");
|
||||
|
||||
addBorder(border_params);
|
||||
setBorderVisible(TRUE);
|
||||
|
||||
LLImagePanel::Params image_panel;
|
||||
mDragHandleImage = LLUI::getUIImage(LLResizeBar::RIGHT == mSide ? "Vertical Drag Handle" : "Horizontal Drag Handle");
|
||||
image_panel.bg_alpha_image = mDragHandleImage;
|
||||
image_panel.background_visible = true;
|
||||
image_panel.horizontal = (LLResizeBar::BOTTOM == mSide);
|
||||
mImagePanel = LLUICtrlFactory::create<LLImagePanel>(image_panel);
|
||||
setImagePanel(mImagePanel);
|
||||
}
|
||||
}
|
||||
|
||||
BOOL LLResizeBar::postBuild()
|
||||
{
|
||||
if (mShowDragHandle)
|
||||
{
|
||||
setBackgroundVisible(TRUE);
|
||||
setTransparentColor(LLUIColorTable::instance().getColor("ResizebarBody"));
|
||||
}
|
||||
|
||||
return LLPanel::postBuild();
|
||||
}
|
||||
|
||||
BOOL LLResizeBar::handleMouseDown(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
|
|
@ -342,3 +412,39 @@ BOOL LLResizeBar::handleDoubleClick(S32 x, S32 y, MASK mask)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
void LLResizeBar::setImagePanel(LLPanel * panelp)
|
||||
{
|
||||
const LLView::child_list_t * children = getChildList();
|
||||
if (getChildCount() == 2)
|
||||
{
|
||||
LLPanel * image_panelp = dynamic_cast<LLPanel*>(children->back());
|
||||
if (image_panelp)
|
||||
{
|
||||
removeChild(image_panelp);
|
||||
delete image_panelp;
|
||||
}
|
||||
}
|
||||
|
||||
addChild(panelp);
|
||||
sendChildToBack(panelp);
|
||||
}
|
||||
|
||||
LLPanel * LLResizeBar::getImagePanel() const
|
||||
{
|
||||
return getChildCount() > 0 ? (LLPanel *)getChildList()->back() : NULL;
|
||||
}
|
||||
|
||||
void LLResizeBar::draw()
|
||||
{
|
||||
if (mShowDragHandle)
|
||||
{
|
||||
S32 image_width = mDragHandleImage->getTextureWidth();
|
||||
S32 image_height = mDragHandleImage->getTextureHeight();
|
||||
const LLRect& panel_rect = getRect();
|
||||
S32 image_left = (panel_rect.getWidth() - image_width) / 2 - 1;
|
||||
S32 image_bottom = (panel_rect.getHeight() - image_height) / 2;
|
||||
mImagePanel->setRect(LLRect(image_left, image_bottom + image_height, image_left + image_width, image_bottom));
|
||||
}
|
||||
|
||||
LLPanel::draw();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,15 +27,14 @@
|
|||
#ifndef LL_RESIZEBAR_H
|
||||
#define LL_RESIZEBAR_H
|
||||
|
||||
#include "llview.h"
|
||||
#include "llcoord.h"
|
||||
#include "llpanel.h"
|
||||
|
||||
class LLResizeBar : public LLView
|
||||
class LLResizeBar : public LLPanel
|
||||
{
|
||||
public:
|
||||
enum Side { LEFT, TOP, RIGHT, BOTTOM };
|
||||
|
||||
struct Params : public LLInitParam::Block<Params, LLView::Params>
|
||||
struct Params : public LLInitParam::Block<Params, LLPanel::Params>
|
||||
{
|
||||
Mandatory<LLView*> resizing_view;
|
||||
Mandatory<Side> side;
|
||||
|
|
@ -44,24 +43,19 @@ public:
|
|||
Optional<S32> max_size;
|
||||
Optional<bool> snapping_enabled;
|
||||
Optional<bool> allow_double_click_snapping;
|
||||
Optional<bool> show_drag_handle;
|
||||
|
||||
Params()
|
||||
: max_size("max_size", S32_MAX),
|
||||
snapping_enabled("snapping_enabled", true),
|
||||
resizing_view("resizing_view"),
|
||||
side("side"),
|
||||
allow_double_click_snapping("allow_double_click_snapping", true)
|
||||
{
|
||||
name = "resize_bar";
|
||||
}
|
||||
Params();
|
||||
};
|
||||
|
||||
protected:
|
||||
LLResizeBar(const LLResizeBar::Params& p);
|
||||
friend class LLUICtrlFactory;
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
public:
|
||||
|
||||
// virtual void draw(); No appearance
|
||||
virtual void draw();
|
||||
virtual BOOL handleHover(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
|
||||
|
|
@ -72,20 +66,26 @@ public:
|
|||
void setAllowDoubleClickSnapping(BOOL allow) { mAllowDoubleClickSnapping = allow; }
|
||||
bool canResize() { return getEnabled() && mMaxSize > mMinSize; }
|
||||
void setResizeListener(boost::function<void(void*)> listener) {mResizeListener = listener;}
|
||||
BOOL isShowDragHandle() const { return mShowDragHandle; }
|
||||
void setImagePanel(LLPanel * panelp);
|
||||
LLPanel * getImagePanel() const;
|
||||
|
||||
private:
|
||||
S32 mDragLastScreenX;
|
||||
S32 mDragLastScreenY;
|
||||
S32 mLastMouseScreenX;
|
||||
S32 mLastMouseScreenY;
|
||||
LLCoordGL mLastMouseDir;
|
||||
S32 mMinSize;
|
||||
S32 mMaxSize;
|
||||
const Side mSide;
|
||||
BOOL mSnappingEnabled;
|
||||
BOOL mAllowDoubleClickSnapping;
|
||||
LLView* mResizingView;
|
||||
boost::function<void(void*)> mResizeListener;
|
||||
S32 mDragLastScreenX;
|
||||
S32 mDragLastScreenY;
|
||||
S32 mLastMouseScreenX;
|
||||
S32 mLastMouseScreenY;
|
||||
LLCoordGL mLastMouseDir;
|
||||
S32 mMinSize;
|
||||
S32 mMaxSize;
|
||||
const Side mSide;
|
||||
BOOL mSnappingEnabled;
|
||||
BOOL mAllowDoubleClickSnapping;
|
||||
BOOL mShowDragHandle;
|
||||
LLView* mResizingView;
|
||||
boost::function<void(void*)> mResizeListener;
|
||||
LLPointer<LLUIImage> mDragHandleImage;
|
||||
LLPanel * mImagePanel;
|
||||
};
|
||||
|
||||
#endif // LL_RESIZEBAR_H
|
||||
|
|
|
|||
|
|
@ -652,6 +652,10 @@ void LLTextBase::drawText()
|
|||
mSpellCheckEnd = end;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mMisspellRanges.clear();
|
||||
}
|
||||
|
||||
LLTextSegmentPtr cur_segment = *seg_iter;
|
||||
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@
|
|||
#include "llenvmanager.h"
|
||||
#include "llfirstuse.h"
|
||||
#include "llfloatercamera.h"
|
||||
#include "llfloaterimcontainer.h"
|
||||
#include "llfloaterreg.h"
|
||||
#include "llfloatertools.h"
|
||||
#include "llgroupactions.h"
|
||||
|
|
@ -90,6 +91,7 @@
|
|||
#include "llworld.h"
|
||||
#include "llworldmap.h"
|
||||
#include "stringize.h"
|
||||
#include "boost/foreach.hpp"
|
||||
|
||||
using namespace LLVOAvatarDefines;
|
||||
|
||||
|
|
@ -2002,7 +2004,16 @@ void LLAgent::endAnimationUpdateUI()
|
|||
{
|
||||
skip_list.insert(LLFloaterReg::findInstance("mini_map"));
|
||||
}
|
||||
|
||||
|
||||
LLFloaterIMContainer* im_box = LLFloaterReg::getTypedInstance<LLFloaterIMContainer>("im_container");
|
||||
LLFloaterIMContainer::floater_list_t conversations;
|
||||
im_box->getDetachedConversationFloaters(conversations);
|
||||
BOOST_FOREACH(LLFloater* conversation, conversations)
|
||||
{
|
||||
llinfos << "skip_list.insert(session_floater): " << conversation->getTitle() << llendl;
|
||||
skip_list.insert(conversation);
|
||||
}
|
||||
|
||||
gFloaterView->popVisibleAll(skip_list);
|
||||
#endif
|
||||
mViewsPushed = FALSE;
|
||||
|
|
|
|||
|
|
@ -340,16 +340,20 @@ void LLConversationViewSession::setVisibleIfDetached(BOOL visible)
|
|||
{
|
||||
// Do this only if the conversation floater has been torn off (i.e. no multi floater host) and is not minimized
|
||||
// Note: minimized dockable floaters are brought to front hence unminimized when made visible and we don't want that here
|
||||
LLFolderViewModelItem* item = mViewModelItem;
|
||||
LLUUID session_uuid = dynamic_cast<LLConversationItem*>(item)->getUUID();
|
||||
LLFloater* session_floater = LLFloaterIMSessionTab::getConversation(session_uuid);
|
||||
|
||||
if (session_floater && !session_floater->getHost() && !session_floater->isMinimized())
|
||||
LLFloater* session_floater = getSessionFloater();
|
||||
if (session_floater && session_floater->isDetachedAndNotMinimized())
|
||||
{
|
||||
session_floater->setVisible(visible);
|
||||
}
|
||||
}
|
||||
|
||||
LLFloater* LLConversationViewSession::getSessionFloater()
|
||||
{
|
||||
LLFolderViewModelItem* item = mViewModelItem;
|
||||
LLUUID session_uuid = dynamic_cast<LLConversationItem*>(item)->getUUID();
|
||||
return LLFloaterIMSessionTab::getConversation(session_uuid);
|
||||
}
|
||||
|
||||
LLConversationViewParticipant* LLConversationViewSession::findParticipant(const LLUUID& participant_id)
|
||||
{
|
||||
// This is *not* a general tree parsing algorithm. We search only in the mItems list
|
||||
|
|
|
|||
|
|
@ -87,6 +87,8 @@ public:
|
|||
|
||||
/*virtual*/ void setFlashState(bool flash_state);
|
||||
|
||||
LLFloater* getSessionFloater();
|
||||
|
||||
private:
|
||||
|
||||
void onCurrentVoiceSessionChanged(const LLUUID& session_id);
|
||||
|
|
|
|||
|
|
@ -215,7 +215,8 @@ void LLDoNotDisturbNotificationStorage::loadNotifications()
|
|||
LLFloaterReg::showInstance("im_container");
|
||||
}
|
||||
|
||||
if(group_ad_hoc_toast_exists)
|
||||
bool isConversationLoggingAllowed = gSavedPerAccountSettings.getS32("KeepConversationLogTranscripts") > 0;
|
||||
if(group_ad_hoc_toast_exists && isConversationLoggingAllowed)
|
||||
{
|
||||
LLFloaterReg::showInstance("conversation");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@
|
|||
#include "llworld.h"
|
||||
#include "llsdserialize.h"
|
||||
#include "llviewerobjectlist.h"
|
||||
#include "boost/foreach.hpp"
|
||||
|
||||
//
|
||||
// LLFloaterIMContainer
|
||||
|
|
@ -660,6 +661,23 @@ void LLFloaterIMContainer::setVisible(BOOL visible)
|
|||
LLMultiFloater::setVisible(visible);
|
||||
}
|
||||
|
||||
void LLFloaterIMContainer::getDetachedConversationFloaters(floater_list_t& floaters)
|
||||
{
|
||||
typedef conversations_widgets_map::value_type conv_pair;
|
||||
BOOST_FOREACH(conv_pair item, mConversationsWidgets)
|
||||
{
|
||||
LLConversationViewSession* widget = dynamic_cast<LLConversationViewSession*>(item.second);
|
||||
if (widget)
|
||||
{
|
||||
LLFloater* session_floater = widget->getSessionFloater();
|
||||
if (session_floater && session_floater->isDetachedAndNotMinimized())
|
||||
{
|
||||
floaters.push_back(session_floater);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterIMContainer::setVisibleAndFrontmost(BOOL take_focus, const LLSD& key)
|
||||
{
|
||||
LLMultiFloater::setVisibleAndFrontmost(take_focus, key);
|
||||
|
|
@ -799,15 +817,12 @@ void LLFloaterIMContainer::assignResizeLimits()
|
|||
bool is_conv_pane_expanded = !mConversationsPane->isCollapsed();
|
||||
bool is_msg_pane_expanded = !mMessagesPane->isCollapsed();
|
||||
|
||||
// With two panels visible number of borders is three, because the borders
|
||||
// between the panels are merged into one
|
||||
S32 number_of_visible_borders = llmin((is_conv_pane_expanded? 2 : 0) + (is_msg_pane_expanded? 2 : 0), 3);
|
||||
S32 summary_width_of_visible_borders = number_of_visible_borders * LLPANEL_BORDER_WIDTH;
|
||||
S32 conv_pane_target_width = is_conv_pane_expanded?
|
||||
(is_msg_pane_expanded?
|
||||
mConversationsPane->getRect().getWidth()
|
||||
: mConversationsPane->getExpandedMinDim())
|
||||
: mConversationsPane->getMinDim();
|
||||
S32 summary_width_of_visible_borders = (is_msg_pane_expanded ? mConversationsStack->getPanelSpacing() : 0) + 1;
|
||||
|
||||
S32 conv_pane_target_width = is_conv_pane_expanded
|
||||
? ( is_msg_pane_expanded?mConversationsPane->getRect().getWidth():mConversationsPane->getExpandedMinDim() )
|
||||
: mConversationsPane->getMinDim();
|
||||
|
||||
S32 msg_pane_min_width = is_msg_pane_expanded ? mMessagesPane->getExpandedMinDim() : 0;
|
||||
S32 new_min_width = conv_pane_target_width + msg_pane_min_width + summary_width_of_visible_borders;
|
||||
|
||||
|
|
@ -1947,23 +1962,28 @@ bool LLFloaterIMContainer::isScrolledOutOfSight(LLConversationViewSession* conve
|
|||
|
||||
BOOL LLFloaterIMContainer::handleKeyHere(KEY key, MASK mask )
|
||||
{
|
||||
BOOL handled = FALSE;
|
||||
|
||||
if(mask == MASK_ALT)
|
||||
{
|
||||
if (KEY_RETURN == key )
|
||||
{
|
||||
expandConversation();
|
||||
handled = TRUE;
|
||||
}
|
||||
|
||||
if ((KEY_DOWN == key ) || (KEY_RIGHT == key))
|
||||
{
|
||||
selectNextorPreviousConversation(true);
|
||||
handled = TRUE;
|
||||
}
|
||||
if ((KEY_UP == key) || (KEY_LEFT == key))
|
||||
{
|
||||
selectNextorPreviousConversation(false);
|
||||
handled = TRUE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
return handled;
|
||||
}
|
||||
|
||||
bool LLFloaterIMContainer::selectAdjacentConversation(bool focus_selected)
|
||||
|
|
|
|||
|
|
@ -195,6 +195,8 @@ public:
|
|||
bool isScrolledOutOfSight(LLConversationViewSession* conversation_item_widget);
|
||||
boost::signals2::connection mMicroChangedSignal;
|
||||
S32 getConversationListItemSize() { return mConversationsWidgets.size(); }
|
||||
typedef std::list<LLFloater*> floater_list_t;
|
||||
void getDetachedConversationFloaters(floater_list_t& floaters);
|
||||
|
||||
private:
|
||||
LLConversationViewSession* createConversationItemWidget(LLConversationItem* item);
|
||||
|
|
|
|||
|
|
@ -568,7 +568,10 @@ void LLFloaterIMNearbyChat::sendChat( EChatType type )
|
|||
if (0 == channel)
|
||||
{
|
||||
// discard returned "found" boolean
|
||||
LLGestureMgr::instance().triggerAndReviseString(utf8text, &utf8_revised_text);
|
||||
if(!LLGestureMgr::instance().triggerAndReviseString(utf8text, &utf8_revised_text))
|
||||
{
|
||||
utf8_revised_text = utf8text;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -582,7 +585,6 @@ void LLFloaterIMNearbyChat::sendChat( EChatType type )
|
|||
if (!utf8_revised_text.empty())
|
||||
{
|
||||
// Chat with animation
|
||||
utf8_revised_text = utf8text;
|
||||
sendChatFromViewer(utf8_revised_text, type, TRUE);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -469,7 +469,10 @@ void LLFloaterIMSession::addP2PSessionParticipants(const LLSD& notification, con
|
|||
temp_ids.insert(temp_ids.end(), uuids.begin(), uuids.end());
|
||||
|
||||
// then we can close the current session
|
||||
onClose(false);
|
||||
if(findInstance(mSessionID))
|
||||
{
|
||||
onClose(false);
|
||||
}
|
||||
|
||||
// we start a new session so reset the initialization flag
|
||||
mSessionInitialized = false;
|
||||
|
|
|
|||
|
|
@ -212,7 +212,7 @@ void LLFloaterIMSessionTab::assignResizeLimits()
|
|||
mRightPartPanel->setIgnoreReshape(is_participants_pane_collapsed);
|
||||
|
||||
S32 participants_pane_target_width = is_participants_pane_collapsed?
|
||||
0 : (mParticipantListPanel->getRect().getWidth() + LLPANEL_BORDER_WIDTH);
|
||||
0 : (mParticipantListPanel->getRect().getWidth() + mParticipantListAndHistoryStack->getPanelSpacing());
|
||||
|
||||
S32 new_min_width = participants_pane_target_width + mRightPartPanel->getExpandedMinDim() + mFloaterExtraWidth;
|
||||
|
||||
|
|
@ -1083,21 +1083,26 @@ void LLFloaterIMSessionTab::saveCollapsedState()
|
|||
}
|
||||
BOOL LLFloaterIMSessionTab::handleKeyHere(KEY key, MASK mask )
|
||||
{
|
||||
BOOL handled = FALSE;
|
||||
|
||||
if(mask == MASK_ALT)
|
||||
{
|
||||
LLFloaterIMContainer* floater_container = LLFloaterIMContainer::getInstance();
|
||||
if (KEY_RETURN == key && !isTornOff())
|
||||
{
|
||||
floater_container->expandConversation();
|
||||
handled = TRUE;
|
||||
}
|
||||
if ((KEY_UP == key) || (KEY_LEFT == key))
|
||||
{
|
||||
floater_container->selectNextorPreviousConversation(false);
|
||||
handled = TRUE;
|
||||
}
|
||||
if ((KEY_DOWN == key ) || (KEY_RIGHT == key))
|
||||
{
|
||||
floater_container->selectNextorPreviousConversation(true);
|
||||
handled = TRUE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
return handled;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1798,6 +1798,7 @@ void LLViewerWindow::initBase()
|
|||
|
||||
// Constrain floaters to inside the menu and status bar regions.
|
||||
gFloaterView = main_view->getChild<LLFloaterView>("Floater View");
|
||||
gFloaterView->setFloaterSnapView(main_view->getChild<LLView>("floater_snap_region")->getHandle());
|
||||
gSnapshotFloaterView = main_view->getChild<LLSnapshotFloaterView>("Snapshot Floater View");
|
||||
|
||||
// Console
|
||||
|
|
|
|||
|
|
@ -864,4 +864,19 @@
|
|||
<color
|
||||
name="blue"
|
||||
value="0 0 1 1"/>
|
||||
|
||||
<!--Resize bar colors -->
|
||||
|
||||
<color
|
||||
name="ResizebarBorderLight"
|
||||
value="0.231 0.231 0.231 1"/>
|
||||
|
||||
<color
|
||||
name="ResizebarBorderDark"
|
||||
value="0.133 0.133 0.133 1"/>
|
||||
|
||||
<color
|
||||
name="ResizebarBody"
|
||||
value="0.208 0.208 0.208 1"/>
|
||||
|
||||
</colors>
|
||||
|
|
|
|||
|
|
@ -776,4 +776,7 @@ with the same filename but different name
|
|||
<texture name="Popup_Caution" file_name="icons/pop_up_caution.png"/>
|
||||
<texture name="Camera_Drag_Dot" file_name="world/CameraDragDot.png"/>
|
||||
<texture name="NavBar Separator" file_name="navbar/separator.png"/>
|
||||
|
||||
<texture name="Horizontal Drag Handle" file_name="widgets/horizontal_drag_handle.png"/>
|
||||
<texture name="Vertical Drag Handle" file_name="widgets/vertical_drag_handle.png"/>
|
||||
</textures>
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 197 B |
Binary file not shown.
|
After Width: | Height: | Size: 196 B |
|
|
@ -25,23 +25,27 @@
|
|||
<layout_stack
|
||||
animate="true"
|
||||
bottom="-1"
|
||||
drag_handle_gap="6"
|
||||
drag_handle_first_indent="27"
|
||||
drag_handle_second_indent="10"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="conversations_stack"
|
||||
orientation="horizontal"
|
||||
right="-1"
|
||||
show_drag_handle="true"
|
||||
top="0">
|
||||
<layout_panel
|
||||
auto_resize="false"
|
||||
user_resize="true"
|
||||
name="conversations_layout_panel"
|
||||
min_dim="38"
|
||||
expanded_min_dim="156">
|
||||
expanded_min_dim="136">
|
||||
<layout_stack
|
||||
animate="false"
|
||||
follows="left|top|right"
|
||||
height="35"
|
||||
height="27"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="conversations_pane_buttons_stack"
|
||||
|
|
@ -50,7 +54,6 @@
|
|||
top="0">
|
||||
<layout_panel
|
||||
auto_resize="true"
|
||||
height="35"
|
||||
name="conversations_pane_buttons_expanded">
|
||||
<menu_button
|
||||
follows="top|left"
|
||||
|
|
@ -64,7 +67,7 @@
|
|||
left="5"
|
||||
name="sort_btn"
|
||||
tool_tip="View/sort options"
|
||||
top="5"
|
||||
top="1"
|
||||
width="31" />
|
||||
<button
|
||||
follows="top|left"
|
||||
|
|
@ -74,7 +77,7 @@
|
|||
image_selected="Toolbar_Middle_Selected"
|
||||
image_unselected="Toolbar_Middle_Off"
|
||||
layout="topleft"
|
||||
top="5"
|
||||
top="1"
|
||||
left_pad="2"
|
||||
name="add_btn"
|
||||
tool_tip="Start a new conversation"
|
||||
|
|
@ -87,7 +90,7 @@
|
|||
image_selected="Toolbar_Middle_Selected"
|
||||
image_unselected="Toolbar_Middle_Off"
|
||||
layout="topleft"
|
||||
top="5"
|
||||
top="1"
|
||||
left_pad="2"
|
||||
name="speak_btn"
|
||||
tool_tip="Speak with people using your microphone"
|
||||
|
|
@ -95,9 +98,8 @@
|
|||
</layout_panel>
|
||||
<layout_panel
|
||||
auto_resize="false"
|
||||
height="35"
|
||||
name="conversations_pane_buttons_collapsed"
|
||||
width="41">
|
||||
width="31">
|
||||
<button
|
||||
follows="right|top"
|
||||
height="25"
|
||||
|
|
@ -106,8 +108,8 @@
|
|||
image_selected="Toolbar_Middle_Selected"
|
||||
image_unselected="Toolbar_Middle_Off"
|
||||
layout="topleft"
|
||||
top="5"
|
||||
left="1"
|
||||
top="1"
|
||||
left="0"
|
||||
name="expand_collapse_btn"
|
||||
tool_tip="Collapse/Expand this list"
|
||||
width="31" />
|
||||
|
|
@ -119,7 +121,7 @@
|
|||
layout="topleft"
|
||||
name="conversations_list_panel"
|
||||
opaque="true"
|
||||
top="35"
|
||||
top_pad="0"
|
||||
left="5"
|
||||
right="-1"/>
|
||||
</layout_panel>
|
||||
|
|
@ -127,7 +129,7 @@
|
|||
auto_resize="true"
|
||||
user_resize="true"
|
||||
name="messages_layout_panel"
|
||||
expanded_min_dim="222">
|
||||
expanded_min_dim="232">
|
||||
<panel_container
|
||||
bottom="-1"
|
||||
follows="all"
|
||||
|
|
@ -136,44 +138,44 @@
|
|||
name="im_box_tab_container"
|
||||
right="-1"
|
||||
top="0">
|
||||
<panel
|
||||
bottom="-1"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
name="stub_panel"
|
||||
opaque="true"
|
||||
top_pad="0"
|
||||
left="0"
|
||||
right="-1">
|
||||
<button
|
||||
follows="right|top"
|
||||
height="25"
|
||||
image_hover_unselected="Toolbar_Middle_Over"
|
||||
image_overlay="Conv_toolbar_collapse"
|
||||
image_selected="Toolbar_Middle_Selected"
|
||||
image_unselected="Toolbar_Middle_Off"
|
||||
<panel
|
||||
bottom="-1"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
top="5"
|
||||
right="-10"
|
||||
name="stub_collapse_btn"
|
||||
tool_tip="Collapse this pane"
|
||||
width="31" />
|
||||
<text
|
||||
type="string"
|
||||
clip_partial="false"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
left="15"
|
||||
right="-15"
|
||||
name="stub_textbox"
|
||||
top="25"
|
||||
height="40"
|
||||
valign="center"
|
||||
parse_urls="true"
|
||||
wrap="true">
|
||||
This conversation is in a separate window. [secondlife:/// Bring it back.]
|
||||
</text>
|
||||
</panel>
|
||||
name="stub_panel"
|
||||
opaque="true"
|
||||
top_pad="0"
|
||||
left="0"
|
||||
right="-1">
|
||||
<button
|
||||
follows="right|top"
|
||||
height="25"
|
||||
image_hover_unselected="Toolbar_Middle_Over"
|
||||
image_overlay="Conv_toolbar_collapse"
|
||||
image_selected="Toolbar_Middle_Selected"
|
||||
image_unselected="Toolbar_Middle_Off"
|
||||
layout="topleft"
|
||||
top="1"
|
||||
right="-10"
|
||||
name="stub_collapse_btn"
|
||||
tool_tip="Collapse this pane"
|
||||
width="31" />
|
||||
<text
|
||||
type="string"
|
||||
clip_partial="false"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
left="15"
|
||||
right="-15"
|
||||
name="stub_textbox"
|
||||
top="25"
|
||||
height="40"
|
||||
valign="center"
|
||||
parse_urls="true"
|
||||
wrap="true">
|
||||
This conversation is in a separate window. [secondlife:/// Bring it back.]
|
||||
</text>
|
||||
</panel>
|
||||
</panel_container>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
|
|
|
|||
|
|
@ -70,27 +70,23 @@
|
|||
top="0"
|
||||
left="0"
|
||||
right="-1"
|
||||
bottom="-3">
|
||||
bottom="-1">
|
||||
<layout_stack
|
||||
animate="false"
|
||||
bottom="-1"
|
||||
default_tab_group="2"
|
||||
follows="all"
|
||||
right="-5"
|
||||
bottom="-1"
|
||||
top="0"
|
||||
left="3"
|
||||
border_size="0"
|
||||
layout="topleft"
|
||||
orientation="vertical"
|
||||
name="main_stack"
|
||||
tab_group="1">
|
||||
right="-3"
|
||||
orientation="vertical"
|
||||
tab_group="1"
|
||||
top="0">
|
||||
<layout_panel
|
||||
auto_resize="false"
|
||||
user_resize="false"
|
||||
name="toolbar_panel"
|
||||
height="35"
|
||||
right="-1"
|
||||
left="1">
|
||||
height="25">
|
||||
<menu_button
|
||||
menu_filename="menu_im_session_showmodes.xml"
|
||||
follows="top|left"
|
||||
|
|
@ -103,7 +99,7 @@
|
|||
left="5"
|
||||
name="view_options_btn"
|
||||
tool_tip="View/sort options"
|
||||
top="5"
|
||||
top="1"
|
||||
width="31" />
|
||||
<menu_button
|
||||
menu_filename="menu_im_conversation.xml"
|
||||
|
|
@ -114,7 +110,7 @@
|
|||
image_selected="Toolbar_Middle_Selected"
|
||||
image_unselected="Toolbar_Middle_Off"
|
||||
layout="topleft"
|
||||
top="5"
|
||||
top="1"
|
||||
left_pad="2"
|
||||
name="gear_btn"
|
||||
visible="false"
|
||||
|
|
@ -129,7 +125,7 @@
|
|||
image_selected="Toolbar_Middle_Selected"
|
||||
image_unselected="Toolbar_Middle_Off"
|
||||
layout="topleft"
|
||||
top="5"
|
||||
top="1"
|
||||
left_pad="2"
|
||||
name="add_btn"
|
||||
tool_tip="Add someone to this conversation"
|
||||
|
|
@ -142,7 +138,7 @@
|
|||
image_selected="Toolbar_Middle_Selected"
|
||||
image_unselected="Toolbar_Middle_Off"
|
||||
layout="topleft"
|
||||
top="5"
|
||||
top="1"
|
||||
left_pad="2"
|
||||
name="voice_call_btn"
|
||||
tool_tip="Open voice connection"
|
||||
|
|
@ -167,8 +163,8 @@
|
|||
image_selected="Toolbar_Middle_Selected"
|
||||
image_unselected="Toolbar_Middle_Off"
|
||||
layout="topleft"
|
||||
top="5"
|
||||
right="-67"
|
||||
top="1"
|
||||
right="-70"
|
||||
name="close_btn"
|
||||
tool_tip="End this conversation"
|
||||
width="31" />
|
||||
|
|
@ -180,7 +176,7 @@
|
|||
image_selected="Toolbar_Middle_Selected"
|
||||
image_unselected="Toolbar_Middle_Off"
|
||||
layout="topleft"
|
||||
top="5"
|
||||
top="1"
|
||||
left_pad="2"
|
||||
name="expand_collapse_btn"
|
||||
tool_tip="Collapse/Expand this pane"
|
||||
|
|
@ -195,20 +191,21 @@
|
|||
layout="topleft"
|
||||
left_pad="2"
|
||||
name="tear_off_btn"
|
||||
top="5"
|
||||
top="1"
|
||||
width="31" />
|
||||
</layout_panel>
|
||||
<layout_panel
|
||||
name="body_panel"
|
||||
top="1"
|
||||
bottom="-1"
|
||||
auto_resize="true"
|
||||
user_resize="false">
|
||||
height="235">
|
||||
<layout_stack
|
||||
default_tab_group="2"
|
||||
drag_handle_gap="6"
|
||||
drag_handle_first_indent="0"
|
||||
drag_handle_second_indent="1"
|
||||
follows="all"
|
||||
orientation="horizontal"
|
||||
name="im_panels"
|
||||
show_drag_handle="true"
|
||||
tab_group="1"
|
||||
top="0"
|
||||
right="-1"
|
||||
|
|
@ -220,14 +217,12 @@
|
|||
min_dim="0"
|
||||
width="150"
|
||||
user_resize="true"
|
||||
auto_resize="false"
|
||||
bottom="-1" />
|
||||
auto_resize="false" />
|
||||
<layout_panel
|
||||
default_tab_group="3"
|
||||
tab_group="2"
|
||||
name="right_part_holder"
|
||||
min_width="221"
|
||||
bottom="-1">
|
||||
min_width="221">
|
||||
<layout_stack
|
||||
animate="true"
|
||||
default_tab_group="2"
|
||||
|
|
@ -236,7 +231,7 @@
|
|||
name="translate_and_chat_stack"
|
||||
tab_group="1"
|
||||
top="0"
|
||||
left="0"
|
||||
left="1"
|
||||
right="-1"
|
||||
bottom="-1">
|
||||
<layout_panel
|
||||
|
|
@ -262,7 +257,7 @@
|
|||
parse_highlights="true"
|
||||
parse_urls="true"
|
||||
right="-1"
|
||||
left="5"
|
||||
left="0"
|
||||
top="0"
|
||||
bottom="-1" />
|
||||
</layout_panel>
|
||||
|
|
@ -271,12 +266,8 @@
|
|||
</layout_stack>
|
||||
</layout_panel>
|
||||
<layout_panel
|
||||
top_delta="0"
|
||||
top="0"
|
||||
height="30"
|
||||
bottom="-1"
|
||||
height="35"
|
||||
auto_resize="false"
|
||||
user_resize="false"
|
||||
name="chat_layout_panel">
|
||||
<layout_stack
|
||||
animate="false"
|
||||
|
|
@ -285,15 +276,11 @@
|
|||
orientation="horizontal"
|
||||
name="input_panels"
|
||||
top="0"
|
||||
bottom="-2"
|
||||
bottom="-1"
|
||||
left="0"
|
||||
right="-1">
|
||||
<layout_panel
|
||||
name="input_editor_layout_panel"
|
||||
auto_resize="true"
|
||||
user_resize="false"
|
||||
top="0"
|
||||
bottom="-1">
|
||||
name="input_editor_layout_panel">
|
||||
<chat_editor
|
||||
layout="topleft"
|
||||
expand_lines_count="5"
|
||||
|
|
@ -306,32 +293,27 @@
|
|||
max_length="1023"
|
||||
spellcheck="true"
|
||||
tab_group="3"
|
||||
top="1"
|
||||
bottom="-2"
|
||||
left="4"
|
||||
right="-4"
|
||||
bottom="-8"
|
||||
left="5"
|
||||
right="-5"
|
||||
wrap="true" />
|
||||
</layout_panel>
|
||||
<layout_panel
|
||||
auto_resize="false"
|
||||
user_resize="false"
|
||||
name="input_button_layout_panel"
|
||||
width="30"
|
||||
top="0"
|
||||
bottom="-1">
|
||||
width="32">
|
||||
<button
|
||||
layout="topleft"
|
||||
left="1"
|
||||
right="-1"
|
||||
top="1"
|
||||
height="22"
|
||||
top="4"
|
||||
height="25"
|
||||
follows="left|right|top"
|
||||
image_hover_unselected="Toolbar_Middle_Over"
|
||||
image_overlay="Conv_expand_one_line"
|
||||
image_selected="Toolbar_Middle_Selected"
|
||||
image_unselected="Toolbar_Middle_Off"
|
||||
name="minz_btn"
|
||||
tool_tip="Shows/hides message panel" />
|
||||
tool_tip="Shows/hides message panel"
|
||||
width="28" />
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
|
|
|
|||
Loading…
Reference in New Issue