SL-1945 Day Cycle Editor Copy Track
parent
64ce16aa07
commit
ac865de287
|
|
@ -37,6 +37,7 @@
|
|||
#include "lluictrlfactory.h"
|
||||
#include "llbutton.h"
|
||||
#include "llcheckboxctrl.h"
|
||||
#include "llcriticaldamp.h" // LLSmoothInterpolation
|
||||
#include "lldir.h"
|
||||
#include "lldraghandle.h"
|
||||
#include "llfloaterreg.h"
|
||||
|
|
@ -64,6 +65,10 @@
|
|||
// use this to control "jumping" behavior when Ctrl-Tabbing
|
||||
const S32 TABBED_FLOATER_OFFSET = 0;
|
||||
|
||||
const F32 LLFloater::CONTEXT_CONE_IN_ALPHA = 0.0f;
|
||||
const F32 LLFloater::CONTEXT_CONE_OUT_ALPHA = 1.f;
|
||||
const F32 LLFloater::CONTEXT_CONE_FADE_TIME = 0.08f;
|
||||
|
||||
namespace LLInitParam
|
||||
{
|
||||
void TypeValues<LLFloaterEnums::EOpenPositioning>::declareValues()
|
||||
|
|
@ -2116,6 +2121,70 @@ void LLFloater::updateTitleButtons()
|
|||
}
|
||||
}
|
||||
|
||||
void LLFloater::drawConeToOwner(F32 &context_cone_opacity,
|
||||
F32 max_cone_opacity,
|
||||
LLView *owner_view,
|
||||
F32 fade_time,
|
||||
F32 contex_cone_in_alpha,
|
||||
F32 contex_cone_out_alpha)
|
||||
{
|
||||
if (owner_view
|
||||
&& owner_view->isInVisibleChain()
|
||||
&& hasFocus()
|
||||
&& context_cone_opacity > 0.001f
|
||||
&& gFocusMgr.childHasKeyboardFocus(this))
|
||||
{
|
||||
// draw cone of context pointing back to owner (e.x. texture swatch)
|
||||
LLRect owner_rect;
|
||||
owner_view->localRectToOtherView(owner_view->getLocalRect(), &owner_rect, this);
|
||||
LLRect local_rect = getLocalRect();
|
||||
|
||||
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
LLGLEnable(GL_CULL_FACE);
|
||||
gGL.begin(LLRender::QUADS);
|
||||
{
|
||||
gGL.color4f(0.f, 0.f, 0.f, contex_cone_in_alpha * context_cone_opacity);
|
||||
gGL.vertex2i(owner_rect.mLeft, owner_rect.mTop);
|
||||
gGL.vertex2i(owner_rect.mRight, owner_rect.mTop);
|
||||
gGL.color4f(0.f, 0.f, 0.f, contex_cone_out_alpha * context_cone_opacity);
|
||||
gGL.vertex2i(local_rect.mRight, local_rect.mTop);
|
||||
gGL.vertex2i(local_rect.mLeft, local_rect.mTop);
|
||||
|
||||
gGL.color4f(0.f, 0.f, 0.f, contex_cone_out_alpha * context_cone_opacity);
|
||||
gGL.vertex2i(local_rect.mLeft, local_rect.mTop);
|
||||
gGL.vertex2i(local_rect.mLeft, local_rect.mBottom);
|
||||
gGL.color4f(0.f, 0.f, 0.f, contex_cone_in_alpha * context_cone_opacity);
|
||||
gGL.vertex2i(owner_rect.mLeft, owner_rect.mBottom);
|
||||
gGL.vertex2i(owner_rect.mLeft, owner_rect.mTop);
|
||||
|
||||
gGL.color4f(0.f, 0.f, 0.f, contex_cone_out_alpha * context_cone_opacity);
|
||||
gGL.vertex2i(local_rect.mRight, local_rect.mBottom);
|
||||
gGL.vertex2i(local_rect.mRight, local_rect.mTop);
|
||||
gGL.color4f(0.f, 0.f, 0.f, contex_cone_in_alpha * context_cone_opacity);
|
||||
gGL.vertex2i(owner_rect.mRight, owner_rect.mTop);
|
||||
gGL.vertex2i(owner_rect.mRight, owner_rect.mBottom);
|
||||
|
||||
|
||||
gGL.color4f(0.f, 0.f, 0.f, contex_cone_out_alpha * context_cone_opacity);
|
||||
gGL.vertex2i(local_rect.mLeft, local_rect.mBottom);
|
||||
gGL.vertex2i(local_rect.mRight, local_rect.mBottom);
|
||||
gGL.color4f(0.f, 0.f, 0.f, contex_cone_in_alpha * context_cone_opacity);
|
||||
gGL.vertex2i(owner_rect.mRight, owner_rect.mBottom);
|
||||
gGL.vertex2i(owner_rect.mLeft, owner_rect.mBottom);
|
||||
}
|
||||
gGL.end();
|
||||
}
|
||||
|
||||
if (gFocusMgr.childHasMouseCapture(getDragHandle()))
|
||||
{
|
||||
context_cone_opacity = lerp(context_cone_opacity, max_cone_opacity, LLSmoothInterpolation::getInterpolant(fade_time));
|
||||
}
|
||||
else
|
||||
{
|
||||
context_cone_opacity = lerp(context_cone_opacity, 0.f, LLSmoothInterpolation::getInterpolant(fade_time));
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloater::buildButtons(const Params& floater_params)
|
||||
{
|
||||
static LLUICachedControl<S32> floater_close_box_size ("UIFloaterCloseBoxSize", 0);
|
||||
|
|
|
|||
|
|
@ -395,6 +395,15 @@ protected:
|
|||
|
||||
virtual void updateTitleButtons();
|
||||
|
||||
// Draws a cone from this floater to parent floater or view (owner)
|
||||
// Modifies context_cone_opacity (interpolates according to fade time and returns new value)
|
||||
void drawConeToOwner(F32 &context_cone_opacity,
|
||||
F32 max_cone_opacity,
|
||||
LLView *owner_view,
|
||||
F32 context_fade_time = CONTEXT_CONE_FADE_TIME,
|
||||
F32 contex_cone_in_alpha = CONTEXT_CONE_IN_ALPHA,
|
||||
F32 contex_cone_out_alpha = CONTEXT_CONE_OUT_ALPHA);
|
||||
|
||||
private:
|
||||
void setForeground(BOOL b); // called only by floaterview
|
||||
void cleanupHandles(); // remove handles to dead floaters
|
||||
|
|
@ -424,6 +433,10 @@ private:
|
|||
void updateTransparency(LLView* view, ETypeTransparency transparency_type);
|
||||
|
||||
public:
|
||||
static const F32 CONTEXT_CONE_IN_ALPHA;
|
||||
static const F32 CONTEXT_CONE_OUT_ALPHA;
|
||||
static const F32 CONTEXT_CONE_FADE_TIME;
|
||||
|
||||
// Called when floater is opened, passes mKey
|
||||
// Public so external views or floaters can watch for this floater opening
|
||||
commit_signal_t mOpenSignal;
|
||||
|
|
|
|||
|
|
@ -605,6 +605,7 @@ set(viewer_SOURCE_FILES
|
|||
lltoolselectland.cpp
|
||||
lltoolselectrect.cpp
|
||||
lltracker.cpp
|
||||
lltrackpicker.cpp
|
||||
lltransientdockablefloater.cpp
|
||||
lltransientfloatermgr.cpp
|
||||
lltranslate.cpp
|
||||
|
|
@ -1219,6 +1220,7 @@ set(viewer_HEADER_FILES
|
|||
lltoolselectland.h
|
||||
lltoolselectrect.h
|
||||
lltracker.h
|
||||
lltrackpicker.h
|
||||
lltransientdockablefloater.h
|
||||
lltransientfloatermgr.h
|
||||
lltranslate.h
|
||||
|
|
|
|||
|
|
@ -361,59 +361,8 @@ void LLFloaterAvatarPicker::populateFriend()
|
|||
|
||||
void LLFloaterAvatarPicker::drawFrustum()
|
||||
{
|
||||
if(mFrustumOrigin.get())
|
||||
{
|
||||
LLView * frustumOrigin = mFrustumOrigin.get();
|
||||
LLRect origin_rect;
|
||||
frustumOrigin->localRectToOtherView(frustumOrigin->getLocalRect(), &origin_rect, this);
|
||||
// draw context cone connecting color picker with color swatch in parent floater
|
||||
LLRect local_rect = getLocalRect();
|
||||
if (hasFocus() && frustumOrigin->isInVisibleChain() && mContextConeOpacity > 0.001f)
|
||||
{
|
||||
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
LLGLEnable(GL_CULL_FACE);
|
||||
gGL.begin(LLRender::QUADS);
|
||||
{
|
||||
gGL.color4f(0.f, 0.f, 0.f, mContextConeInAlpha * mContextConeOpacity);
|
||||
gGL.vertex2i(origin_rect.mLeft, origin_rect.mTop);
|
||||
gGL.vertex2i(origin_rect.mRight, origin_rect.mTop);
|
||||
gGL.color4f(0.f, 0.f, 0.f, mContextConeOutAlpha * mContextConeOpacity);
|
||||
gGL.vertex2i(local_rect.mRight, local_rect.mTop);
|
||||
gGL.vertex2i(local_rect.mLeft, local_rect.mTop);
|
||||
|
||||
gGL.color4f(0.f, 0.f, 0.f, mContextConeOutAlpha * mContextConeOpacity);
|
||||
gGL.vertex2i(local_rect.mLeft, local_rect.mTop);
|
||||
gGL.vertex2i(local_rect.mLeft, local_rect.mBottom);
|
||||
gGL.color4f(0.f, 0.f, 0.f, mContextConeInAlpha * mContextConeOpacity);
|
||||
gGL.vertex2i(origin_rect.mLeft, origin_rect.mBottom);
|
||||
gGL.vertex2i(origin_rect.mLeft, origin_rect.mTop);
|
||||
|
||||
gGL.color4f(0.f, 0.f, 0.f, mContextConeOutAlpha * mContextConeOpacity);
|
||||
gGL.vertex2i(local_rect.mRight, local_rect.mBottom);
|
||||
gGL.vertex2i(local_rect.mRight, local_rect.mTop);
|
||||
gGL.color4f(0.f, 0.f, 0.f, mContextConeInAlpha * mContextConeOpacity);
|
||||
gGL.vertex2i(origin_rect.mRight, origin_rect.mTop);
|
||||
gGL.vertex2i(origin_rect.mRight, origin_rect.mBottom);
|
||||
|
||||
gGL.color4f(0.f, 0.f, 0.f, mContextConeOutAlpha * mContextConeOpacity);
|
||||
gGL.vertex2i(local_rect.mLeft, local_rect.mBottom);
|
||||
gGL.vertex2i(local_rect.mRight, local_rect.mBottom);
|
||||
gGL.color4f(0.f, 0.f, 0.f, mContextConeInAlpha * mContextConeOpacity);
|
||||
gGL.vertex2i(origin_rect.mRight, origin_rect.mBottom);
|
||||
gGL.vertex2i(origin_rect.mLeft, origin_rect.mBottom);
|
||||
}
|
||||
gGL.end();
|
||||
}
|
||||
|
||||
if (gFocusMgr.childHasMouseCapture(getDragHandle()))
|
||||
{
|
||||
mContextConeOpacity = lerp(mContextConeOpacity, gSavedSettings.getF32("PickerContextOpacity"), LLSmoothInterpolation::getInterpolant(mContextConeFadeTime));
|
||||
}
|
||||
else
|
||||
{
|
||||
mContextConeOpacity = lerp(mContextConeOpacity, 0.f, LLSmoothInterpolation::getInterpolant(mContextConeFadeTime));
|
||||
}
|
||||
}
|
||||
static LLCachedControl<F32> max_opacity(gSavedSettings, "PickerContextOpacity", 0.4f);
|
||||
drawConeToOwner(mContextConeOpacity, max_opacity, mFrustumOrigin.get(), mContextConeFadeTime, mContextConeInAlpha, mContextConeOutAlpha);
|
||||
}
|
||||
|
||||
void LLFloaterAvatarPicker::draw()
|
||||
|
|
|
|||
|
|
@ -485,56 +485,8 @@ BOOL LLFloaterColorPicker::isColorChanged()
|
|||
//
|
||||
void LLFloaterColorPicker::draw()
|
||||
{
|
||||
LLRect swatch_rect;
|
||||
mSwatch->localRectToOtherView(mSwatch->getLocalRect(), &swatch_rect, this);
|
||||
// draw context cone connecting color picker with color swatch in parent floater
|
||||
LLRect local_rect = getLocalRect();
|
||||
if (hasFocus() && mSwatch->isInVisibleChain() && mContextConeOpacity > 0.001f)
|
||||
{
|
||||
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
LLGLEnable(GL_CULL_FACE);
|
||||
gGL.begin(LLRender::QUADS);
|
||||
{
|
||||
gGL.color4f(0.f, 0.f, 0.f, mContextConeInAlpha * mContextConeOpacity);
|
||||
gGL.vertex2i(swatch_rect.mLeft, swatch_rect.mTop);
|
||||
gGL.vertex2i(swatch_rect.mRight, swatch_rect.mTop);
|
||||
gGL.color4f(0.f, 0.f, 0.f, mContextConeOutAlpha * mContextConeOpacity);
|
||||
gGL.vertex2i(local_rect.mRight, local_rect.mTop);
|
||||
gGL.vertex2i(local_rect.mLeft, local_rect.mTop);
|
||||
|
||||
gGL.color4f(0.f, 0.f, 0.f, mContextConeOutAlpha * mContextConeOpacity);
|
||||
gGL.vertex2i(local_rect.mLeft, local_rect.mTop);
|
||||
gGL.vertex2i(local_rect.mLeft, local_rect.mBottom);
|
||||
gGL.color4f(0.f, 0.f, 0.f, mContextConeInAlpha * mContextConeOpacity);
|
||||
gGL.vertex2i(swatch_rect.mLeft, swatch_rect.mBottom);
|
||||
gGL.vertex2i(swatch_rect.mLeft, swatch_rect.mTop);
|
||||
|
||||
gGL.color4f(0.f, 0.f, 0.f, mContextConeOutAlpha * mContextConeOpacity);
|
||||
gGL.vertex2i(local_rect.mRight, local_rect.mBottom);
|
||||
gGL.vertex2i(local_rect.mRight, local_rect.mTop);
|
||||
gGL.color4f(0.f, 0.f, 0.f, mContextConeInAlpha * mContextConeOpacity);
|
||||
gGL.vertex2i(swatch_rect.mRight, swatch_rect.mTop);
|
||||
gGL.vertex2i(swatch_rect.mRight, swatch_rect.mBottom);
|
||||
|
||||
gGL.color4f(0.f, 0.f, 0.f, mContextConeOutAlpha * mContextConeOpacity);
|
||||
gGL.vertex2i(local_rect.mLeft, local_rect.mBottom);
|
||||
gGL.vertex2i(local_rect.mRight, local_rect.mBottom);
|
||||
gGL.color4f(0.f, 0.f, 0.f, mContextConeInAlpha * mContextConeOpacity);
|
||||
gGL.vertex2i(swatch_rect.mRight, swatch_rect.mBottom);
|
||||
gGL.vertex2i(swatch_rect.mLeft, swatch_rect.mBottom);
|
||||
}
|
||||
gGL.end();
|
||||
}
|
||||
|
||||
if (gFocusMgr.childHasMouseCapture(getDragHandle()))
|
||||
{
|
||||
mContextConeOpacity = lerp(mContextConeOpacity, gSavedSettings.getF32("PickerContextOpacity"),
|
||||
LLSmoothInterpolation::getInterpolant(mContextConeFadeTime));
|
||||
}
|
||||
else
|
||||
{
|
||||
mContextConeOpacity = lerp(mContextConeOpacity, 0.f, LLSmoothInterpolation::getInterpolant(mContextConeFadeTime));
|
||||
}
|
||||
static LLCachedControl<F32> max_opacity(gSavedSettings, "PickerContextOpacity", 0.4f);
|
||||
drawConeToOwner(mContextConeOpacity, max_opacity, mSwatch, mContextConeFadeTime, mContextConeInAlpha, mContextConeOutAlpha);
|
||||
|
||||
mPipetteBtn->setToggleState(LLToolMgr::getInstance()->getCurrentTool() == LLToolPipette::getInstance());
|
||||
mApplyImmediateCheck->setEnabled(mActive && mCanApplyImmediately);
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@
|
|||
#include "llviewerparcelmgr.h"
|
||||
|
||||
#include "llsettingspicker.h"
|
||||
#include "lltrackpicker.h"
|
||||
|
||||
// newview
|
||||
#include "llagent.h"
|
||||
|
|
@ -425,6 +426,7 @@ void LLFloaterEditExtDayCycle::onOpen(const LLSD& key)
|
|||
void LLFloaterEditExtDayCycle::onClose(bool app_quitting)
|
||||
{
|
||||
doCloseInventoryFloater(app_quitting);
|
||||
doCloseTrackFloater(app_quitting);
|
||||
// there's no point to change environment if we're quitting
|
||||
// or if we already restored environment
|
||||
stopPlay();
|
||||
|
|
@ -802,7 +804,7 @@ void LLFloaterEditExtDayCycle::onRemoveFrame()
|
|||
|
||||
void LLFloaterEditExtDayCycle::onCloneTrack()
|
||||
{
|
||||
|
||||
doOpenTrackFloater();
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1228,8 +1230,7 @@ void LLFloaterEditExtDayCycle::updateButtons()
|
|||
}
|
||||
|
||||
can_clear = (mCurrentTrack > 1) ? (!mEditDay->getCycleTrack(mCurrentTrack).empty()) : (mEditDay->getCycleTrack(mCurrentTrack).size() > 1);
|
||||
mCloneTrack->setEnabled(can_clone && false);
|
||||
mCloneTrack->setVisible(false);
|
||||
mCloneTrack->setEnabled(can_clone);
|
||||
mLoadTrack->setEnabled(can_load);
|
||||
mClearTrack->setEnabled(can_clear);
|
||||
|
||||
|
|
@ -1509,6 +1510,7 @@ void LLFloaterEditExtDayCycle::synchronizeTabs()
|
|||
mEditSky = psettingS;
|
||||
|
||||
doCloseInventoryFloater();
|
||||
doCloseTrackFloater();
|
||||
|
||||
setTabsData(tabs, psettingS, canedit);
|
||||
LLEnvironment::instance().setEnvironment(LLEnvironment::ENV_EDIT, mEditSky, mEditWater);
|
||||
|
|
@ -1741,6 +1743,7 @@ bool LLFloaterEditExtDayCycle::canApplyParcel() const
|
|||
void LLFloaterEditExtDayCycle::startPlay()
|
||||
{
|
||||
doCloseInventoryFloater();
|
||||
doCloseTrackFloater();
|
||||
|
||||
mIsPlaying = true;
|
||||
mFramesSlider->resetCurSlider();
|
||||
|
|
@ -1814,6 +1817,55 @@ void LLFloaterEditExtDayCycle::clearDirtyFlag()
|
|||
|
||||
}
|
||||
|
||||
void LLFloaterEditExtDayCycle::doOpenTrackFloater()
|
||||
{
|
||||
LLFloaterTrackPicker *picker = static_cast<LLFloaterTrackPicker *>(mTrackFloater.get());
|
||||
|
||||
// Show the dialog
|
||||
if (!picker)
|
||||
{
|
||||
picker = new LLFloaterTrackPicker(this);
|
||||
|
||||
mTrackFloater = picker->getHandle();
|
||||
|
||||
picker->setCommitCallback([this](LLUICtrl *, const LLSD &data){ onPickerCommitTrackId(data.asInteger()); });
|
||||
}
|
||||
|
||||
const LLEnvironment::altitude_list_t &altitudes = LLEnvironment::instance().getRegionAltitudes();
|
||||
bool use_altitudes = altitudes.size() > 0 && ((mEditContext == CONTEXT_PARCEL) || (mEditContext == CONTEXT_REGION));
|
||||
|
||||
LLSD args = LLSD::emptyArray();
|
||||
|
||||
for (U32 i = 1; i < LLSettingsDay::TRACK_MAX; i++)
|
||||
{
|
||||
LLSD track;
|
||||
track["id"] = LLSD::Integer(i);
|
||||
track["enabled"] = !mEditDay->isTrackEmpty(i);
|
||||
if (use_altitudes)
|
||||
{
|
||||
track["altitude"] = altitudes[i - 1];
|
||||
}
|
||||
args.append(track);
|
||||
}
|
||||
|
||||
picker->showPicker(args);
|
||||
}
|
||||
|
||||
void LLFloaterEditExtDayCycle::doCloseTrackFloater(bool quitting)
|
||||
{
|
||||
LLFloater* floaterp = mTrackFloater.get();
|
||||
|
||||
if (floaterp)
|
||||
{
|
||||
floaterp->closeFloater(quitting);
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterEditExtDayCycle::onPickerCommitTrackId(U32 track_id)
|
||||
{
|
||||
cloneTrack(track_id, mCurrentTrack);
|
||||
}
|
||||
|
||||
void LLFloaterEditExtDayCycle::doOpenInventoryFloater(LLSettingsType::type_e type, LLUUID curritem)
|
||||
{
|
||||
// LLUI::sWindow->setCursor(UI_CURSOR_WAIT);
|
||||
|
|
@ -1832,9 +1884,9 @@ void LLFloaterEditExtDayCycle::doOpenInventoryFloater(LLSettingsType::type_e typ
|
|||
|
||||
picker->setSettingsFilter(type);
|
||||
picker->setSettingsItemId(curritem);
|
||||
picker->setTrackWater(mCurrentTrack == LLSettingsDay::TRACK_WATER);
|
||||
picker->openFloater();
|
||||
picker->setFocus(TRUE);
|
||||
picker->setTrackWater(mCurrentTrack == LLSettingsDay::TRACK_WATER);
|
||||
}
|
||||
|
||||
void LLFloaterEditExtDayCycle::doCloseInventoryFloater(bool quitting)
|
||||
|
|
|
|||
|
|
@ -160,6 +160,10 @@ private:
|
|||
void onInventoryCreated(LLUUID asset_id, LLUUID inventory_id, LLSD results);
|
||||
void onInventoryUpdated(LLUUID asset_id, LLUUID inventory_id, LLSD results);
|
||||
|
||||
void doOpenTrackFloater();
|
||||
void doCloseTrackFloater(bool quitting = false);
|
||||
void onPickerCommitTrackId(U32 track_id);
|
||||
|
||||
void doOpenInventoryFloater(LLSettingsType::type_e type, LLUUID curritem);
|
||||
void doCloseInventoryFloater(bool quitting = false);
|
||||
void onPickerCommitSetting(LLUUID item_id, S32 track);
|
||||
|
|
@ -218,6 +222,7 @@ private:
|
|||
LLFlyoutComboBtnCtrl * mFlyoutControl;
|
||||
|
||||
LLHandle<LLFloater> mInventoryFloater;
|
||||
LLHandle<LLFloater> mTrackFloater;
|
||||
|
||||
LLTrackBlenderLoopingManual::ptr_t mSkyBlender;
|
||||
LLTrackBlenderLoopingManual::ptr_t mWaterBlender;
|
||||
|
|
|
|||
|
|
@ -74,59 +74,8 @@ LLFloaterExperiencePicker* LLFloaterExperiencePicker::show( select_callback_t ca
|
|||
|
||||
void LLFloaterExperiencePicker::drawFrustum()
|
||||
{
|
||||
if(mFrustumOrigin.get())
|
||||
{
|
||||
LLView * frustumOrigin = mFrustumOrigin.get();
|
||||
LLRect origin_rect;
|
||||
frustumOrigin->localRectToOtherView(frustumOrigin->getLocalRect(), &origin_rect, this);
|
||||
// draw context cone connecting color picker with color swatch in parent floater
|
||||
LLRect local_rect = getLocalRect();
|
||||
if (hasFocus() && frustumOrigin->isInVisibleChain() && mContextConeOpacity > 0.001f)
|
||||
{
|
||||
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
LLGLEnable(GL_CULL_FACE);
|
||||
gGL.begin(LLRender::QUADS);
|
||||
{
|
||||
gGL.color4f(0.f, 0.f, 0.f, mContextConeInAlpha * mContextConeOpacity);
|
||||
gGL.vertex2i(origin_rect.mLeft, origin_rect.mTop);
|
||||
gGL.vertex2i(origin_rect.mRight, origin_rect.mTop);
|
||||
gGL.color4f(0.f, 0.f, 0.f, mContextConeOutAlpha * mContextConeOpacity);
|
||||
gGL.vertex2i(local_rect.mRight, local_rect.mTop);
|
||||
gGL.vertex2i(local_rect.mLeft, local_rect.mTop);
|
||||
|
||||
gGL.color4f(0.f, 0.f, 0.f, mContextConeOutAlpha * mContextConeOpacity);
|
||||
gGL.vertex2i(local_rect.mLeft, local_rect.mTop);
|
||||
gGL.vertex2i(local_rect.mLeft, local_rect.mBottom);
|
||||
gGL.color4f(0.f, 0.f, 0.f, mContextConeInAlpha * mContextConeOpacity);
|
||||
gGL.vertex2i(origin_rect.mLeft, origin_rect.mBottom);
|
||||
gGL.vertex2i(origin_rect.mLeft, origin_rect.mTop);
|
||||
|
||||
gGL.color4f(0.f, 0.f, 0.f, mContextConeOutAlpha * mContextConeOpacity);
|
||||
gGL.vertex2i(local_rect.mRight, local_rect.mBottom);
|
||||
gGL.vertex2i(local_rect.mRight, local_rect.mTop);
|
||||
gGL.color4f(0.f, 0.f, 0.f, mContextConeInAlpha * mContextConeOpacity);
|
||||
gGL.vertex2i(origin_rect.mRight, origin_rect.mTop);
|
||||
gGL.vertex2i(origin_rect.mRight, origin_rect.mBottom);
|
||||
|
||||
gGL.color4f(0.f, 0.f, 0.f, mContextConeOutAlpha * mContextConeOpacity);
|
||||
gGL.vertex2i(local_rect.mLeft, local_rect.mBottom);
|
||||
gGL.vertex2i(local_rect.mRight, local_rect.mBottom);
|
||||
gGL.color4f(0.f, 0.f, 0.f, mContextConeInAlpha * mContextConeOpacity);
|
||||
gGL.vertex2i(origin_rect.mRight, origin_rect.mBottom);
|
||||
gGL.vertex2i(origin_rect.mLeft, origin_rect.mBottom);
|
||||
}
|
||||
gGL.end();
|
||||
}
|
||||
|
||||
if (gFocusMgr.childHasMouseCapture(getDragHandle()))
|
||||
{
|
||||
mContextConeOpacity = lerp(mContextConeOpacity, gSavedSettings.getF32("PickerContextOpacity"), LLCriticalDamp::getInterpolant(mContextConeFadeTime));
|
||||
}
|
||||
else
|
||||
{
|
||||
mContextConeOpacity = lerp(mContextConeOpacity, 0.f, LLCriticalDamp::getInterpolant(mContextConeFadeTime));
|
||||
}
|
||||
}
|
||||
static LLCachedControl<F32> max_opacity(gSavedSettings, "PickerContextOpacity", 0.4f);
|
||||
drawConeToOwner(mContextConeOpacity, max_opacity, mFrustumOrigin.get(), mContextConeFadeTime, mContextConeInAlpha, mContextConeOutAlpha);
|
||||
}
|
||||
|
||||
void LLFloaterExperiencePicker::draw()
|
||||
|
|
|
|||
|
|
@ -55,10 +55,6 @@ namespace
|
|||
const std::string BTN_SELECT("btn_select");
|
||||
const std::string BTN_CANCEL("btn_cancel");
|
||||
|
||||
const F32 CONTEXT_CONE_IN_ALPHA(0.0f);
|
||||
const F32 CONTEXT_CONE_OUT_ALPHA(1.0f);
|
||||
const F32 CONTEXT_FADE_TIME(0.08f);
|
||||
|
||||
// strings in xml
|
||||
|
||||
const std::string STR_TITLE_PREFIX = "pick title";
|
||||
|
|
@ -194,59 +190,8 @@ void LLFloaterSettingsPicker::setSettingsFilter(LLSettingsType::type_e type)
|
|||
void LLFloaterSettingsPicker::draw()
|
||||
{
|
||||
LLView *owner = mOwnerHandle.get();
|
||||
if (owner)
|
||||
{
|
||||
// draw cone of context pointing back to texture swatch
|
||||
LLRect owner_rect;
|
||||
owner->localRectToOtherView(owner->getLocalRect(), &owner_rect, this);
|
||||
LLRect local_rect = getLocalRect();
|
||||
if (gFocusMgr.childHasKeyboardFocus(this) && owner->isInVisibleChain() && mContextConeOpacity > 0.001f)
|
||||
{
|
||||
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
LLGLEnable(GL_CULL_FACE);
|
||||
gGL.begin(LLRender::QUADS);
|
||||
{
|
||||
gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_IN_ALPHA * mContextConeOpacity);
|
||||
gGL.vertex2i(owner_rect.mLeft, owner_rect.mTop);
|
||||
gGL.vertex2i(owner_rect.mRight, owner_rect.mTop);
|
||||
gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_OUT_ALPHA * mContextConeOpacity);
|
||||
gGL.vertex2i(local_rect.mRight, local_rect.mTop);
|
||||
gGL.vertex2i(local_rect.mLeft, local_rect.mTop);
|
||||
|
||||
gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_OUT_ALPHA * mContextConeOpacity);
|
||||
gGL.vertex2i(local_rect.mLeft, local_rect.mTop);
|
||||
gGL.vertex2i(local_rect.mLeft, local_rect.mBottom);
|
||||
gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_IN_ALPHA * mContextConeOpacity);
|
||||
gGL.vertex2i(owner_rect.mLeft, owner_rect.mBottom);
|
||||
gGL.vertex2i(owner_rect.mLeft, owner_rect.mTop);
|
||||
|
||||
gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_OUT_ALPHA * mContextConeOpacity);
|
||||
gGL.vertex2i(local_rect.mRight, local_rect.mBottom);
|
||||
gGL.vertex2i(local_rect.mRight, local_rect.mTop);
|
||||
gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_IN_ALPHA * mContextConeOpacity);
|
||||
gGL.vertex2i(owner_rect.mRight, owner_rect.mTop);
|
||||
gGL.vertex2i(owner_rect.mRight, owner_rect.mBottom);
|
||||
|
||||
|
||||
gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_OUT_ALPHA * mContextConeOpacity);
|
||||
gGL.vertex2i(local_rect.mLeft, local_rect.mBottom);
|
||||
gGL.vertex2i(local_rect.mRight, local_rect.mBottom);
|
||||
gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_IN_ALPHA * mContextConeOpacity);
|
||||
gGL.vertex2i(owner_rect.mRight, owner_rect.mBottom);
|
||||
gGL.vertex2i(owner_rect.mLeft, owner_rect.mBottom);
|
||||
}
|
||||
gGL.end();
|
||||
}
|
||||
}
|
||||
|
||||
if (gFocusMgr.childHasMouseCapture(getDragHandle()))
|
||||
{
|
||||
mContextConeOpacity = lerp(mContextConeOpacity, gSavedSettings.getF32("PickerContextOpacity"), LLSmoothInterpolation::getInterpolant(CONTEXT_FADE_TIME));
|
||||
}
|
||||
else
|
||||
{
|
||||
mContextConeOpacity = lerp(mContextConeOpacity, 0.f, LLSmoothInterpolation::getInterpolant(CONTEXT_FADE_TIME));
|
||||
}
|
||||
static LLCachedControl<F32> max_opacity(gSavedSettings, "PickerContextOpacity", 0.4f);
|
||||
drawConeToOwner(mContextConeOpacity, max_opacity, owner);
|
||||
|
||||
LLFloater::draw();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,7 +45,6 @@ class LLInventoryPanel;
|
|||
class LLFloaterSettingsPicker : public LLFloater
|
||||
{
|
||||
public:
|
||||
typedef std::function<void (LLUUID id)> commit_callback_t;
|
||||
typedef std::function<void()> close_callback_t;
|
||||
typedef std::function<void(const LLUUID& item_id)> id_changed_callback_t;
|
||||
|
||||
|
|
@ -117,8 +116,6 @@ private:
|
|||
|
||||
F32 mContextConeOpacity;
|
||||
PermissionMask mImmediateFilterPermMask;
|
||||
// PermissionMask mDnDFilterPermMask;
|
||||
// PermissionMask mNonImmediateFilterPermMask;
|
||||
|
||||
bool mActive;
|
||||
bool mNoCopySettingsSelected;
|
||||
|
|
|
|||
|
|
@ -70,9 +70,6 @@
|
|||
#include "lllocalbitmaps.h"
|
||||
#include "llerror.h"
|
||||
|
||||
static const F32 CONTEXT_CONE_IN_ALPHA = 0.0f;
|
||||
static const F32 CONTEXT_CONE_OUT_ALPHA = 1.f;
|
||||
static const F32 CONTEXT_FADE_TIME = 0.08f;
|
||||
|
||||
static const S32 LOCAL_TRACKING_ID_COLUMN = 1;
|
||||
|
||||
|
|
@ -410,59 +407,8 @@ BOOL LLFloaterTexturePicker::postBuild()
|
|||
// virtual
|
||||
void LLFloaterTexturePicker::draw()
|
||||
{
|
||||
if (mOwner)
|
||||
{
|
||||
// draw cone of context pointing back to texture swatch
|
||||
LLRect owner_rect;
|
||||
mOwner->localRectToOtherView(mOwner->getLocalRect(), &owner_rect, this);
|
||||
LLRect local_rect = getLocalRect();
|
||||
if (gFocusMgr.childHasKeyboardFocus(this) && mOwner->isInVisibleChain() && mContextConeOpacity > 0.001f)
|
||||
{
|
||||
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
LLGLEnable(GL_CULL_FACE);
|
||||
gGL.begin(LLRender::QUADS);
|
||||
{
|
||||
gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_IN_ALPHA * mContextConeOpacity);
|
||||
gGL.vertex2i(owner_rect.mLeft, owner_rect.mTop);
|
||||
gGL.vertex2i(owner_rect.mRight, owner_rect.mTop);
|
||||
gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_OUT_ALPHA * mContextConeOpacity);
|
||||
gGL.vertex2i(local_rect.mRight, local_rect.mTop);
|
||||
gGL.vertex2i(local_rect.mLeft, local_rect.mTop);
|
||||
|
||||
gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_OUT_ALPHA * mContextConeOpacity);
|
||||
gGL.vertex2i(local_rect.mLeft, local_rect.mTop);
|
||||
gGL.vertex2i(local_rect.mLeft, local_rect.mBottom);
|
||||
gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_IN_ALPHA * mContextConeOpacity);
|
||||
gGL.vertex2i(owner_rect.mLeft, owner_rect.mBottom);
|
||||
gGL.vertex2i(owner_rect.mLeft, owner_rect.mTop);
|
||||
|
||||
gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_OUT_ALPHA * mContextConeOpacity);
|
||||
gGL.vertex2i(local_rect.mRight, local_rect.mBottom);
|
||||
gGL.vertex2i(local_rect.mRight, local_rect.mTop);
|
||||
gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_IN_ALPHA * mContextConeOpacity);
|
||||
gGL.vertex2i(owner_rect.mRight, owner_rect.mTop);
|
||||
gGL.vertex2i(owner_rect.mRight, owner_rect.mBottom);
|
||||
|
||||
|
||||
gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_OUT_ALPHA * mContextConeOpacity);
|
||||
gGL.vertex2i(local_rect.mLeft, local_rect.mBottom);
|
||||
gGL.vertex2i(local_rect.mRight, local_rect.mBottom);
|
||||
gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_IN_ALPHA * mContextConeOpacity);
|
||||
gGL.vertex2i(owner_rect.mRight, owner_rect.mBottom);
|
||||
gGL.vertex2i(owner_rect.mLeft, owner_rect.mBottom);
|
||||
}
|
||||
gGL.end();
|
||||
}
|
||||
}
|
||||
|
||||
if (gFocusMgr.childHasMouseCapture(getDragHandle()))
|
||||
{
|
||||
mContextConeOpacity = lerp(mContextConeOpacity, gSavedSettings.getF32("PickerContextOpacity"), LLSmoothInterpolation::getInterpolant(CONTEXT_FADE_TIME));
|
||||
}
|
||||
else
|
||||
{
|
||||
mContextConeOpacity = lerp(mContextConeOpacity, 0.f, LLSmoothInterpolation::getInterpolant(CONTEXT_FADE_TIME));
|
||||
}
|
||||
static LLCachedControl<F32> max_opacity(gSavedSettings, "PickerContextOpacity", 0.4f);
|
||||
drawConeToOwner(mContextConeOpacity, max_opacity, mOwner);
|
||||
|
||||
updateImageStats();
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,126 @@
|
|||
/**
|
||||
* @author AndreyK Productengine
|
||||
* @brief LLTrackPicker class header file including related functions
|
||||
*
|
||||
* $LicenseInfo:firstyear=2018&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2018, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include "lltrackpicker.h"
|
||||
|
||||
#include "llradiogroup.h"
|
||||
#include "llviewercontrol.h"
|
||||
|
||||
|
||||
//=========================================================================
|
||||
namespace
|
||||
{
|
||||
const std::string FLOATER_DEFINITION_XML("floater_pick_track.xml");
|
||||
|
||||
const std::string BTN_SELECT("btn_select");
|
||||
const std::string BTN_CANCEL("btn_cancel");
|
||||
const std::string RDO_TRACK_SELECTION("track_selection");
|
||||
const std::string RDO_TRACK_PREFIX("radio_sky");
|
||||
}
|
||||
//=========================================================================
|
||||
|
||||
LLFloaterTrackPicker::LLFloaterTrackPicker(LLView * owner, const LLSD ¶ms) :
|
||||
LLFloater(params),
|
||||
mContextConeOpacity(0.0f),
|
||||
mOwnerHandle()
|
||||
{
|
||||
mOwnerHandle = owner->getHandle();
|
||||
buildFromFile(FLOATER_DEFINITION_XML);
|
||||
}
|
||||
|
||||
LLFloaterTrackPicker::~LLFloaterTrackPicker()
|
||||
{
|
||||
}
|
||||
|
||||
BOOL LLFloaterTrackPicker::postBuild()
|
||||
{
|
||||
childSetAction(BTN_CANCEL, [this](LLUICtrl*, const LLSD& param){ onButtonCancel(); });
|
||||
childSetAction(BTN_SELECT, [this](LLUICtrl*, const LLSD& param){ onButtonSelect(); });
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void LLFloaterTrackPicker::onClose(bool app_quitting)
|
||||
{
|
||||
if (app_quitting)
|
||||
return;
|
||||
|
||||
LLView *owner = mOwnerHandle.get();
|
||||
if (owner)
|
||||
{
|
||||
owner->setFocus(TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterTrackPicker::showPicker(LLSD &args)
|
||||
{
|
||||
LLSD::array_const_iterator iter;
|
||||
LLSD::array_const_iterator end = args.endArray();
|
||||
|
||||
for (iter = args.beginArray(); iter != end; ++iter)
|
||||
{
|
||||
S32 track_id = (*iter)["id"].asInteger();
|
||||
bool can_enable = (*iter)["enabled"].asBoolean();
|
||||
LLView *view = getChild<LLCheckBoxCtrl>(RDO_TRACK_PREFIX + llformat("%d", track_id), true);
|
||||
view->setEnabled(can_enable);
|
||||
view->setLabelArg("[ALT]", (*iter).has("altitude") ? ((*iter)["altitude"].asString() + "m") : " ");
|
||||
}
|
||||
|
||||
openFloater(getKey());
|
||||
setFocus(TRUE);
|
||||
}
|
||||
|
||||
void LLFloaterTrackPicker::draw()
|
||||
{
|
||||
LLView *owner = mOwnerHandle.get();
|
||||
static LLCachedControl<F32> max_opacity(gSavedSettings, "PickerContextOpacity", 0.4f);
|
||||
drawConeToOwner(mContextConeOpacity, max_opacity, owner);
|
||||
|
||||
LLFloater::draw();
|
||||
}
|
||||
|
||||
void LLFloaterTrackPicker::onButtonCancel()
|
||||
{
|
||||
closeFloater();
|
||||
}
|
||||
|
||||
void LLFloaterTrackPicker::onButtonSelect()
|
||||
{
|
||||
if (mCommitSignal)
|
||||
{
|
||||
(*mCommitSignal)(this, getChild<LLRadioGroup>(RDO_TRACK_SELECTION, true)->getSelectedValue());
|
||||
}
|
||||
closeFloater();
|
||||
}
|
||||
|
||||
void LLFloaterTrackPicker::onFocusLost()
|
||||
{
|
||||
if (isInVisibleChain())
|
||||
{
|
||||
closeFloater();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
/**
|
||||
* @file lltrackpicker.h
|
||||
* @author AndreyK Productengine
|
||||
* @brief LLTrackPicker class header file including related functions
|
||||
*
|
||||
* $LicenseInfo:firstyear=2018&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2018, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_TRACKPICKER_H
|
||||
#define LL_TRACKPICKER_H
|
||||
|
||||
#include "llfloater.h"
|
||||
|
||||
|
||||
//=========================================================================
|
||||
|
||||
class LLFloaterTrackPicker : public LLFloater
|
||||
{
|
||||
public:
|
||||
LLFloaterTrackPicker(LLView * owner, const LLSD ¶ms = LLSD());
|
||||
virtual ~LLFloaterTrackPicker() override;
|
||||
|
||||
virtual BOOL postBuild() override;
|
||||
virtual void onClose(bool app_quitting) override;
|
||||
void showPicker(LLSD &args);
|
||||
|
||||
virtual void draw() override;
|
||||
|
||||
void onButtonCancel();
|
||||
void onButtonSelect();
|
||||
|
||||
private:
|
||||
void onFocusLost() override;
|
||||
|
||||
F32 mContextConeOpacity;
|
||||
LLHandle<LLView> mOwnerHandle;
|
||||
};
|
||||
|
||||
#endif // LL_TRACKPICKER_H
|
||||
|
|
@ -0,0 +1,129 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
|
||||
<floater
|
||||
legacy_header_height="0"
|
||||
can_minimize="false"
|
||||
can_resize="true"
|
||||
height="140"
|
||||
layout="topleft"
|
||||
min_height="140"
|
||||
min_width="225"
|
||||
name="track picker"
|
||||
help_topic="track_picker"
|
||||
title="PICK: TRACK"
|
||||
width="225">
|
||||
<layout_stack name="adjuster"
|
||||
follows="all"
|
||||
animate="false"
|
||||
top="0"
|
||||
left="6"
|
||||
right="-6"
|
||||
bottom="-10"
|
||||
orientation="vertical">
|
||||
<layout_panel name="pnl_desc"
|
||||
border="false"
|
||||
auto_resize="false"
|
||||
user_resize="false"
|
||||
height="11"
|
||||
min_height="10"
|
||||
bg_alpha_color="blue"
|
||||
background_visible="false">
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="10"
|
||||
layout="topleft"
|
||||
left="5"
|
||||
name="select_description"
|
||||
mouse_opaque="false"
|
||||
top="0"
|
||||
width="300">
|
||||
Select source sky:
|
||||
</text>
|
||||
</layout_panel>
|
||||
<layout_panel name="pnl_traks"
|
||||
border="false"
|
||||
auto_resize="true"
|
||||
user_resize="false"
|
||||
height="29"
|
||||
min_height="29"
|
||||
bg_alpha_color="blue"
|
||||
background_visible="false">
|
||||
<radio_group
|
||||
follows="all"
|
||||
height="60"
|
||||
layout="topleft"
|
||||
top="0"
|
||||
left="3"
|
||||
right="-3"
|
||||
bottom="-3"
|
||||
name="track_selection"
|
||||
width="100">
|
||||
<radio_item
|
||||
height="20"
|
||||
label="Sky4 [ALT]"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="radio_sky4"
|
||||
value="4"
|
||||
top="0"
|
||||
width="90" />
|
||||
<radio_item
|
||||
height="20"
|
||||
label="Sky3 [ALT]"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="radio_sky3"
|
||||
value="3"
|
||||
top_delta="20"
|
||||
width="90" />
|
||||
<radio_item
|
||||
height="20"
|
||||
label="Sky2 [ALT]"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="radio_sky2"
|
||||
value="2"
|
||||
top_delta="20"
|
||||
width="90" />
|
||||
<radio_item
|
||||
height="20"
|
||||
label="Ground"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="radio_sky1"
|
||||
value="1"
|
||||
top_delta="20"
|
||||
width="90" />
|
||||
</radio_group>
|
||||
</layout_panel>
|
||||
<layout_panel name="pnl_ok_cancel"
|
||||
border="false"
|
||||
auto_resize="false"
|
||||
user_resize="false"
|
||||
height="29"
|
||||
min_height="29">
|
||||
<button
|
||||
follows="top|left"
|
||||
height="20"
|
||||
label="OK"
|
||||
label_selected="OK"
|
||||
layout="topleft"
|
||||
left="2"
|
||||
top="2"
|
||||
name="btn_select"
|
||||
width="100" />
|
||||
<button
|
||||
follows="top|left"
|
||||
height="20"
|
||||
label="Cancel"
|
||||
label_selected="Cancel"
|
||||
layout="topleft"
|
||||
left_delta="110"
|
||||
top_delta="0"
|
||||
name="btn_cancel"
|
||||
width="100" />
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</floater>
|
||||
Loading…
Reference in New Issue