diff options
Diffstat (limited to 'linden/indra/newview/llpanelobject.cpp')
-rw-r--r-- | linden/indra/newview/llpanelobject.cpp | 89 |
1 files changed, 85 insertions, 4 deletions
diff --git a/linden/indra/newview/llpanelobject.cpp b/linden/indra/newview/llpanelobject.cpp index 75f479c..40dc211 100644 --- a/linden/indra/newview/llpanelobject.cpp +++ b/linden/indra/newview/llpanelobject.cpp | |||
@@ -47,6 +47,7 @@ | |||
47 | // project includes | 47 | // project includes |
48 | #include "llagent.h" | 48 | #include "llagent.h" |
49 | #include "llbutton.h" | 49 | #include "llbutton.h" |
50 | #include "llcalc.h" | ||
50 | #include "llcheckboxctrl.h" | 51 | #include "llcheckboxctrl.h" |
51 | #include "llcolorswatch.h" | 52 | #include "llcolorswatch.h" |
52 | #include "llcombobox.h" | 53 | #include "llcombobox.h" |
@@ -75,6 +76,10 @@ | |||
75 | 76 | ||
76 | #include "lldrawpool.h" | 77 | #include "lldrawpool.h" |
77 | 78 | ||
79 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
80 | #include "llvoavatar.h" | ||
81 | // [/RLVa:KB] | ||
82 | |||
78 | // | 83 | // |
79 | // Constants | 84 | // Constants |
80 | // | 85 | // |
@@ -110,6 +115,9 @@ BOOL LLPanelObject::postBuild() | |||
110 | // Top | 115 | // Top |
111 | //-------------------------------------------------------- | 116 | //-------------------------------------------------------- |
112 | 117 | ||
118 | // Build constant tipsheet | ||
119 | childSetAction("build_math_constants",onClickBuildConstants,this); | ||
120 | |||
113 | // Lock checkbox | 121 | // Lock checkbox |
114 | mCheckLock = getChild<LLCheckBoxCtrl>("checkbox locked"); | 122 | mCheckLock = getChild<LLCheckBoxCtrl>("checkbox locked"); |
115 | childSetCommitCallback("checkbox locked",onCommitLock,this); | 123 | childSetCommitCallback("checkbox locked",onCommitLock,this); |
@@ -342,6 +350,8 @@ void LLPanelObject::getState( ) | |||
342 | } | 350 | } |
343 | } | 351 | } |
344 | 352 | ||
353 | LLCalc* calcp = LLCalc::getInstance(); | ||
354 | |||
345 | LLVOVolume *volobjp = NULL; | 355 | LLVOVolume *volobjp = NULL; |
346 | if ( objectp && (objectp->getPCode() == LL_PCODE_VOLUME)) | 356 | if ( objectp && (objectp->getPCode() == LL_PCODE_VOLUME)) |
347 | { | 357 | { |
@@ -358,6 +368,7 @@ void LLPanelObject::getState( ) | |||
358 | 368 | ||
359 | // Disable all text input fields | 369 | // Disable all text input fields |
360 | clearCtrls(); | 370 | clearCtrls(); |
371 | calcp->clearAllVariables(); | ||
361 | return; | 372 | return; |
362 | } | 373 | } |
363 | 374 | ||
@@ -366,6 +377,8 @@ void LLPanelObject::getState( ) | |||
366 | BOOL enable_scale = objectp->permMove() && objectp->permModify(); | 377 | BOOL enable_scale = objectp->permMove() && objectp->permModify(); |
367 | BOOL enable_rotate = objectp->permMove() && ( (objectp->permModify() && !objectp->isAttachment()) || !gSavedSettings.getBOOL("EditLinkedParts")); | 378 | BOOL enable_rotate = objectp->permMove() && ( (objectp->permModify() && !objectp->isAttachment()) || !gSavedSettings.getBOOL("EditLinkedParts")); |
368 | 379 | ||
380 | childSetEnabled("build_math_constants",true); | ||
381 | |||
369 | S32 selected_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount(); | 382 | S32 selected_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount(); |
370 | BOOL single_volume = (LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME )) | 383 | BOOL single_volume = (LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME )) |
371 | && (selected_count == 1); | 384 | && (selected_count == 1); |
@@ -377,6 +390,15 @@ void LLPanelObject::getState( ) | |||
377 | enable_rotate = FALSE; | 390 | enable_rotate = FALSE; |
378 | } | 391 | } |
379 | 392 | ||
393 | // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | ||
394 | if ( (rlv_handler_t::isEnabled()) && ((gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) || (gRlvHandler.hasBehaviour(RLV_BHVR_SITTP))) ) | ||
395 | { | ||
396 | LLVOAvatar* pAvatar = gAgent.getAvatarObject(); | ||
397 | if ( (pAvatar) && (pAvatar->mIsSitting) && (pAvatar->getRoot() == objectp->getRootEdit()) ) | ||
398 | enable_move = enable_scale = enable_rotate = FALSE; | ||
399 | } | ||
400 | // [/RLVa:KB] | ||
401 | |||
380 | LLVector3 vec; | 402 | LLVector3 vec; |
381 | if (enable_move) | 403 | if (enable_move) |
382 | { | 404 | { |
@@ -384,12 +406,18 @@ void LLPanelObject::getState( ) | |||
384 | mCtrlPosX->set( vec.mV[VX] ); | 406 | mCtrlPosX->set( vec.mV[VX] ); |
385 | mCtrlPosY->set( vec.mV[VY] ); | 407 | mCtrlPosY->set( vec.mV[VY] ); |
386 | mCtrlPosZ->set( vec.mV[VZ] ); | 408 | mCtrlPosZ->set( vec.mV[VZ] ); |
409 | calcp->setVar(LLCalc::X_POS, vec.mV[VX]); | ||
410 | calcp->setVar(LLCalc::Y_POS, vec.mV[VY]); | ||
411 | calcp->setVar(LLCalc::Z_POS, vec.mV[VZ]); | ||
387 | } | 412 | } |
388 | else | 413 | else |
389 | { | 414 | { |
390 | mCtrlPosX->clear(); | 415 | mCtrlPosX->clear(); |
391 | mCtrlPosY->clear(); | 416 | mCtrlPosY->clear(); |
392 | mCtrlPosZ->clear(); | 417 | mCtrlPosZ->clear(); |
418 | calcp->clearVar(LLCalc::X_POS); | ||
419 | calcp->clearVar(LLCalc::Y_POS); | ||
420 | calcp->clearVar(LLCalc::Z_POS); | ||
393 | } | 421 | } |
394 | 422 | ||
395 | 423 | ||
@@ -404,12 +432,18 @@ void LLPanelObject::getState( ) | |||
404 | mCtrlScaleX->set( vec.mV[VX] ); | 432 | mCtrlScaleX->set( vec.mV[VX] ); |
405 | mCtrlScaleY->set( vec.mV[VY] ); | 433 | mCtrlScaleY->set( vec.mV[VY] ); |
406 | mCtrlScaleZ->set( vec.mV[VZ] ); | 434 | mCtrlScaleZ->set( vec.mV[VZ] ); |
435 | calcp->setVar(LLCalc::X_SCALE, vec.mV[VX]); | ||
436 | calcp->setVar(LLCalc::Y_SCALE, vec.mV[VY]); | ||
437 | calcp->setVar(LLCalc::Z_SCALE, vec.mV[VZ]); | ||
407 | } | 438 | } |
408 | else | 439 | else |
409 | { | 440 | { |
410 | mCtrlScaleX->clear(); | 441 | mCtrlScaleX->clear(); |
411 | mCtrlScaleY->clear(); | 442 | mCtrlScaleY->clear(); |
412 | mCtrlScaleZ->clear(); | 443 | mCtrlScaleZ->clear(); |
444 | calcp->setVar(LLCalc::X_SCALE, 0.f); | ||
445 | calcp->setVar(LLCalc::Y_SCALE, 0.f); | ||
446 | calcp->setVar(LLCalc::Z_SCALE, 0.f); | ||
413 | } | 447 | } |
414 | 448 | ||
415 | mLabelSize->setEnabled( enable_scale ); | 449 | mLabelSize->setEnabled( enable_scale ); |
@@ -429,12 +463,18 @@ void LLPanelObject::getState( ) | |||
429 | mCtrlRotX->set( mCurEulerDegrees.mV[VX] ); | 463 | mCtrlRotX->set( mCurEulerDegrees.mV[VX] ); |
430 | mCtrlRotY->set( mCurEulerDegrees.mV[VY] ); | 464 | mCtrlRotY->set( mCurEulerDegrees.mV[VY] ); |
431 | mCtrlRotZ->set( mCurEulerDegrees.mV[VZ] ); | 465 | mCtrlRotZ->set( mCurEulerDegrees.mV[VZ] ); |
466 | calcp->setVar(LLCalc::X_ROT, mCurEulerDegrees.mV[VX]); | ||
467 | calcp->setVar(LLCalc::Y_ROT, mCurEulerDegrees.mV[VY]); | ||
468 | calcp->setVar(LLCalc::Z_ROT, mCurEulerDegrees.mV[VZ]); | ||
432 | } | 469 | } |
433 | else | 470 | else |
434 | { | 471 | { |
435 | mCtrlRotX->clear(); | 472 | mCtrlRotX->clear(); |
436 | mCtrlRotY->clear(); | 473 | mCtrlRotY->clear(); |
437 | mCtrlRotZ->clear(); | 474 | mCtrlRotZ->clear(); |
475 | calcp->clearVar(LLCalc::X_ROT); | ||
476 | calcp->clearVar(LLCalc::Y_ROT); | ||
477 | calcp->clearVar(LLCalc::Z_ROT); | ||
438 | } | 478 | } |
439 | 479 | ||
440 | mLabelRotation->setEnabled( enable_rotate ); | 480 | mLabelRotation->setEnabled( enable_rotate ); |
@@ -592,6 +632,10 @@ void LLPanelObject::getState( ) | |||
592 | } | 632 | } |
593 | else | 633 | else |
594 | { | 634 | { |
635 | mCtrlScaleX->setMaxValue(LLManipScale::getMaxPrimSize()); | ||
636 | mCtrlScaleY->setMaxValue(LLManipScale::getMaxPrimSize()); | ||
637 | mCtrlScaleZ->setMaxValue(LLManipScale::getMaxPrimSize()); | ||
638 | |||
595 | // Only allowed to change these parameters for objects | 639 | // Only allowed to change these parameters for objects |
596 | // that you have permissions on AND are not attachments. | 640 | // that you have permissions on AND are not attachments. |
597 | enabled = root_objectp->permModify(); | 641 | enabled = root_objectp->permModify(); |
@@ -687,8 +731,9 @@ void LLPanelObject::getState( ) | |||
687 | F32 end_t = volume_params.getEndT(); | 731 | F32 end_t = volume_params.getEndT(); |
688 | 732 | ||
689 | // Hollowness | 733 | // Hollowness |
690 | F32 hollow = volume_params.getHollow(); | 734 | F32 hollow = 100.f * volume_params.getHollow(); |
691 | mSpinHollow->set( 100.f * hollow ); | 735 | mSpinHollow->set( hollow ); |
736 | calcp->setVar(LLCalc::HOLLOW, hollow); | ||
692 | 737 | ||
693 | // All hollow objects allow a shape to be selected. | 738 | // All hollow objects allow a shape to be selected. |
694 | if (hollow > 0.f) | 739 | if (hollow > 0.f) |
@@ -741,6 +786,10 @@ void LLPanelObject::getState( ) | |||
741 | mSpinCutEnd ->set( cut_end ); | 786 | mSpinCutEnd ->set( cut_end ); |
742 | mCtrlPathBegin ->set( adv_cut_begin ); | 787 | mCtrlPathBegin ->set( adv_cut_begin ); |
743 | mCtrlPathEnd ->set( adv_cut_end ); | 788 | mCtrlPathEnd ->set( adv_cut_end ); |
789 | calcp->setVar(LLCalc::CUT_BEGIN, cut_begin); | ||
790 | calcp->setVar(LLCalc::CUT_END, cut_end); | ||
791 | calcp->setVar(LLCalc::PATH_BEGIN, adv_cut_begin); | ||
792 | calcp->setVar(LLCalc::PATH_END, adv_cut_end); | ||
744 | 793 | ||
745 | // Twist | 794 | // Twist |
746 | F32 twist = volume_params.getTwist(); | 795 | F32 twist = volume_params.getTwist(); |
@@ -759,18 +808,24 @@ void LLPanelObject::getState( ) | |||
759 | 808 | ||
760 | mSpinTwist ->set( twist ); | 809 | mSpinTwist ->set( twist ); |
761 | mSpinTwistBegin ->set( twist_begin ); | 810 | mSpinTwistBegin ->set( twist_begin ); |
811 | calcp->setVar(LLCalc::TWIST_END, twist); | ||
812 | calcp->setVar(LLCalc::TWIST_BEGIN, twist_begin); | ||
762 | 813 | ||
763 | // Shear | 814 | // Shear |
764 | F32 shear_x = volume_params.getShearX(); | 815 | F32 shear_x = volume_params.getShearX(); |
765 | F32 shear_y = volume_params.getShearY(); | 816 | F32 shear_y = volume_params.getShearY(); |
766 | mSpinShearX->set( shear_x ); | 817 | mSpinShearX->set( shear_x ); |
767 | mSpinShearY->set( shear_y ); | 818 | mSpinShearY->set( shear_y ); |
819 | calcp->setVar(LLCalc::X_SHEAR, shear_x); | ||
820 | calcp->setVar(LLCalc::Y_SHEAR, shear_y); | ||
768 | 821 | ||
769 | // Taper | 822 | // Taper |
770 | F32 taper_x = volume_params.getTaperX(); | 823 | F32 taper_x = volume_params.getTaperX(); |
771 | F32 taper_y = volume_params.getTaperY(); | 824 | F32 taper_y = volume_params.getTaperY(); |
772 | mSpinTaperX->set( taper_x ); | 825 | mSpinTaperX->set( taper_x ); |
773 | mSpinTaperY->set( taper_y ); | 826 | mSpinTaperY->set( taper_y ); |
827 | calcp->setVar(LLCalc::X_TAPER, taper_x); | ||
828 | calcp->setVar(LLCalc::Y_TAPER, taper_y); | ||
774 | 829 | ||
775 | // Radius offset. | 830 | // Radius offset. |
776 | F32 radius_offset = volume_params.getRadiusOffset(); | 831 | F32 radius_offset = volume_params.getRadiusOffset(); |
@@ -800,10 +855,12 @@ void LLPanelObject::getState( ) | |||
800 | } | 855 | } |
801 | } | 856 | } |
802 | mSpinRadiusOffset->set( radius_offset); | 857 | mSpinRadiusOffset->set( radius_offset); |
858 | calcp->setVar(LLCalc::RADIUS_OFFSET, radius_offset); | ||
803 | 859 | ||
804 | // Revolutions | 860 | // Revolutions |
805 | F32 revolutions = volume_params.getRevolutions(); | 861 | F32 revolutions = volume_params.getRevolutions(); |
806 | mSpinRevolutions->set( revolutions ); | 862 | mSpinRevolutions->set( revolutions ); |
863 | calcp->setVar(LLCalc::REVOLUTIONS, revolutions); | ||
807 | 864 | ||
808 | // Skew | 865 | // Skew |
809 | F32 skew = volume_params.getSkew(); | 866 | F32 skew = volume_params.getSkew(); |
@@ -828,6 +885,7 @@ void LLPanelObject::getState( ) | |||
828 | } | 885 | } |
829 | } | 886 | } |
830 | mSpinSkew->set( skew ); | 887 | mSpinSkew->set( skew ); |
888 | calcp->setVar(LLCalc::SKEW, skew); | ||
831 | } | 889 | } |
832 | 890 | ||
833 | // Compute control visibility, label names, and twist range. | 891 | // Compute control visibility, label names, and twist range. |
@@ -839,7 +897,7 @@ void LLPanelObject::getState( ) | |||
839 | BOOL top_shear_x_visible = TRUE; | 897 | BOOL top_shear_x_visible = TRUE; |
840 | BOOL top_shear_y_visible = TRUE; | 898 | BOOL top_shear_y_visible = TRUE; |
841 | BOOL twist_visible = TRUE; | 899 | BOOL twist_visible = TRUE; |
842 | BOOL advanced_cut_visible = FALSE; | 900 | BOOL advanced_cut_visible = TRUE; |
843 | BOOL taper_visible = FALSE; | 901 | BOOL taper_visible = FALSE; |
844 | BOOL skew_visible = FALSE; | 902 | BOOL skew_visible = FALSE; |
845 | BOOL radius_offset_visible = FALSE; | 903 | BOOL radius_offset_visible = FALSE; |
@@ -864,6 +922,7 @@ void LLPanelObject::getState( ) | |||
864 | //twist_visible = FALSE; | 922 | //twist_visible = FALSE; |
865 | advanced_cut_visible = TRUE; | 923 | advanced_cut_visible = TRUE; |
866 | advanced_is_dimple = TRUE; | 924 | advanced_is_dimple = TRUE; |
925 | advanced_is_slice = FALSE; | ||
867 | twist_min = OBJECT_TWIST_MIN; | 926 | twist_min = OBJECT_TWIST_MIN; |
868 | twist_max = OBJECT_TWIST_MAX; | 927 | twist_max = OBJECT_TWIST_MAX; |
869 | twist_inc = OBJECT_TWIST_INC; | 928 | twist_inc = OBJECT_TWIST_INC; |
@@ -877,6 +936,7 @@ void LLPanelObject::getState( ) | |||
877 | size_is_hole = TRUE; | 936 | size_is_hole = TRUE; |
878 | skew_visible = TRUE; | 937 | skew_visible = TRUE; |
879 | advanced_cut_visible = TRUE; | 938 | advanced_cut_visible = TRUE; |
939 | advanced_is_slice = FALSE; | ||
880 | taper_visible = TRUE; | 940 | taper_visible = TRUE; |
881 | radius_offset_visible = TRUE; | 941 | radius_offset_visible = TRUE; |
882 | revolutions_visible = TRUE; | 942 | revolutions_visible = TRUE; |
@@ -931,6 +991,8 @@ void LLPanelObject::getState( ) | |||
931 | case MI_RING: | 991 | case MI_RING: |
932 | mSpinScaleX->set( scale_x ); | 992 | mSpinScaleX->set( scale_x ); |
933 | mSpinScaleY->set( scale_y ); | 993 | mSpinScaleY->set( scale_y ); |
994 | calcp->setVar(LLCalc::X_HOLE, scale_x); | ||
995 | calcp->setVar(LLCalc::Y_HOLE, scale_y); | ||
934 | mSpinScaleX->setMinValue(OBJECT_MIN_HOLE_SIZE); | 996 | mSpinScaleX->setMinValue(OBJECT_MIN_HOLE_SIZE); |
935 | mSpinScaleX->setMaxValue(OBJECT_MAX_HOLE_SIZE_X); | 997 | mSpinScaleX->setMaxValue(OBJECT_MAX_HOLE_SIZE_X); |
936 | mSpinScaleY->setMinValue(OBJECT_MIN_HOLE_SIZE); | 998 | mSpinScaleY->setMinValue(OBJECT_MIN_HOLE_SIZE); |
@@ -945,6 +1007,14 @@ void LLPanelObject::getState( ) | |||
945 | mSpinScaleX->setMaxValue(1.f); | 1007 | mSpinScaleX->setMaxValue(1.f); |
946 | mSpinScaleY->setMinValue(-1.f); | 1008 | mSpinScaleY->setMinValue(-1.f); |
947 | mSpinScaleY->setMaxValue(1.f); | 1009 | mSpinScaleY->setMaxValue(1.f); |
1010 | |||
1011 | // Torus' Hole Size is Box/Cyl/Prism's Taper | ||
1012 | calcp->setVar(LLCalc::X_TAPER, 1.f - scale_x); | ||
1013 | calcp->setVar(LLCalc::Y_TAPER, 1.f - scale_y); | ||
1014 | |||
1015 | // Box/Cyl/Prism have no hole size | ||
1016 | calcp->setVar(LLCalc::X_HOLE, 0.f); | ||
1017 | calcp->setVar(LLCalc::Y_HOLE, 0.f); | ||
948 | } | 1018 | } |
949 | break; | 1019 | break; |
950 | } | 1020 | } |
@@ -1155,7 +1225,7 @@ void LLPanelObject::getState( ) | |||
1155 | mSculptTextureRevert = LLUUID::null; | 1225 | mSculptTextureRevert = LLUUID::null; |
1156 | } | 1226 | } |
1157 | 1227 | ||
1158 | 1228 | ||
1159 | //---------------------------------------------------------------------------- | 1229 | //---------------------------------------------------------------------------- |
1160 | 1230 | ||
1161 | mObject = objectp; | 1231 | mObject = objectp; |
@@ -1920,6 +1990,8 @@ void LLPanelObject::clearCtrls() | |||
1920 | childSetEnabled("advanced_cut", FALSE); | 1990 | childSetEnabled("advanced_cut", FALSE); |
1921 | childSetEnabled("advanced_dimple", FALSE); | 1991 | childSetEnabled("advanced_dimple", FALSE); |
1922 | childSetVisible("advanced_slice", FALSE); | 1992 | childSetVisible("advanced_slice", FALSE); |
1993 | |||
1994 | childSetEnabled("build_math_constants",false); | ||
1923 | } | 1995 | } |
1924 | 1996 | ||
1925 | // | 1997 | // |
@@ -1961,6 +2033,9 @@ void LLPanelObject::onCommitRotation( LLUICtrl* ctrl, void* userdata ) | |||
1961 | LLPanelObject* self = (LLPanelObject*) userdata; | 2033 | LLPanelObject* self = (LLPanelObject*) userdata; |
1962 | BOOL btn_down = ((LLSpinCtrl*)ctrl)->isMouseHeldDown() ; | 2034 | BOOL btn_down = ((LLSpinCtrl*)ctrl)->isMouseHeldDown() ; |
1963 | self->sendRotation(btn_down); | 2035 | self->sendRotation(btn_down); |
2036 | |||
2037 | // Needed to ensure all rotations are shown consistently in range | ||
2038 | self->refresh(); | ||
1964 | } | 2039 | } |
1965 | 2040 | ||
1966 | // static | 2041 | // static |
@@ -2055,3 +2130,9 @@ void LLPanelObject::onCommitSculptType(LLUICtrl *ctrl, void* userdata) | |||
2055 | 2130 | ||
2056 | self->sendSculpt(); | 2131 | self->sendSculpt(); |
2057 | } | 2132 | } |
2133 | |||
2134 | // static | ||
2135 | void LLPanelObject::onClickBuildConstants(void *) | ||
2136 | { | ||
2137 | LLNotifications::instance().add("ClickBuildConstants"); | ||
2138 | } | ||