aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorArmin Weatherwax2010-08-23 17:24:07 +0200
committerMcCabe Maxsted2010-08-28 05:01:18 -0700
commit8cbb7451e6e88bcf4dfb67f900089720c71f8f28 (patch)
tree35e5e3646f881ab9020d0d91ab483e2d9148cc4f
parentAdded grid info to the title bar along with usernames when allow multiple ins... (diff)
downloadmeta-impy-8cbb7451e6e88bcf4dfb67f900089720c71f8f28.zip
meta-impy-8cbb7451e6e88bcf4dfb67f900089720c71f8f28.tar.gz
meta-impy-8cbb7451e6e88bcf4dfb67f900089720c71f8f28.tar.bz2
meta-impy-8cbb7451e6e88bcf4dfb67f900089720c71f8f28.tar.xz
Emerald: copy/paste buttons for prim pos/rot/scale in panelobject
-rw-r--r--linden/indra/newview/llpanelobject.cpp237
-rw-r--r--linden/indra/newview/llpanelobject.h30
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_tools.xml30
3 files changed, 297 insertions, 0 deletions
diff --git a/linden/indra/newview/llpanelobject.cpp b/linden/indra/newview/llpanelobject.cpp
index 9ef7f91..1a9d8bf 100644
--- a/linden/indra/newview/llpanelobject.cpp
+++ b/linden/indra/newview/llpanelobject.cpp
@@ -106,6 +106,10 @@ enum {
106 MI_HOLE_COUNT 106 MI_HOLE_COUNT
107}; 107};
108 108
109LLVector3 LLPanelObject::mClipboardPos;
110LLVector3 LLPanelObject::mClipboardSize;
111LLVector3 LLPanelObject::mClipboardRot;
112
109//*TODO:translate (depricated, so very low priority) 113//*TODO:translate (depricated, so very low priority)
110static const std::string LEGACY_FULLBRIGHT_DESC("Fullbright (Legacy)"); 114static const std::string LEGACY_FULLBRIGHT_DESC("Fullbright (Legacy)");
111 115
@@ -167,6 +171,27 @@ BOOL LLPanelObject::postBuild()
167 mCtrlRotZ = getChild<LLSpinCtrl>("Rot Z"); 171 mCtrlRotZ = getChild<LLSpinCtrl>("Rot Z");
168 childSetCommitCallback("Rot Z",onCommitRotation,this); 172 childSetCommitCallback("Rot Z",onCommitRotation,this);
169 173
174 mBtnCopyPos = getChild<LLButton>("copypos");
175 childSetAction("copypos",onCopyPos, this);
176 mBtnPastePos = getChild<LLButton>("pastepos");
177 childSetAction("pastepos",onPastePos, this);
178 mBtnPastePosClip = getChild<LLButton>("pasteposclip");
179 childSetAction("pasteposclip",onPastePosClip, this);
180
181 mBtnCopySize = getChild<LLButton>("copysize");
182 childSetAction("copysize",onCopySize, this);
183 mBtnPasteSize = getChild<LLButton>("pastesize");
184 childSetAction("pastesize",onPasteSize, this);
185 mBtnPasteSizeClip = getChild<LLButton>("pastesizeclip");
186 childSetAction("pastesizeclip",onPasteSizeClip, this);
187
188 mBtnCopyRot = getChild<LLButton>("copyrot");
189 childSetAction("copyrot",onCopyRot, this);
190 mBtnPasteRot = getChild<LLButton>("pasterot");
191 childSetAction("pasterot",onPasteRot, this);
192 mBtnPasteRotClip = getChild<LLButton>("pasterotclip");
193 childSetAction("pasterotclip",onPasteRotClip, this);
194
170 //-------------------------------------------------------- 195 //--------------------------------------------------------
171 196
172 // material type popup 197 // material type popup
@@ -427,6 +452,9 @@ void LLPanelObject::getState( )
427 mCtrlPosX->setEnabled(enable_move); 452 mCtrlPosX->setEnabled(enable_move);
428 mCtrlPosY->setEnabled(enable_move); 453 mCtrlPosY->setEnabled(enable_move);
429 mCtrlPosZ->setEnabled(enable_move); 454 mCtrlPosZ->setEnabled(enable_move);
455 mBtnCopyPos->setEnabled(enable_move);
456 mBtnPastePos->setEnabled(enable_move);
457 mBtnPastePosClip->setEnabled(enable_move);
430 458
431 mCtrlPosZ->setMaxValue(gHippoLimits->getMaxHeight()); 459 mCtrlPosZ->setMaxValue(gHippoLimits->getMaxHeight());
432 460
@@ -454,6 +482,9 @@ void LLPanelObject::getState( )
454 mCtrlScaleX->setEnabled( enable_scale ); 482 mCtrlScaleX->setEnabled( enable_scale );
455 mCtrlScaleY->setEnabled( enable_scale ); 483 mCtrlScaleY->setEnabled( enable_scale );
456 mCtrlScaleZ->setEnabled( enable_scale ); 484 mCtrlScaleZ->setEnabled( enable_scale );
485 mBtnCopySize->setEnabled( enable_scale );
486 mBtnPasteSize->setEnabled( enable_scale );
487 mBtnPasteSizeClip->setEnabled( enable_scale );
457 488
458 LLQuaternion object_rot = objectp->getRotationEdit(); 489 LLQuaternion object_rot = objectp->getRotationEdit();
459 object_rot.getEulerAngles(&(mCurEulerDegrees.mV[VX]), &(mCurEulerDegrees.mV[VY]), &(mCurEulerDegrees.mV[VZ])); 490 object_rot.getEulerAngles(&(mCurEulerDegrees.mV[VX]), &(mCurEulerDegrees.mV[VY]), &(mCurEulerDegrees.mV[VZ]));
@@ -485,6 +516,9 @@ void LLPanelObject::getState( )
485 mCtrlRotX->setEnabled( enable_rotate ); 516 mCtrlRotX->setEnabled( enable_rotate );
486 mCtrlRotY->setEnabled( enable_rotate ); 517 mCtrlRotY->setEnabled( enable_rotate );
487 mCtrlRotZ->setEnabled( enable_rotate ); 518 mCtrlRotZ->setEnabled( enable_rotate );
519 mBtnCopyRot->setEnabled( enable_rotate );
520 mBtnPasteRot->setEnabled( enable_rotate );
521 mBtnPasteRotClip->setEnabled( enable_rotate );
488 522
489 BOOL owners_identical; 523 BOOL owners_identical;
490 LLUUID owner_id; 524 LLUUID owner_id;
@@ -2140,3 +2174,206 @@ void LLPanelObject::onClickBuildConstants(void *)
2140{ 2174{
2141 LLNotifications::instance().add("ClickBuildConstants"); 2175 LLNotifications::instance().add("ClickBuildConstants");
2142} 2176}
2177
2178std::string shortfloat(F32 in)
2179{
2180 std::string out = llformat("%f", in);
2181 int i = out.size();
2182 while(out[--i] == '0') out.erase(i, 1);
2183 return out;
2184}
2185
2186void LLPanelObject::onCopyPos(void* user_data)
2187{
2188 LLPanelObject* self = (LLPanelObject*) user_data;
2189 LLVector3 newpos(self->mCtrlPosX->get(), self->mCtrlPosY->get(), self->mCtrlPosZ->get());
2190 self->mClipboardPos = newpos;
2191
2192 std::string stringVec = "<";
2193 stringVec.append(shortfloat(newpos.mV[VX]));
2194 stringVec.append(", ");
2195 stringVec.append(shortfloat(newpos.mV[VY]));
2196 stringVec.append(", ");
2197 stringVec.append(shortfloat(newpos.mV[VZ]));
2198 stringVec.append(">");
2199
2200 gViewerWindow->mWindow->copyTextToClipboard(utf8str_to_wstring(stringVec));
2201}
2202
2203void LLPanelObject::onCopySize(void* user_data)
2204{
2205 LLPanelObject* self = (LLPanelObject*) user_data;
2206 LLVector3 newpos(self->mCtrlScaleX->get(), self->mCtrlScaleY->get(), self->mCtrlScaleZ->get());
2207 self->mClipboardSize = newpos;
2208
2209 std::string stringVec = "<";
2210 stringVec.append(shortfloat(newpos.mV[VX]));
2211 stringVec.append(", ");
2212 stringVec.append(shortfloat(newpos.mV[VY]));
2213 stringVec.append(", ");
2214 stringVec.append(shortfloat(newpos.mV[VZ]));
2215 stringVec.append(">");
2216
2217 gViewerWindow->mWindow->copyTextToClipboard(utf8str_to_wstring(stringVec));
2218}
2219
2220void LLPanelObject::onCopyRot(void* user_data)
2221{
2222 LLPanelObject* self = (LLPanelObject*) user_data;
2223 LLVector3 newpos(self->mCtrlRotX->get(), self->mCtrlRotY->get(), self->mCtrlRotZ->get());
2224 self->mClipboardRot = newpos;
2225
2226 std::string stringVec = "<";
2227 stringVec.append(shortfloat(newpos.mV[VX]));
2228 stringVec.append(", ");
2229 stringVec.append(shortfloat(newpos.mV[VY]));
2230 stringVec.append(", ");
2231 stringVec.append(shortfloat(newpos.mV[VZ]));
2232 stringVec.append(">");
2233
2234 gViewerWindow->mWindow->copyTextToClipboard(utf8str_to_wstring(stringVec));
2235}
2236
2237
2238
2239void LLPanelObject::onPastePos(void* user_data)
2240{
2241 if(mClipboardPos.isNull()) return;
2242
2243 LLPanelObject* self = (LLPanelObject*) user_data;
2244 LLCalc* calcp = LLCalc::getInstance();
2245 mClipboardPos.mV[VX] = llclamp( mClipboardPos.mV[VX], 0.f, 256.f);
2246 mClipboardPos.mV[VY] = llclamp( mClipboardPos.mV[VY], 0.f, 256.f);
2247 mClipboardPos.mV[VZ] = llclamp( mClipboardPos.mV[VZ], 0.f, 4096.f);
2248
2249 self->mCtrlPosX->set( mClipboardPos.mV[VX] );
2250 self->mCtrlPosY->set( mClipboardPos.mV[VY] );
2251 self->mCtrlPosZ->set( mClipboardPos.mV[VZ] );
2252
2253 calcp->setVar(LLCalc::X_POS, mClipboardPos.mV[VX]);
2254 calcp->setVar(LLCalc::Y_POS, mClipboardPos.mV[VY]);
2255 calcp->setVar(LLCalc::Z_POS, mClipboardPos.mV[VZ]);
2256 self->sendPosition(FALSE);
2257}
2258
2259void LLPanelObject::onPasteSize(void* user_data)
2260{
2261 if(mClipboardSize.isNull()) return;
2262
2263 LLPanelObject* self = (LLPanelObject*) user_data;
2264 LLCalc* calcp = LLCalc::getInstance();
2265 mClipboardSize.mV[VX] = llclamp(mClipboardSize.mV[VX], 0.01f, 10.f);
2266 mClipboardSize.mV[VY] = llclamp(mClipboardSize.mV[VY], 0.01f, 10.f);
2267 mClipboardSize.mV[VZ] = llclamp(mClipboardSize.mV[VZ], 0.01f, 10.f);
2268
2269 self->mCtrlScaleX->set( mClipboardSize.mV[VX] );
2270 self->mCtrlScaleY->set( mClipboardSize.mV[VY] );
2271 self->mCtrlScaleZ->set( mClipboardSize.mV[VZ] );
2272
2273 calcp->setVar(LLCalc::X_SCALE, mClipboardSize.mV[VX]);
2274 calcp->setVar(LLCalc::Y_SCALE, mClipboardSize.mV[VY]);
2275 calcp->setVar(LLCalc::Z_SCALE, mClipboardSize.mV[VZ]);
2276 self->sendScale(FALSE);
2277}
2278
2279void LLPanelObject::onPasteRot(void* user_data)
2280{
2281 LLPanelObject* self = (LLPanelObject*) user_data;
2282 LLCalc* calcp = LLCalc::getInstance();
2283
2284 self->mCtrlRotX->set( mClipboardRot.mV[VX] );
2285 self->mCtrlRotY->set( mClipboardRot.mV[VY] );
2286 self->mCtrlRotZ->set( mClipboardRot.mV[VZ] );
2287
2288 calcp->setVar(LLCalc::X_ROT, mClipboardRot.mV[VX]);
2289 calcp->setVar(LLCalc::Y_ROT, mClipboardRot.mV[VY]);
2290 calcp->setVar(LLCalc::Z_ROT, mClipboardRot.mV[VZ]);
2291 self->sendRotation(FALSE);
2292}
2293
2294BOOL getvectorfromclip(const std::string& buf, LLVector3* value)
2295{
2296 if( buf.empty() || value == NULL)
2297 {
2298 return FALSE;
2299 }
2300
2301 LLVector3 v;
2302 S32 count = sscanf( buf.c_str(), "<%f, %f, %f>", v.mV + 0, v.mV + 1, v.mV + 2 );
2303 if( 3 == count )
2304 {
2305 value->setVec( v );
2306 return TRUE;
2307 }
2308
2309 return FALSE;
2310}
2311
2312
2313void LLPanelObject::onPastePosClip(void* user_data)
2314{
2315 LLPanelObject* self = (LLPanelObject*) user_data;
2316 LLCalc* calcp = LLCalc::getInstance();
2317
2318 LLWString temp_string;
2319 LLView::getWindow()->pasteTextFromClipboard(temp_string);
2320
2321 std::string stringVec = wstring_to_utf8str(temp_string);
2322 if(!getvectorfromclip(stringVec, &mClipboardPos)) return;
2323
2324 mClipboardPos.mV[VX] = llclamp(mClipboardPos.mV[VX], 0.f, 256.f);
2325 mClipboardPos.mV[VY] = llclamp(mClipboardPos.mV[VY], 0.f, 256.f);
2326 mClipboardPos.mV[VZ] = llclamp(mClipboardPos.mV[VZ], 0.f, 4096.f);
2327
2328 self->mCtrlPosX->set( mClipboardPos.mV[VX] );
2329 self->mCtrlPosY->set( mClipboardPos.mV[VY] );
2330 self->mCtrlPosZ->set( mClipboardPos.mV[VZ] );
2331 calcp->setVar(LLCalc::X_POS, mClipboardPos.mV[VX]);
2332 calcp->setVar(LLCalc::Y_POS, mClipboardPos.mV[VY]);
2333 calcp->setVar(LLCalc::Z_POS, mClipboardPos.mV[VZ]);
2334 self->sendPosition(FALSE);
2335}
2336
2337void LLPanelObject::onPasteSizeClip(void* user_data)
2338{
2339 LLPanelObject* self = (LLPanelObject*) user_data;
2340 LLCalc* calcp = LLCalc::getInstance();
2341
2342 LLWString temp_string;
2343 LLView::getWindow()->pasteTextFromClipboard(temp_string);
2344
2345 std::string stringVec = wstring_to_utf8str(temp_string);
2346 if(!getvectorfromclip(stringVec, &mClipboardSize)) return;
2347
2348 mClipboardSize.mV[VX] = llclamp(mClipboardSize.mV[VX], 0.01f, 10.f);
2349 mClipboardSize.mV[VY] = llclamp(mClipboardSize.mV[VY], 0.01f, 10.f);
2350 mClipboardSize.mV[VZ] = llclamp(mClipboardSize.mV[VZ], 0.01f, 10.f);
2351
2352 self->mCtrlScaleX->set( mClipboardSize.mV[VX] );
2353 self->mCtrlScaleY->set( mClipboardSize.mV[VY] );
2354 self->mCtrlScaleZ->set( mClipboardSize.mV[VZ] );
2355 calcp->setVar(LLCalc::X_SCALE, mClipboardSize.mV[VX]);
2356 calcp->setVar(LLCalc::Y_SCALE, mClipboardSize.mV[VY]);
2357 calcp->setVar(LLCalc::Z_SCALE, mClipboardSize.mV[VZ]);
2358 self->sendScale(FALSE);
2359}
2360
2361void LLPanelObject::onPasteRotClip(void* user_data)
2362{
2363 LLPanelObject* self = (LLPanelObject*) user_data;
2364 LLCalc* calcp = LLCalc::getInstance();
2365
2366 LLWString temp_string;
2367 LLView::getWindow()->pasteTextFromClipboard(temp_string);
2368
2369 std::string stringVec = wstring_to_utf8str(temp_string);
2370 if(!getvectorfromclip(stringVec, &mClipboardRot)) return;
2371
2372 self->mCtrlRotX->set( mClipboardRot.mV[VX] );
2373 self->mCtrlRotY->set( mClipboardRot.mV[VY] );
2374 self->mCtrlRotZ->set( mClipboardRot.mV[VZ] );
2375 calcp->setVar(LLCalc::X_ROT, mClipboardRot.mV[VX]);
2376 calcp->setVar(LLCalc::Y_ROT, mClipboardRot.mV[VY]);
2377 calcp->setVar(LLCalc::Z_ROT, mClipboardRot.mV[VZ]);
2378 self->sendRotation(FALSE);
2379 }
diff --git a/linden/indra/newview/llpanelobject.h b/linden/indra/newview/llpanelobject.h
index 2aa5ae1..f86eb46 100644
--- a/linden/indra/newview/llpanelobject.h
+++ b/linden/indra/newview/llpanelobject.h
@@ -74,6 +74,16 @@ public:
74 static void onCommitPhantom( LLUICtrl* ctrl, void* userdata); 74 static void onCommitPhantom( LLUICtrl* ctrl, void* userdata);
75 static void onCommitCastShadows( LLUICtrl* ctrl, void* userdata); 75 static void onCommitCastShadows( LLUICtrl* ctrl, void* userdata);
76 76
77 static void onCopyPos( void* user_data);
78 static void onPastePos( void* user_data);
79 static void onPastePosClip( void* user_data);
80 static void onCopySize( void* user_data);
81 static void onPasteSize( void* user_data);
82 static void onPasteSizeClip( void* user_data);
83 static void onCopyRot( void* user_data);
84 static void onPasteRot( void* user_data);
85 static void onPasteRotClip( void* user_data);
86
77 static void onCommitParametric(LLUICtrl* ctrl, void* userdata); 87 static void onCommitParametric(LLUICtrl* ctrl, void* userdata);
78 88
79 static void onCommitMaterial( LLUICtrl* ctrl, void* userdata); 89 static void onCommitMaterial( LLUICtrl* ctrl, void* userdata);
@@ -101,6 +111,11 @@ protected:
101 void getVolumeParams(LLVolumeParams& volume_params); 111 void getVolumeParams(LLVolumeParams& volume_params);
102 112
103protected: 113protected:
114
115 static LLVector3 mClipboardPos;
116 static LLVector3 mClipboardSize;
117 static LLVector3 mClipboardRot;
118
104 S32 mComboMaterialItemCount; 119 S32 mComboMaterialItemCount;
105 120
106 LLTextBox* mLabelMaterial; 121 LLTextBox* mLabelMaterial;
@@ -163,6 +178,21 @@ protected:
163 LLSpinCtrl* mCtrlRotY; 178 LLSpinCtrl* mCtrlRotY;
164 LLSpinCtrl* mCtrlRotZ; 179 LLSpinCtrl* mCtrlRotZ;
165 180
181 LLButton *mBtnCopyPos;
182 LLButton *mBtnPastePos;
183 LLButton *mBtnPastePosClip;
184
185 LLButton *mBtnCopySize;
186 LLButton *mBtnPasteSize;
187 LLButton *mBtnPasteSizeClip;
188
189 LLButton *mBtnCopyRot;
190 LLButton *mBtnPasteRot;
191 LLButton *mBtnPasteRotClip;
192
193 LLButton *mBtnCopyParams;
194 LLButton *mBtnPasteParams;
195
166 LLCheckBoxCtrl *mCheckLock; 196 LLCheckBoxCtrl *mCheckLock;
167 LLCheckBoxCtrl *mCheckPhysics; 197 LLCheckBoxCtrl *mCheckPhysics;
168 LLCheckBoxCtrl *mCheckTemporary; 198 LLCheckBoxCtrl *mCheckTemporary;
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml b/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml
index a82e308..58c6443 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml
@@ -645,6 +645,16 @@
645 increment="0.01" initial_val="0" label="Z" label_width="10" left="10" 645 increment="0.01" initial_val="0" label="Z" label_width="10" left="10"
646 max_val="4096" min_val="0" mouse_opaque="true" name="Pos Z" 646 max_val="4096" min_val="0" mouse_opaque="true" name="Pos Z"
647 text_enabled_color="0, 67, 132, 255" width="96" /> 647 text_enabled_color="0, 67, 132, 255" width="96" />
648 <button bottom_delta="36" follows="top|right" font="SansSerifSmall" halign="center"
649 height="18" label="C" left_delta="90" mouse_opaque="true" name="copypos" enabled="true"
650 tool_tip="Copy Position" width="20" />
651 <button bottom_delta="-18" follows="top|right" font="SansSerifSmall" halign="center"
652 height="18" label="P" left_delta="0" mouse_opaque="true" name="pastepos" enabled="true"
653 tool_tip="Paste Position" width="20" />
654 <button bottom_delta="-18" follows="top|right" font="SansSerifSmall" halign="center"
655 height="18" label="p" left_delta="0" mouse_opaque="true" name="pasteposclip" enabled="true"
656 tool_tip="Paste Position from Clipboard" width="20" />
657
648 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 658 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
649 bottom_delta="-16" drop_shadow_visible="true" follows="left|top" 659 bottom_delta="-16" drop_shadow_visible="true" follows="left|top"
650 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10" 660 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10"
@@ -663,6 +673,16 @@
663 increment="0.01" initial_val="0" label="Z" label_width="10" left="10" 673 increment="0.01" initial_val="0" label="Z" label_width="10" left="10"
664 mouse_opaque="true" name="Scale Z" 674 mouse_opaque="true" name="Scale Z"
665 text_enabled_color="1, 1, 1, 1" width="96" /> 675 text_enabled_color="1, 1, 1, 1" width="96" />
676 <button bottom_delta="36" follows="top|right" font="SansSerifSmall" halign="center"
677 height="18" label="C" left_delta="90" mouse_opaque="true" name="copysize" enabled="true"
678 tool_tip="Copy Size" width="20" />
679 <button bottom_delta="-18" follows="top|right" font="SansSerifSmall" halign="center"
680 height="18" label="P" left_delta="0" mouse_opaque="true" name="pastesize" enabled="true"
681 tool_tip="Paste Size" width="20" />
682 <button bottom_delta="-18" follows="top|right" font="SansSerifSmall" halign="center"
683 height="18" label="p" left_delta="0" mouse_opaque="true" name="pastesizeclip" enabled="true"
684 tool_tip="Paste Size from Clipboard" width="20" />
685
666 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 686 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
667 bottom_delta="-16" drop_shadow_visible="true" follows="left|top" 687 bottom_delta="-16" drop_shadow_visible="true" follows="left|top"
668 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10" 688 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10"
@@ -681,6 +701,16 @@
681 increment="1" initial_val="0" label="Z" label_width="10" left="10" 701 increment="1" initial_val="0" label="Z" label_width="10" left="10"
682 max_val="9999" min_val="-9999" mouse_opaque="true" name="Rot Z" 702 max_val="9999" min_val="-9999" mouse_opaque="true" name="Rot Z"
683 text_enabled_color="1, 1, 1, 1" width="96" /> 703 text_enabled_color="1, 1, 1, 1" width="96" />
704 <button bottom_delta="36" follows="top|right" font="SansSerifSmall" halign="center"
705 height="18" label="C" left_delta="90" mouse_opaque="true" name="copyrot" enabled="true"
706 tool_tip="Copy Rotation" width="20" />
707 <button bottom_delta="-18" follows="top|right" font="SansSerifSmall" halign="center"
708 height="18" label="P" left_delta="0" mouse_opaque="true" name="pasterot" enabled="true"
709 tool_tip="Paste Rotation" width="20" />
710 <button bottom_delta="-18" follows="top|right" font="SansSerifSmall" halign="center"
711 height="18" label="p" left_delta="0" mouse_opaque="true" name="pasterotclip" enabled="true"
712 tool_tip="Paste Rotation from Clipboard" width="20" />
713
684 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 714 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
685 bottom_delta="-16" drop_shadow_visible="true" follows="left|top" 715 bottom_delta="-16" drop_shadow_visible="true" follows="left|top"
686 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10" 716 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10"