merge from viewer-2-0

master
Tofu Linden 2010-03-10 10:31:41 +00:00
commit 8229fdd490
136 changed files with 1734 additions and 847 deletions

View File

@ -592,7 +592,7 @@ LLAudioBuffer * LLAudioEngine::getFreeBuffer()
if (buffer_id >= 0)
{
llinfos << "Taking over unused buffer " << buffer_id << llendl;
lldebugs << "Taking over unused buffer " << buffer_id << llendl;
//llinfos << "Flushing unused buffer!" << llendl;
mBuffers[buffer_id]->mAudioDatap->mBufferp = NULL;
delete mBuffers[buffer_id];

View File

@ -775,33 +775,6 @@ void LLMemoryInfo::stream(std::ostream& s) const
#endif
}
S32 LLDisplayInfo::getDisplayWidth() const
{
#if LL_WINDOWS
return ::GetSystemMetrics(SM_CXVIRTUALSCREEN);
#elif LL_DARWIN
return 1024; //*FIXME
#elif LL_SOLARIS
return 1024; //*FIXME
#else
return 1024; //*FIXME
#endif
}
S32 LLDisplayInfo::getDisplayHeight() const
{
#if LL_WINDOWS
return ::GetSystemMetrics(SM_CYVIRTUALSCREEN);
#elif LL_DARWIN
return 768; //*FIXME
#elif LL_SOLARIS
return 768; //*FIXME
#else
return 768; //*FIXME
#endif
}
std::ostream& operator<<(std::ostream& s, const LLOSInfo& info)
{
info.stream(s);

View File

@ -122,22 +122,6 @@ public:
U32 getPhysicalMemoryClamped() const; ///< Memory size in clamped bytes
};
//=============================================================================
//
// CLASS LLDisplayInfo
class LL_COMMON_API LLDisplayInfo
/*! @brief Class to query the information about some display settings
*/
{
public:
LLDisplayInfo(){}; ///< Default constructor
S32 getDisplayWidth() const; ///< display width
S32 getDisplayHeight() const; ///< display height
};
LL_COMMON_API std::ostream& operator<<(std::ostream& s, const LLOSInfo& info);
LL_COMMON_API std::ostream& operator<<(std::ostream& s, const LLCPUInfo& info);
LL_COMMON_API std::ostream& operator<<(std::ostream& s, const LLMemoryInfo& info);

View File

@ -323,15 +323,19 @@ void LLComboBox::setValue(const LLSD& value)
LLScrollListItem* item = mList->getFirstSelected();
if (item)
{
setLabel( mList->getSelectedItemLabel() );
setLabel(getSelectedItemLabel());
}
mLastSelectedIndex = mList->getFirstSelectedIndex();
}
else
{
mLastSelectedIndex = -1;
}
}
const std::string LLComboBox::getSimple() const
{
const std::string res = mList->getSelectedItemLabel();
const std::string res = getSelectedItemLabel();
if (res.empty() && mAllowTextEntry)
{
return mTextEntry->getText();
@ -410,7 +414,7 @@ BOOL LLComboBox::remove(S32 index)
if (index < mList->getItemCount())
{
mList->deleteSingleItem(index);
setLabel(mList->getSelectedItemLabel());
setLabel(getSelectedItemLabel());
return TRUE;
}
return FALSE;
@ -451,7 +455,7 @@ BOOL LLComboBox::setCurrentByIndex( S32 index )
BOOL found = mList->selectNthItem( index );
if (found)
{
setLabel(mList->getSelectedItemLabel());
setLabel(getSelectedItemLabel());
mLastSelectedIndex = index;
}
return found;
@ -904,7 +908,7 @@ void LLComboBox::updateSelection()
}
else if (mList->selectItemByPrefix(left_wstring, FALSE))
{
LLWString selected_item = utf8str_to_wstring(mList->getSelectedItemLabel());
LLWString selected_item = utf8str_to_wstring(getSelectedItemLabel());
LLWString wtext = left_wstring + selected_item.substr(left_wstring.size(), selected_item.size());
mTextEntry->setText(wstring_to_utf8str(wtext));
mTextEntry->setSelection(left_wstring.size(), mTextEntry->getWText().size());
@ -1006,7 +1010,7 @@ BOOL LLComboBox::setCurrentByID(const LLUUID& id)
if (found)
{
setLabel(mList->getSelectedItemLabel());
setLabel(getSelectedItemLabel());
mLastSelectedIndex = mList->getFirstSelectedIndex();
}
@ -1022,7 +1026,7 @@ BOOL LLComboBox::setSelectedByValue(const LLSD& value, BOOL selected)
BOOL found = mList->setSelectedByValue(value, selected);
if (found)
{
setLabel(mList->getSelectedItemLabel());
setLabel(getSelectedItemLabel());
}
return found;
}
@ -1084,10 +1088,19 @@ void LLIconsComboBox::setValue(const LLSD& value)
LLScrollListItem* item = mList->getFirstSelected();
if (item)
{
mButton->setImageOverlay(mList->getSelectedItemLabel(mIconColumnIndex), mButton->getImageOverlayHAlign());
setLabel(mList->getSelectedItemLabel(mLabelColumnIndex));
setLabel(getSelectedItemLabel());
}
mLastSelectedIndex = mList->getFirstSelectedIndex();
}
else
{
mLastSelectedIndex = -1;
}
}
const std::string LLIconsComboBox::getSelectedItemLabel(S32 column) const
{
mButton->setImageOverlay(LLComboBox::getSelectedItemLabel(mIconColumnIndex), mButton->getImageOverlayHAlign());
return LLComboBox::getSelectedItemLabel(mLabelColumnIndex);
}

View File

@ -150,7 +150,7 @@ public:
// Get name of current item. Returns an empty string if not found.
const std::string getSimple() const;
// Get contents of column x of selected row
const std::string getSelectedItemLabel(S32 column = 0) const;
virtual const std::string getSelectedItemLabel(S32 column = 0) const;
// Sets the label, which doesn't have to exist in the label.
// This is probably a UI abuse.
@ -248,6 +248,7 @@ public:
};
/*virtual*/ void setValue(const LLSD& value);
/*virtual*/ const std::string getSelectedItemLabel(S32 column = 0) const;
private:
enum EColumnIndex

View File

@ -492,6 +492,12 @@ void LLFlatListView::onItemMouseClick(item_pair_t* item_pair, MASK mask)
{
if (!item_pair) return;
if (!item_pair->first)
{
llwarning("Attempt to selet an item pair containing null panel item", 0);
return;
}
setFocus(TRUE);
bool select_item = !isSelected(item_pair);

View File

@ -407,3 +407,30 @@ BOOL LLWindowManager::isWindowValid(LLWindow *window)
{
return sWindowList.find(window) != sWindowList.end();
}
S32 LLDisplayInfo::getDisplayWidth() const
{
#if LL_WINDOWS
return LLWindowWin32::getDisplayWidth();
#elif LL_DARWIN
return LLWindowMacOSX::getDisplayWidth();
#elif LL_SDL
return LLWindowSDL::getDisplayWidth();
#else
return 1024; //*FIXME
#endif
}
S32 LLDisplayInfo::getDisplayHeight() const
{
#if LL_WINDOWS
return LLWindowWin32::getDisplayHeight();
#elif LL_DARWIN
return LLWindowMacOSX::getDisplayHeight();
#elif LL_SDL
return LLWindowSDL::getDisplayHeight();
#else
return 768; //*FIXME
#endif
}

View File

@ -281,4 +281,19 @@ extern const std::string gURLProtocolWhitelistHandler[];
void simpleEscapeString ( std::string& stringIn );
//=============================================================================
//
// CLASS LLDisplayInfo
class LLDisplayInfo
/*! @brief Class to query the information about some display settings
*/
{
public:
LLDisplayInfo(){}; ///< Default constructor
S32 getDisplayWidth() const; ///< display width
S32 getDisplayHeight() const; ///< display height
};
#endif // _LL_window_h_

View File

@ -40,4 +40,5 @@ void setupCocoa();
CursorRef createImageCursor(const char *fullpath, int hotspotX, int hotspotY);
OSErr releaseImageCursor(CursorRef ref);
OSErr setImageCursor(CursorRef ref);
void getScreenSize(int* width, int* height);
void getVisibleScreen(int *x, int *y, int* width, int* height);

View File

@ -116,3 +116,22 @@ OSErr setImageCursor(CursorRef ref)
return noErr;
}
void getScreenSize(int* width, int* height)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSRect screen_rect = [[NSScreen mainScreen] frame];
if (width) *width = (int)(screen_rect.size.width);
if (height) *height = (int)(screen_rect.size.height);
[pool release];
}
void getVisibleScreen(int *x, int *y, int* width, int* height)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSRect visible_rect = [[NSScreen mainScreen] visibleFrame];
if (width) *width = (int)(visible_rect.size.width);
if (height) *height = (int)(visible_rect.size.height);
if (x) *x = (int)(visible_rect.origin.x);
if (y) *y = (int)(visible_rect.origin.y);
[pool release];
}

View File

@ -1122,7 +1122,33 @@ BOOL LLWindowMacOSX::getMaximized()
BOOL LLWindowMacOSX::maximize()
{
// TODO
if (mWindow)
{
// *HACK: Because Mac OSX doesn't have a concept of a "maximized" window, we just
// stretch it out to the visible screen size.
Rect win_rect;
int visible_x;
int visible_y;
int visible_width;
int visible_height;
int screen_width;
int screen_height;
getScreenSize(&screen_width, &screen_height);
getVisibleScreen(&visible_x, &visible_y, &visible_width, &visible_height);
int mac_os_menu_bar_height = screen_height - (visible_height + visible_y);
::SetRect(&win_rect,
visible_x,
mac_os_menu_bar_height,
visible_width + visible_x,
visible_height + mac_os_menu_bar_height);
::SetWindowBounds(mWindow, kWindowStructureRgn, &win_rect);
return TRUE;
}
return FALSE;
}
@ -3464,6 +3490,26 @@ MASK LLWindowMacOSX::modifiersToMask(SInt16 modifiers)
return mask;
}
// static
S32 LLWindowMacOSX::getDisplayWidth()
{
S32 width = 1024;
// Need to invoke cocoa before use getScreenSize()
setupCocoa();
getScreenSize(&width, NULL);
return width;
}
// static
S32 LLWindowMacOSX::getDisplayHeight()
{
S32 height = 768;
// Need to invoke cocoa before use getScreenSize()
setupCocoa();
getScreenSize(NULL, &height);
return height;
}
#if LL_OS_DRAGDROP_ENABLED
OSErr LLWindowMacOSX::dragTrackingHandler(DragTrackingMessage message, WindowRef theWindow,

View File

@ -123,6 +123,8 @@ public:
// Provide native key event data
/*virtual*/ LLSD getNativeKeyData();
static S32 getDisplayWidth();
static S32 getDisplayHeight();
protected:
LLWindowMacOSX(LLWindowCallbacks* callbacks,

View File

@ -187,6 +187,47 @@ Display* LLWindowSDL::get_SDL_Display(void)
}
#endif // LL_X11
// static
S32 LLWindowSDL::getDisplayWidth()
{
#if LL_GTK
if (LLWindowSDL::ll_try_gtk_init())
{
return gdk_screen_width();
}
#endif // LL_GTK
#if LL_X11
Display *display = XOpenDisplay(NULL);
int screen_num = DefaultScreen(display);
S32 width = DisplayWidth(display, screen_num);
XCloseDisplay(display);
return width;
#endif //LL_X11
return 1024;
}
// static
S32 LLWindowSDL::getDisplayHeight()
{
#if LL_GTK
if (LLWindowSDL::ll_try_gtk_init())
{
return gdk_screen_height();
}
#endif // LL_GTK
#if LL_X11
Display *display = XOpenDisplay(NULL);
int screen_num = DefaultScreen(display);
S32 height = DisplayHeight(display, screen_num);
XCloseDisplay(display);
return height;
#endif //LL_X11
return 768;
}
LLWindowSDL::LLWindowSDL(LLWindowCallbacks* callbacks,
const std::string& title, S32 x, S32 y, S32 width,
@ -909,7 +950,68 @@ BOOL LLWindowSDL::getMaximized()
if (mWindow)
{
// TODO
#if LL_X11
if (mSDL_Display)
{
maybe_lock_display();
// Return data in the specified format, XA_ATOM.
U8* prop;
// Actual format of the property.
int format;
// Actual number of items stored in the prop return data.
unsigned long nitems;
// Number of bytes remaining to be read in the property if a partial read was performed.
unsigned long bytes_after;
// Atom identifier that defines the actual type of the property.
Atom type;
// Atom used to obtain list of hints describing the window state.
Atom wm_state = XInternAtom(mSDL_Display, "_NET_WM_STATE", False);
// Atoms indicates that the window is vertically/horizontally maximized.
Atom max_vert = XInternAtom(mSDL_Display, "_NET_WM_STATE_MAXIMIZED_VERT", False);
Atom max_horz = XInternAtom(mSDL_Display, "_NET_WM_STATE_MAXIMIZED_HORZ", False);
// How many atoms in which we interested are present in list of hints.
U32 pass = 0;
do
{
nitems = 0;
bytes_after = 0;
type = None;
if ( (XGetWindowProperty (mSDL_Display,
mSDL_XWindowID,
wm_state,
0, UINT_MAX,
False, XA_ATOM,
&type, &format,
&nitems, &bytes_after,
&prop) == Success)
&& type != None )
{
Atom *atoms = (Atom *)prop;
for (unsigned long i=0; i<nitems; ++i)
{
if (atoms[i] == max_horz)
++pass;
else if (atoms[i] == max_vert)
++pass;
}
XFree (atoms);
}
else
{
break;
}
} while (bytes_after > 0);
result = (pass == 2);
maybe_unlock_display();
}
#endif // LL_X11
}
return(result);
@ -917,7 +1019,103 @@ BOOL LLWindowSDL::getMaximized()
BOOL LLWindowSDL::maximize()
{
// TODO
#if LL_X11
if (mSDL_Display && !mFullscreen)
{
maybe_lock_display();
BOOL is_maximize_allowed = FALSE;
// Check if maximize is allowed
{
// Return data in the specified format, XA_ATOM.
U8* prop;
// Actual format of the property.
int format;
// Actual number of items stored in the prop return data.
unsigned long nitems;
// Number of bytes remaining to be read in the property if a partial read was performed.
unsigned long bytes_after;
// Atom identifier that defines the actual type of the property.
Atom type;
// Atom used to obtain a list of atoms indicating user operations that the Window Manager supports for this window.
Atom allowed_act = XInternAtom(mSDL_Display, "_NET_WM_ALLOWED_ACTIONS", False);
// Atoms that indicates that the window may be vertically/horizontally maximized.
Atom max_vert_act = XInternAtom(mSDL_Display, "_NET_WM_ACTION_MAXIMIZE_HORZ", False);
Atom max_horz_act = XInternAtom(mSDL_Display, "_NET_WM_ACTION_MAXIMIZE_VERT", False);
// How many atoms in which we interested are present in list of hints.
U32 pass = 0;
do
{
nitems = 0;
bytes_after = 0;
type = None;
if ( (XGetWindowProperty (mSDL_Display,
mSDL_XWindowID,
allowed_act,
0, UINT_MAX,
False, XA_ATOM,
&type, &format,
&nitems, &bytes_after,
&prop) == Success)
&& type != None )
{
Atom *atoms = (Atom *)prop;
for (unsigned long i=0; i<nitems; ++i)
{
if (atoms[i] == max_vert_act)
++pass;
else if (atoms[i] == max_horz_act)
++pass;
}
XFree (atoms);
}
else
{
break;
}
} while (bytes_after > 0);
is_maximize_allowed = (pass == 2);
}
// Send maximize event to X11 system
if (is_maximize_allowed)
{
XEvent xev;
// Atom describing the window state.
Atom wm_state = XInternAtom(mSDL_Display, "_NET_WM_STATE", False);
// Atoms indicates that the window is vertically/horizontally maximized.
Atom max_vert = XInternAtom(mSDL_Display, "_NET_WM_STATE_MAXIMIZED_VERT", False);
Atom max_horz = XInternAtom(mSDL_Display, "_NET_WM_STATE_MAXIMIZED_HORZ", False);
memset(&xev, 0, sizeof(xev));
xev.type = ClientMessage;
xev.xclient.window = mSDL_XWindowID;
xev.xclient.message_type = wm_state;
xev.xclient.format = 32;
xev.xclient.data.l[0] = 1; // add/set property
xev.xclient.data.l[1] = max_vert;
xev.xclient.data.l[2] = max_horz;
xev.xclient.data.l[3] = 0;
xev.xclient.data.l[4] = 0;
XSendEvent(mSDL_Display,
DefaultRootWindow(mSDL_Display),
False,
SubstructureNotifyMask, &xev);
}
maybe_unlock_display();
return is_maximize_allowed;
}
#endif // LL_X11
return FALSE;
}

View File

@ -148,6 +148,9 @@ public:
static Display* get_SDL_Display(void);
#endif // LL_X11
static S32 getDisplayWidth();
static S32 getDisplayHeight();
protected:
LLWindowSDL(LLWindowCallbacks* callbacks,
const std::string& title, int x, int y, int width, int height, U32 flags,

View File

@ -3714,5 +3714,16 @@ std::vector<std::string> LLWindowWin32::getDynamicFallbackFontList()
return std::vector<std::string>();
}
// static
S32 LLWindowWin32::getDisplayWidth()
{
return ::GetSystemMetrics(SM_CXVIRTUALSCREEN);
}
// static
S32 LLWindowWin32::getDisplayHeight()
{
return ::GetSystemMetrics(SM_CYVIRTUALSCREEN);
}
#endif // LL_WINDOWS

View File

@ -120,6 +120,9 @@ public:
static std::vector<std::string> getDynamicFallbackFontList();
static S32 getDisplayWidth();
static S32 getDisplayHeight();
protected:
LLWindowWin32(LLWindowCallbacks* callbacks,
const std::string& title, const std::string& name, int x, int y, int width, int height, U32 flags,

View File

@ -494,11 +494,12 @@ bool LLWearableHoldingPattern::pollFetchCompletion()
bool completed = isFetchCompleted();
bool timed_out = isTimedOut();
bool done = completed || timed_out;
llinfos << "polling, done status: " << completed << " timed out " << timed_out << " elapsed " << mWaitTime.getElapsedTimeF32() << llendl;
if (done)
{
llinfos << "polling, done status: " << completed << " timed out " << timed_out
<< " elapsed " << mWaitTime.getElapsedTimeF32() << llendl;
mFired = true;
if (timed_out)

View File

@ -307,7 +307,7 @@ static std::string gLaunchFileOnQuit;
// Used on Win32 for other apps to identify our window (eg, win_setup)
const char* const VIEWER_WINDOW_CLASSNAME = "Second Life";
static const S32 FIRST_RUN_WINDOW_WIDTH = 1024;
static const S32 FIRST_RUN_WINDOW_HRIGHT = 768;
static const S32 FIRST_RUN_WINDOW_HIGHT = 768;
//----------------------------------------------------------------------------
// List of entries from strings.xml to always replace
@ -2407,12 +2407,12 @@ bool LLAppViewer::initWindow()
if (first_run)//for first login
{
window_width = FIRST_RUN_WINDOW_WIDTH;//yep hardcoded
window_height = FIRST_RUN_WINDOW_HRIGHT;
window_height = FIRST_RUN_WINDOW_HIGHT;
//if screen resolution is lower then 1024*768 then show maximized
LLDisplayInfo display_info;
if(display_info.getDisplayWidth() <= FIRST_RUN_WINDOW_WIDTH
|| display_info.getDisplayHeight()<=FIRST_RUN_WINDOW_HRIGHT)
|| display_info.getDisplayHeight()<=FIRST_RUN_WINDOW_HIGHT)
{
show_maximized = true;
}

View File

@ -86,6 +86,7 @@
static std::string OWNER_ONLINE = "0";
static std::string OWNER_OFFLINE = "1";
static std::string OWNER_GROUP = "2";
static std::string MATURITY = "[MATURITY]";
// constants used in callbacks below - syntactic sugar.
static const BOOL BUY_GROUP_LAND = TRUE;
@ -102,6 +103,22 @@ public:
virtual void changed() { LLFloaterLand::refreshAll(); }
};
// class needed to get full access to textbox inside checkbox, because LLCheckBoxCtrl::setLabel() has string as its argument.
// It was introduced while implementing EXT-4706
class LLCheckBoxWithTBAcess : public LLCheckBoxCtrl
{
public:
LLTextBox* getTextBox()
{
return mLabel;
}
};
// inserts maturity info(icon and text) into target textbox
// names_floater - pointer to floater which contains strings with maturity icons filenames
// str_to_parse is string in format "txt1[MATURITY]txt2" where maturity icon and text will be inserted instead of [MATURITY]
void insert_maturity_into_textbox(LLTextBox* target_textbox, LLFloater* names_floater, std::string str_to_parse);
//---------------------------------------------------------------------------
// LLFloaterLand
//---------------------------------------------------------------------------
@ -554,7 +571,7 @@ void LLPanelLandGeneral::refresh()
if (regionp)
{
mContentRating->setText(regionp->getSimAccessString());
insert_maturity_into_textbox(mContentRating, gFloaterView->getParentFloater(this), MATURITY);
mLandType->setText(regionp->getSimProductName());
}
@ -2058,8 +2075,14 @@ void LLPanelLandOptions::refresh()
{
// not teen so fill in the data for the maturity control
mMatureCtrl->setVisible(TRUE);
mMatureCtrl->setLabel(getString("mature_check_mature"));
mMatureCtrl->setToolTip(getString("mature_check_mature_tooltip"));
LLStyle::Params style;
style.image(LLUI::getUIImage(gFloaterView->getParentFloater(this)->getString("maturity_icon_moderate")));
LLCheckBoxWithTBAcess* fullaccess_mature_ctrl = (LLCheckBoxWithTBAcess*)mMatureCtrl;
fullaccess_mature_ctrl->getTextBox()->setText(std::string("icon"),style);
fullaccess_mature_ctrl->getTextBox()->appendText(getString("mature_check_mature"), false);
fullaccess_mature_ctrl->setToolTip(getString("mature_check_mature_tooltip"));
fullaccess_mature_ctrl->reshape(fullaccess_mature_ctrl->getRect().getWidth(), fullaccess_mature_ctrl->getRect().getHeight(), FALSE);
// they can see the checkbox, but its disposition depends on the
// state of the region
LLViewerRegion* regionp = LLViewerParcelMgr::getInstance()->getSelectionRegion();
@ -2460,19 +2483,26 @@ void LLPanelLandAccess::refresh()
}
}
LLCheckBoxWithTBAcess* maturity_checkbox = (LLCheckBoxWithTBAcess*) getChild<LLCheckBoxCtrl>( "public_access");
LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
if(region)
{
std::string region_access = "(";
region_access += region->getSimAccessString();
region_access += ")";
childSetLabelArg( "public_access", "[MATURITY]", region_access );
LLTextBox* maturity_textbox = maturity_checkbox->getTextBox();
insert_maturity_into_textbox(maturity_textbox, gFloaterView->getParentFloater(this), getString("allow_public_access"));
maturity_checkbox->reshape(maturity_checkbox->getRect().getWidth(), maturity_checkbox->getRect().getHeight(), FALSE);
}
else
{
childSetLabelArg( "public_access", "[MATURITY]", std::string() );
}
std::string maturity_string = getString("allow_public_access");
size_t maturity_pos = maturity_string.find(MATURITY);
if (maturity_pos != std::string::npos)
{
maturity_string.replace(maturity_pos, MATURITY.length(), std::string(""));
}
maturity_checkbox->setLabel(maturity_string);
}
if(parcel->getRegionDenyAnonymousOverride())
{
@ -2858,7 +2888,7 @@ void LLPanelLandCovenant::refresh()
LLTextBox* region_maturity = getChild<LLTextBox>("region_maturity_text");
if (region_maturity)
{
region_maturity->setText(region->getSimAccessString());
insert_maturity_into_textbox(region_maturity, gFloaterView->getParentFloater(this), MATURITY);
}
LLTextBox* resellable_clause = getChild<LLTextBox>("resellable_clause");
@ -2939,3 +2969,51 @@ void LLPanelLandCovenant::updateEstateOwnerName(const std::string& name)
if (editor) editor->setText(name);
}
}
// inserts maturity info(icon and text) into target textbox
// names_floater - pointer to floater which contains strings with maturity icons filenames
// str_to_parse is string in format "txt1[MATURITY]txt2" where maturity icon and text will be inserted instead of [MATURITY]
void insert_maturity_into_textbox(LLTextBox* target_textbox, LLFloater* names_floater, std::string str_to_parse)
{
LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
if (!region)
return;
LLStyle::Params style;
U8 sim_access = region->getSimAccess();
switch(sim_access)
{
case SIM_ACCESS_PG:
style.image(LLUI::getUIImage(names_floater->getString("maturity_icon_general")));
break;
case SIM_ACCESS_ADULT:
style.image(LLUI::getUIImage(names_floater->getString("maturity_icon_adult")));
break;
case SIM_ACCESS_MATURE:
style.image(LLUI::getUIImage(names_floater->getString("maturity_icon_moderate")));
break;
default:
break;
}
size_t maturity_pos = str_to_parse.find(MATURITY);
if (maturity_pos == std::string::npos)
{
return;
}
std::string text_before_rating = str_to_parse.substr(0, maturity_pos);
std::string text_after_rating = str_to_parse.substr(maturity_pos + MATURITY.length());
target_textbox->setText(text_before_rating);
// any text may be here instead of "icon" except ""
target_textbox->appendText(std::string("icon"), false, style);
target_textbox->appendText(LLViewerParcelMgr::getInstance()->getSelectionRegion()->getSimAccessString(), false);
target_textbox->appendText(text_after_rating, false);
}

View File

@ -837,11 +837,14 @@ void LLFolderView::sanitizeSelection()
void LLFolderView::clearSelection()
{
if (mSelectedItems.size() > 0)
for (selected_items_t::const_iterator item_it = mSelectedItems.begin();
item_it != mSelectedItems.end();
++item_it)
{
recursiveDeselect(FALSE);
mSelectedItems.clear();
(*item_it)->setUnselected();
}
mSelectedItems.clear();
mSelectThisID.setNull();
}

View File

@ -121,7 +121,6 @@ LLFolderViewItem::LLFolderViewItem(const LLFolderViewItem::Params& p)
mHasVisibleChildren(FALSE),
mIndentation(0),
mItemHeight(p.item_height),
mNumDescendantsSelected(0),
mPassedFilter(FALSE),
mLastFilterGeneration(-1),
mStringMatchOffset(std::string::npos),
@ -497,22 +496,6 @@ BOOL LLFolderViewItem::changeSelection(LLFolderViewItem* selection, BOOL selecte
return FALSE;
}
void LLFolderViewItem::recursiveDeselect(BOOL deselect_self)
{
if (mIsSelected && deselect_self)
{
mIsSelected = FALSE;
// update ancestors' count of selected descendents
LLFolderViewFolder* parent_folder = getParentFolder();
while(parent_folder)
{
parent_folder->mNumDescendantsSelected--;
parent_folder = parent_folder->getParentFolder();
}
}
}
BOOL LLFolderViewItem::isMovable()
{
@ -1459,7 +1442,6 @@ BOOL LLFolderViewFolder::setSelection(LLFolderViewItem* selection, BOOL openitem
{
rv = TRUE;
child_selected = TRUE;
mNumDescendantsSelected++;
}
}
for (items_t::iterator iter = mItems.begin();
@ -1470,7 +1452,6 @@ BOOL LLFolderViewFolder::setSelection(LLFolderViewItem* selection, BOOL openitem
{
rv = TRUE;
child_selected = TRUE;
mNumDescendantsSelected++;
}
}
if(openitem && child_selected)
@ -1503,14 +1484,6 @@ BOOL LLFolderViewFolder::changeSelection(LLFolderViewItem* selection,
folders_t::iterator fit = iter++;
if((*fit)->changeSelection(selection, selected))
{
if (selected)
{
mNumDescendantsSelected++;
}
else
{
mNumDescendantsSelected--;
}
rv = TRUE;
}
}
@ -1520,14 +1493,6 @@ BOOL LLFolderViewFolder::changeSelection(LLFolderViewItem* selection,
items_t::iterator iit = iter++;
if((*iit)->changeSelection(selection, selected))
{
if (selected)
{
mNumDescendantsSelected++;
}
else
{
mNumDescendantsSelected--;
}
rv = TRUE;
}
}
@ -1544,7 +1509,6 @@ S32 LLFolderViewFolder::extendSelection(LLFolderViewItem* selection, LLFolderVie
{
folders_t::iterator fit = iter++;
num_selected += (*fit)->extendSelection(selection, last_selected, selected_items);
mNumDescendantsSelected += num_selected;
}
// handle selection of our immediate children...
@ -1637,7 +1601,6 @@ S32 LLFolderViewFolder::extendSelection(LLFolderViewItem* selection, LLFolderVie
if (item->changeSelection(item, TRUE))
{
selected_items.put(item);
mNumDescendantsSelected++;
num_selected++;
}
}
@ -1648,7 +1611,6 @@ S32 LLFolderViewFolder::extendSelection(LLFolderViewItem* selection, LLFolderVie
if (selection->changeSelection(selection, TRUE))
{
selected_items.put(selection);
mNumDescendantsSelected++;
num_selected++;
}
}
@ -1656,47 +1618,6 @@ S32 LLFolderViewFolder::extendSelection(LLFolderViewItem* selection, LLFolderVie
return num_selected;
}
void LLFolderViewFolder::recursiveDeselect(BOOL deselect_self)
{
// make sure we don't have negative values
llassert(mNumDescendantsSelected >= 0);
if (mIsSelected && deselect_self)
{
mIsSelected = FALSE;
// update ancestors' count of selected descendents
LLFolderViewFolder* parent_folder = getParentFolder();
while(parent_folder)
{
parent_folder->mNumDescendantsSelected--;
parent_folder = parent_folder->getParentFolder();
}
}
if (0 == mNumDescendantsSelected)
{
return;
}
for (items_t::iterator iter = mItems.begin();
iter != mItems.end();)
{
items_t::iterator iit = iter++;
LLFolderViewItem* item = (*iit);
item->recursiveDeselect(TRUE);
}
for (folders_t::iterator iter = mFolders.begin();
iter != mFolders.end();)
{
folders_t::iterator fit = iter++;
LLFolderViewFolder* folder = (*fit);
folder->recursiveDeselect(TRUE);
}
}
void LLFolderViewFolder::destroyView()
{
for (items_t::iterator iter = mItems.begin();
@ -1730,8 +1651,6 @@ BOOL LLFolderViewFolder::removeItem(LLFolderViewItem* item)
{
if(item->remove())
{
//RN: this seem unneccessary as remove() moves to trash
//removeView(item);
return TRUE;
}
return FALSE;
@ -1746,7 +1665,6 @@ void LLFolderViewFolder::removeView(LLFolderViewItem* item)
return;
}
// deselect without traversing hierarchy
item->recursiveDeselect(TRUE);
getRoot()->removeFromSelectionList(item);
extractItem(item);
delete item;

View File

@ -150,7 +150,6 @@ protected:
BOOL mHasVisibleChildren;
S32 mIndentation;
S32 mItemHeight;
S32 mNumDescendantsSelected;
BOOL mPassedFilter;
S32 mLastFilterGeneration;
std::string::size_type mStringMatchOffset;
@ -231,9 +230,6 @@ public:
// this method is used to group select items
virtual S32 extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items){ return FALSE; }
// this method is used to group select items
virtual void recursiveDeselect(BOOL deselect_self);
// gets multiple-element selection
virtual BOOL getSelectionList(std::set<LLUUID> &selection) const {return TRUE;}
@ -246,10 +242,10 @@ public:
// destroys this item recursively
virtual void destroyView();
S32 getNumSelectedDescendants() { return mNumDescendantsSelected; }
BOOL isSelected() { return mIsSelected; }
void setUnselected() { mIsSelected = FALSE; }
void setIsCurSelection(BOOL select) { mIsCurSelection = select; }
BOOL getIsCurSelection() { return mIsCurSelection; }
@ -441,8 +437,6 @@ public:
// this method is used to group select items
virtual S32 extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items);
virtual void recursiveDeselect(BOOL deselect_self);
// Returns true is this object and all of its children can be removed.
virtual BOOL isRemovable();

View File

@ -127,7 +127,7 @@ BOOL LLGroupList::handleRightMouseDown(S32 x, S32 y, MASK mask)
BOOL handled = LLUICtrl::handleRightMouseDown(x, y, mask);
LLMenuGL* context_menu = (LLMenuGL*)mContextMenuHandle.get();
if (context_menu)
if (context_menu && size() > 0)
{
context_menu->buildDrawLabels();
context_menu->updateParent(LLMenuGL::sMenuContainer);

View File

@ -35,6 +35,7 @@
#include "llloginhandler.h"
// viewer includes
#include "lllogininstance.h" // to check if logged in yet
#include "llpanellogin.h" // save_password_to_disk()
#include "llstartup.h" // getStartupState()
#include "llurlsimstring.h"
@ -169,6 +170,13 @@ bool LLLoginHandler::handle(const LLSD& tokens,
const LLSD& query_map,
LLMediaCtrl* web)
{
// do nothing if we are already logged in
if (LLLoginInstance::getInstance()->authSuccess())
{
LL_WARNS_ONCE("SLURL") << "Already logged in! Ignoring login SLapp." << LL_ENDL;
return true;
}
if (tokens.size() == 1
&& tokens[0].asString() == "show")
{

View File

@ -80,8 +80,8 @@ LLMediaCtrl::LLMediaCtrl( const Params& p) :
mForceUpdate( false ),
mOpenLinksInExternalBrowser( false ),
mOpenLinksInInternalBrowser( false ),
mTrusted( false ),
mHomePageUrl( "" ),
mTrusted(false),
mIgnoreUIScale( true ),
mAlwaysRefresh( false ),
mMediaSource( 0 ),
@ -183,6 +183,10 @@ void LLMediaCtrl::setOpenInInternalBrowser( bool valIn )
////////////////////////////////////////////////////////////////////////////////
void LLMediaCtrl::setTrusted( bool valIn )
{
if(mMediaSource)
{
mMediaSource->setTrustedBrowser(valIn);
}
mTrusted = valIn;
}
@ -632,6 +636,7 @@ bool LLMediaCtrl::ensureMediaSourceExists()
mMediaSource->setVisible( getVisible() );
mMediaSource->addObserver( this );
mMediaSource->setBackgroundColor( getBackgroundColor() );
mMediaSource->setTrustedBrowser(mTrusted);
if(mClearCache)
{
mMediaSource->clearCache();
@ -946,7 +951,6 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
case MEDIA_EVENT_CLICK_LINK_NOFOLLOW:
{
LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_CLICK_LINK_NOFOLLOW, uri is " << self->getClickURL() << LL_ENDL;
onClickLinkNoFollow(self);
};
break;
@ -1062,15 +1066,6 @@ void LLMediaCtrl::clickLinkWithTarget(const std::string& url, const S32& target_
}
}
////////////////////////////////////////////////////////////////////////////////
//
void LLMediaCtrl::onClickLinkNoFollow( LLPluginClassMedia* self )
{
// let the dispatcher handle blocking/throttling of SLURLs
std::string url = self->getClickURL();
LLURLDispatcher::dispatch(url, this, mTrusted);
}
////////////////////////////////////////////////////////////////////////////////
//
std::string LLMediaCtrl::getCurrentNavUrl()

View File

@ -164,7 +164,6 @@ public:
// handlers for individual events (could be done inside the switch in handleMediaEvent, they're just individual functions for clarity)
void onClickLinkHref( LLPluginClassMedia* self );
void onClickLinkNoFollow( LLPluginClassMedia* self );
protected:
void convertInputCoords(S32& x, S32& y);

View File

@ -114,6 +114,23 @@ public:
};
static LLDispatchClassifiedClickThrough sClassifiedClickThrough;
// Just to debug errors. Can be thrown away later.
class LLClassifiedClickMessageResponder : public LLHTTPClient::Responder
{
LOG_CLASS(LLClassifiedClickMessageResponder);
public:
// If we get back an error (not found, etc...), handle it here
virtual void errorWithContent(
U32 status,
const std::string& reason,
const LLSD& content)
{
llwarns << "Sending click message failed (" << status << "): [" << reason << "]" << llendl;
llwarns << "Content: [" << content << "]" << llendl;
}
};
/* Re-expose this if we need to have classified ad HTML detail
pages. JC
@ -1237,7 +1254,7 @@ void LLPanelClassifiedInfo::reshape(S32 width, S32 height, BOOL called_from_pare
void LLPanelClassifiedInfo::onOpen(const LLSD& key)
{
LLUUID avatar_id = key["avatar_id"];
LLUUID avatar_id = key["classified_creator_id"];
if(avatar_id.isNull())
{
return;
@ -1255,9 +1272,12 @@ void LLPanelClassifiedInfo::onOpen(const LLSD& key)
scrollToTop();
setClassifiedId(key["classified_id"]);
setClassifiedName(key["name"]);
setDescription(key["desc"]);
setSnapshotId(key["snapshot_id"]);
setClassifiedName(key["classified_name"]);
setDescription(key["classified_desc"]);
setSnapshotId(key["classified_snapshot_id"]);
setFromSearch(key["from_search"]);
llinfos << "Opening classified [" << getClassifiedName() << "] (" << getClassifiedId() << ")" << llendl;
LLAvatarPropertiesProcessor::getInstance()->addObserver(getAvatarId(), this);
LLAvatarPropertiesProcessor::getInstance()->sendClassifiedInfoRequest(getClassifiedId());
@ -1274,6 +1294,10 @@ void LLPanelClassifiedInfo::onOpen(const LLSD& key)
LLHTTPClient::post(url, body, new LLClassifiedStatsResponder(getClassifiedId()));
}
// Update classified click stats.
// *TODO: Should we do this when opening not from search?
sendClickMessage("profile");
setInfoLoaded(false);
}
@ -1289,6 +1313,8 @@ void LLPanelClassifiedInfo::processProperties(void* data, EAvatarProcessorType t
setSnapshotId(c_info->snapshot_id);
setParcelId(c_info->parcel_id);
setPosGlobal(c_info->pos_global);
setSimName(c_info->sim_name);
setClassifiedLocation(createLocationText(c_info->parcel_name, c_info->sim_name, c_info->pos_global));
childSetValue("category", LLClassifiedInfo::sCategories[c_info->category]);
@ -1299,6 +1325,8 @@ void LLPanelClassifiedInfo::processProperties(void* data, EAvatarProcessorType t
bool mature = is_cf_mature(c_info->flags);
childSetValue("content_type", mature ? mature_str : pg_str);
getChild<LLIconCtrl>("content_type_moderate")->setVisible(mature);
getChild<LLIconCtrl>("content_type_general")->setVisible(!mature);
std::string auto_renew_str = is_cf_auto_renew(c_info->flags) ?
getString("auto_renew_on") : getString("auto_renew_off");
@ -1323,7 +1351,19 @@ void LLPanelClassifiedInfo::resetData()
setClassifiedLocation(LLStringUtil::null);
setClassifiedId(LLUUID::null);
setSnapshotId(LLUUID::null);
mPosGlobal.clearVec();
setPosGlobal(LLVector3d::zero);
setParcelId(LLUUID::null);
setSimName(LLStringUtil::null);
setFromSearch(false);
// reset click stats
mTeleportClicksOld = 0;
mMapClicksOld = 0;
mProfileClicksOld = 0;
mTeleportClicksNew = 0;
mMapClicksNew = 0;
mProfileClicksNew = 0;
childSetText("category", LLStringUtil::null);
childSetText("content_type", LLStringUtil::null);
childSetText("click_through_text", LLStringUtil::null);
@ -1331,6 +1371,8 @@ void LLPanelClassifiedInfo::resetData()
childSetText("auto_renew", LLStringUtil::null);
childSetText("creation_date", LLStringUtil::null);
childSetText("click_through_text", LLStringUtil::null);
getChild<LLIconCtrl>("content_type_moderate")->setVisible(FALSE);
getChild<LLIconCtrl>("content_type_general")->setVisible(FALSE);
}
void LLPanelClassifiedInfo::resetControls()
@ -1368,6 +1410,11 @@ void LLPanelClassifiedInfo::setClassifiedLocation(const std::string& location)
childSetValue("classified_location", location);
}
std::string LLPanelClassifiedInfo::getClassifiedLocation()
{
return childGetValue("classified_location").asString();
}
void LLPanelClassifiedInfo::setSnapshotId(const LLUUID& id)
{
mSnapshotCtrl->setValue(id);
@ -1444,6 +1491,13 @@ void LLPanelClassifiedInfo::setClickThrough(
ct_str.setArg("[PROFILE]", llformat("%d", self->mProfileClicksNew + self->mProfileClicksOld));
self->childSetText("click_through_text", ct_str.getString());
// *HACK: remove this when there is enough room for click stats in the info panel
self->childSetToolTip("click_through_text", ct_str.getString());
llinfos << "teleport: " << llformat("%d", self->mTeleportClicksNew + self->mTeleportClicksOld)
<< ", map: " << llformat("%d", self->mMapClicksNew + self->mMapClicksOld)
<< ", profile: " << llformat("%d", self->mProfileClicksNew + self->mProfileClicksOld)
<< llendl;
}
}
@ -1532,8 +1586,46 @@ void LLPanelClassifiedInfo::scrollToTop()
scrollContainer->goToTop();
}
// static
// *TODO: move out of the panel
void LLPanelClassifiedInfo::sendClickMessage(
const std::string& type,
bool from_search,
const LLUUID& classified_id,
const LLUUID& parcel_id,
const LLVector3d& global_pos,
const std::string& sim_name)
{
// You're allowed to click on your own ads to reassure yourself
// that the system is working.
LLSD body;
body["type"] = type;
body["from_search"] = from_search;
body["classified_id"] = classified_id;
body["parcel_id"] = parcel_id;
body["dest_pos_global"] = global_pos.getValue();
body["region_name"] = sim_name;
std::string url = gAgent.getRegion()->getCapability("SearchStatTracking");
llinfos << "Sending click msg via capability (url=" << url << ")" << llendl;
llinfos << "body: [" << body << "]" << llendl;
LLHTTPClient::post(url, body, new LLClassifiedClickMessageResponder());
}
void LLPanelClassifiedInfo::sendClickMessage(const std::string& type)
{
sendClickMessage(
type,
fromSearch(),
getClassifiedId(),
getParcelId(),
getPosGlobal(),
getSimName());
}
void LLPanelClassifiedInfo::onMapClick()
{
sendClickMessage("map");
LLFloaterWorldMap::getInstance()->trackLocation(getPosGlobal());
LLFloaterReg::showInstance("world_map", "center");
}
@ -1542,6 +1634,7 @@ void LLPanelClassifiedInfo::onTeleportClick()
{
if (!getPosGlobal().isExactlyZero())
{
sendClickMessage("teleport");
gAgent.teleportViaLocation(getPosGlobal());
LLFloaterWorldMap::getInstance()->trackLocation(getPosGlobal());
}
@ -1563,6 +1656,7 @@ static const S32 CB_ITEM_PG = 1;
LLPanelClassifiedEdit::LLPanelClassifiedEdit()
: LLPanelClassifiedInfo()
, mIsNew(false)
, mIsNewWithErrors(false)
, mCanClose(false)
, mPublishFloater(NULL)
{
@ -1621,21 +1715,12 @@ BOOL LLPanelClassifiedEdit::postBuild()
return TRUE;
}
void LLPanelClassifiedEdit::onOpen(const LLSD& key)
void LLPanelClassifiedEdit::fillIn(const LLSD& key)
{
LLUUID classified_id = key["classified_id"];
setAvatarId(gAgent.getID());
mIsNew = classified_id.isNull();
scrollToTop();
if(mIsNew)
if(key.isUndefined())
{
setAvatarId(gAgent.getID());
resetData();
resetControls();
setPosGlobal(gAgent.getPositionGlobal());
LLUUID snapshot_id = LLUUID::null;
@ -1658,25 +1743,55 @@ void LLPanelClassifiedEdit::onOpen(const LLSD& key)
childSetValue("classified_name", makeClassifiedName());
childSetValue("classified_desc", desc);
setSnapshotId(snapshot_id);
setClassifiedLocation(createLocationText(getLocationNotice(), region_name, getPosGlobal()));
// server will set valid parcel id
setParcelId(LLUUID::null);
}
else
{
setClassifiedId(key["classified_id"]);
setClassifiedName(key["name"]);
setDescription(key["desc"]);
setSnapshotId(key["snapshot_id"]);
setCategory((U32)key["category"].asInteger());
setContentType((U32)key["content_type"].asInteger());
setClassifiedLocation(key["location_text"]);
childSetValue("auto_renew", key["auto_renew"]);
childSetValue("price_for_listing", key["price_for_listing"].asInteger());
}
}
enableVerbs(true);
enableEditing(true);
void LLPanelClassifiedEdit::onOpen(const LLSD& key)
{
mIsNew = key.isUndefined();
scrollToTop();
// classified is not created yet
bool is_new = isNew() || isNewWithErrors();
if(is_new)
{
resetData();
resetControls();
fillIn(key);
if(isNew())
{
LLAvatarPropertiesProcessor::getInstance()->addObserver(getAvatarId(), this);
}
}
else
{
LLPanelClassifiedInfo::onOpen(key);
enableVerbs(false);
enableEditing(false);
}
std::string save_btn_label = isNew() ? getString("publish_label") : getString("save_label");
std::string save_btn_label = is_new ? getString("publish_label") : getString("save_label");
childSetLabelArg("save_changes_btn", "[LABEL]", save_btn_label);
enableVerbs(is_new);
enableEditing(is_new);
resetDirty();
setInfoLoaded(false);
}
@ -1688,6 +1803,14 @@ void LLPanelClassifiedEdit::processProperties(void* data, EAvatarProcessorType t
LLAvatarClassifiedInfo* c_info = static_cast<LLAvatarClassifiedInfo*>(data);
if(c_info && getClassifiedId() == c_info->classified_id)
{
// see LLPanelClassifiedEdit::sendUpdate() for notes
mIsNewWithErrors = false;
// for just created classified - panel will probably be closed when we get here.
if(!getVisible())
{
return;
}
enableEditing(true);
setClassifiedName(c_info->name);
@ -1697,19 +1820,22 @@ void LLPanelClassifiedEdit::processProperties(void* data, EAvatarProcessorType t
setClassifiedLocation(createLocationText(c_info->parcel_name, c_info->sim_name, c_info->pos_global));
// *HACK see LLPanelClassifiedEdit::sendUpdate()
getChild<LLComboBox>("category")->setCurrentByIndex(c_info->category - 1);
getChild<LLComboBox>("category")->resetDirty();
setCategory(c_info->category - 1);
bool mature = is_cf_mature(c_info->flags);
bool auto_renew = is_cf_auto_renew(c_info->flags);
getChild<LLComboBox>("content_type")->setCurrentByIndex(mature ? CB_ITEM_MATURE : CB_ITEM_PG);
setContentType(mature ? CB_ITEM_MATURE : CB_ITEM_PG);
childSetValue("auto_renew", auto_renew);
childSetValue("price_for_listing", c_info->price_for_listing);
childSetEnabled("price_for_listing", isNew());
resetDirty();
setInfoLoaded(true);
enableVerbs(false);
// for just created classified - in case user opened edit panel before processProperties() callback
childSetLabelArg("save_changes_btn", "[LABEL]", getString("save_label"));
}
}
}
@ -1740,7 +1866,12 @@ void LLPanelClassifiedEdit::resetDirty()
LLPanelClassifiedInfo::resetDirty();
getChild<LLUICtrl>("classified_snapshot")->resetDirty();
getChild<LLUICtrl>("classified_name")->resetDirty();
getChild<LLUICtrl>("classified_desc")->resetDirty();
LLTextEditor* desc = getChild<LLTextEditor>("classified_desc");
// call blockUndo() to really reset dirty(and make isDirty work as intended)
desc->blockUndo();
desc->resetDirty();
getChild<LLUICtrl>("category")->resetDirty();
getChild<LLUICtrl>("content_type")->resetDirty();
getChild<LLUICtrl>("auto_renew")->resetDirty();
@ -1762,7 +1893,7 @@ void LLPanelClassifiedEdit::resetControls()
LLPanelClassifiedInfo::resetControls();
getChild<LLComboBox>("category")->setCurrentByIndex(0);
getChild<LLComboBox>("content_type")->setCurrentByIndex(0);
getChild<LLIconsComboBox>("content_type")->setCurrentByIndex(0);
childSetValue("auto_renew", false);
childSetValue("price_for_listing", MINIMUM_PRICE_FOR_LISTING);
childSetEnabled("price_for_listing", TRUE);
@ -1789,15 +1920,31 @@ void LLPanelClassifiedEdit::stretchSnapshot()
getChild<LLUICtrl>("edit_icon")->setShape(mSnapshotCtrl->getRect());
}
U32 LLPanelClassifiedEdit::getContentType()
{
LLComboBox* ct_cb = getChild<LLComboBox>("content_type");
return ct_cb->getCurrentIndex();
}
void LLPanelClassifiedEdit::setContentType(U32 content_type)
{
LLIconsComboBox* ct_cb = getChild<LLIconsComboBox>("content_type");
ct_cb->setCurrentByIndex(content_type);
ct_cb->resetDirty();
}
bool LLPanelClassifiedEdit::getAutoRenew()
{
return childGetValue("auto_renew").asBoolean();
}
void LLPanelClassifiedEdit::sendUpdate()
{
LLAvatarClassifiedInfo c_data;
if(getClassifiedId().isNull())
{
LLUUID id;
id.generate();
setClassifiedId(id);
setClassifiedId(LLUUID::generateNewID());
}
c_data.agent_id = gAgent.getID();
@ -1814,6 +1961,14 @@ void LLPanelClassifiedEdit::sendUpdate()
c_data.price_for_listing = getPriceForListing();
LLAvatarPropertiesProcessor::getInstance()->sendClassifiedInfoUpdate(&c_data);
if(isNew())
{
// Lets assume there will be some error.
// Successful sendClassifiedInfoUpdate will trigger processProperties and
// let us know there was no error.
mIsNewWithErrors = true;
}
}
U32 LLPanelClassifiedEdit::getCategory()
@ -1822,11 +1977,18 @@ U32 LLPanelClassifiedEdit::getCategory()
return cat_cb->getCurrentIndex();
}
void LLPanelClassifiedEdit::setCategory(U32 category)
{
LLComboBox* cat_cb = getChild<LLComboBox>("category");
cat_cb->setCurrentByIndex(category);
cat_cb->resetDirty();
}
U8 LLPanelClassifiedEdit::getFlags()
{
bool auto_renew = childGetValue("auto_renew").asBoolean();
LLComboBox* content_cb = getChild<LLComboBox>("content_type");
LLComboBox* content_cb = getChild<LLIconsComboBox>("content_type");
bool mature = content_cb->getCurrentIndex() == CB_ITEM_MATURE;
return pack_classified_flags_request(auto_renew, false, mature, false);
@ -1917,17 +2079,14 @@ void LLPanelClassifiedEdit::onSaveClick()
notifyInvalidName();
return;
}
if(isNew())
if(isNew() || isNewWithErrors())
{
if(gStatusBar->getBalance() < getPriceForListing())
{
LLNotificationsUtil::add("ClassifiedInsufficientFunds");
return;
}
}
if(isNew())
{
mPublishFloater = LLFloaterReg::findTypedInstance<LLPublishClassifiedFloater>(
"publish_classified", LLSD());

View File

@ -221,6 +221,7 @@ private:
class LLPanelClassifiedInfo : public LLPanel, public LLAvatarPropertiesObserver
{
LOG_CLASS(LLPanelClassifiedInfo);
public:
static LLPanelClassifiedInfo* create();
@ -255,6 +256,8 @@ public:
void setClassifiedLocation(const std::string& location);
std::string getClassifiedLocation();
void setPosGlobal(const LLVector3d& pos) { mPosGlobal = pos; }
LLVector3d& getPosGlobal() { return mPosGlobal; }
@ -263,6 +266,14 @@ public:
LLUUID getParcelId() { return mParcelId; }
void setSimName(const std::string& sim_name) { mSimName = sim_name; }
std::string getSimName() { return mSimName; }
void setFromSearch(bool val) { mFromSearch = val; }
bool fromSearch() { return mFromSearch; }
bool getInfoLoaded() { return mInfoLoaded; }
void setInfoLoaded(bool loaded) { mInfoLoaded = loaded; }
@ -274,6 +285,14 @@ public:
S32 profile,
bool from_new_table);
static void sendClickMessage(
const std::string& type,
bool from_search,
const LLUUID& classified_id,
const LLUUID& parcel_id,
const LLVector3d& global_pos,
const std::string& sim_name);
void setExitCallback(const commit_callback_t& cb);
void setEditClassifiedCallback(const commit_callback_t& cb);
@ -296,6 +315,7 @@ protected:
const LLVector3d& pos_global);
void stretchSnapshot();
void sendClickMessage(const std::string& type);
LLRect getDefaultSnapshotRect();
@ -315,6 +335,8 @@ private:
LLUUID mClassifiedId;
LLVector3d mPosGlobal;
LLUUID mParcelId;
std::string mSimName;
bool mFromSearch;
bool mInfoLoaded;
LLScrollContainer* mScrollContainer;
@ -337,6 +359,7 @@ private:
class LLPanelClassifiedEdit : public LLPanelClassifiedInfo
{
LOG_CLASS(LLPanelClassifiedEdit);
public:
static LLPanelClassifiedEdit* create();
@ -345,6 +368,8 @@ public:
/*virtual*/ BOOL postBuild();
void fillIn(const LLSD& key);
/*virtual*/ void onOpen(const LLSD& key);
/*virtual*/ void processProperties(void* data, EAvatarProcessorType type);
@ -361,28 +386,38 @@ public:
bool isNew() { return mIsNew; }
bool isNewWithErrors() { return mIsNewWithErrors; }
bool canClose();
void draw();
void stretchSnapshot();
U32 getCategory();
void setCategory(U32 category);
U32 getContentType();
void setContentType(U32 content_type);
bool getAutoRenew();
S32 getPriceForListing();
protected:
LLPanelClassifiedEdit();
void sendUpdate();
U32 getCategory();
void enableVerbs(bool enable);
void enableEditing(bool enable);
std::string makeClassifiedName();
S32 getPriceForListing();
void setPriceForListing(S32 price);
U8 getFlags();
@ -408,6 +443,7 @@ protected:
private:
bool mIsNew;
bool mIsNewWithErrors;
bool mCanClose;
LLPublishClassifiedFloater* mPublishFloater;

View File

@ -770,8 +770,8 @@ BOOL LLTaskCategoryBridge::startDrag(EDragAndDropType* type, LLUUID* id) const
LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
if(object)
{
LLInventoryItem* inv = NULL;
if((inv = (LLInventoryItem*)object->getInventoryObject(mUUID)))
const LLInventoryItem *inv = dynamic_cast<LLInventoryItem*>(object->getInventoryObject(mUUID));
if (inv)
{
const LLPermissions& perm = inv->getPermissions();
bool can_copy = gAgent.allowOperation(PERM_COPY, perm,
@ -1759,7 +1759,7 @@ void LLPanelObjectInventory::updateInventory()
// We're still interested in this task's inventory.
std::set<LLUUID> selected_items;
BOOL inventory_has_focus = FALSE;
if (mHaveInventory && mFolders->getNumSelectedDescendants())
if (mHaveInventory)
{
mFolders->getSelectionList(selected_items);
inventory_has_focus = gFocusMgr.childHasKeyboardFocus(mFolders);

View File

@ -140,10 +140,11 @@ public:
params["open_tab_name"] = "panel_picks";
params["show_tab_panel"] = "classified_details";
params["classified_id"] = c_info->classified_id;
params["classified_avatar_id"] = c_info->creator_id;
params["classified_creator_id"] = c_info->creator_id;
params["classified_snapshot_id"] = c_info->snapshot_id;
params["classified_name"] = c_info->name;
params["classified_desc"] = c_info->description;
params["from_search"] = true;
LLSideTray::getInstance()->showPanel("panel_profile_view", params);
}
@ -174,31 +175,6 @@ LLClassifiedHandler gClassifiedHandler;
//////////////////////////////////////////////////////////////////////////
/**
* Copy&Pasted from old LLPanelClassified. This class does nothing at the moment.
* Subscribing to "classifiedclickthrough" removes a few warnings.
*/
class LLClassifiedClickThrough : public LLDispatchHandler
{
public:
// "classifiedclickthrough"
// strings[0] = classified_id
// strings[1] = teleport_clicks
// strings[2] = map_clicks
// strings[3] = profile_clicks
virtual bool operator()(
const LLDispatcher* dispatcher,
const std::string& key,
const LLUUID& invoice,
const sparam_t& strings)
{
if (strings.size() != 4)
return false;
return true;
}
};
//-----------------------------------------------------------------------------
// LLPanelPicks
@ -216,13 +192,9 @@ LLPanelPicks::LLPanelPicks()
mPicksAccTab(NULL),
mClassifiedsAccTab(NULL),
mPanelClassifiedInfo(NULL),
mPanelClassifiedEdit(NULL),
mClickThroughDisp(NULL),
mNoClassifieds(false),
mNoPicks(false)
{
mClickThroughDisp = new LLClassifiedClickThrough();
gGenericDispatcher.addHandler("classifiedclickthrough", mClickThroughDisp);
}
LLPanelPicks::~LLPanelPicks()
@ -231,8 +203,6 @@ LLPanelPicks::~LLPanelPicks()
{
LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(),this);
}
delete mClickThroughDisp;
}
void* LLPanelPicks::create(void* data /* = NULL */)
@ -414,6 +384,9 @@ BOOL LLPanelPicks::postBuild()
registar.add("Pick.Teleport", boost::bind(&LLPanelPicks::onClickTeleport, this));
registar.add("Pick.Map", boost::bind(&LLPanelPicks::onClickMap, this));
registar.add("Pick.Delete", boost::bind(&LLPanelPicks::onClickDelete, this));
LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registar;
enable_registar.add("Pick.Enable", boost::bind(&LLPanelPicks::onEnableMenuItem, this, _2));
mPopupMenu = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>("menu_picks.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
LLUICtrl::CommitCallbackRegistry::ScopedRegistrar plus_registar;
@ -450,6 +423,22 @@ bool LLPanelPicks::isActionEnabled(const LLSD& userdata) const
return true;
}
bool LLPanelPicks::isClassifiedPublished(LLClassifiedItem* c_item)
{
if(c_item)
{
LLPanelClassifiedEdit* panel = mEditClassifiedPanels[c_item->getClassifiedId()];
if(panel)
{
return !panel->isNewWithErrors();
}
// we've got this classified from server - it's published
return true;
}
return false;
}
void LLPanelPicks::onAccordionStateChanged(const LLAccordionCtrlTab* acc_tab)
{
if(!mPicksAccTab->getDisplayChildren())
@ -607,7 +596,11 @@ void LLPanelPicks::onClickTeleport()
if(pick_item)
pos = pick_item->getPosGlobal();
else if(c_item)
{
pos = c_item->getPosGlobal();
LLPanelClassifiedInfo::sendClickMessage("teleport", false,
c_item->getClassifiedId(), LLUUID::null, pos, LLStringUtil::null);
}
if (!pos.isExactlyZero())
{
@ -626,7 +619,11 @@ void LLPanelPicks::onClickMap()
if (pick_item)
pos = pick_item->getPosGlobal();
else if(c_item)
{
LLPanelClassifiedInfo::sendClickMessage("map", false,
c_item->getClassifiedId(), LLUUID::null, pos, LLStringUtil::null);
pos = c_item->getPosGlobal();
}
LLFloaterWorldMap::getInstance()->trackLocation(pos);
LLFloaterReg::showInstance("world_map", "center");
@ -678,6 +675,12 @@ void LLPanelPicks::updateButtons()
childSetEnabled(XML_BTN_INFO, has_selected);
childSetEnabled(XML_BTN_TELEPORT, has_selected);
childSetEnabled(XML_BTN_SHOW_ON_MAP, has_selected);
LLClassifiedItem* c_item = dynamic_cast<LLClassifiedItem*>(mClassifiedsList->getSelectedItem());
if(c_item)
{
childSetEnabled(XML_BTN_INFO, isClassifiedPublished(c_item));
}
}
void LLPanelPicks::setProfilePanel(LLPanelProfile* profile_panel)
@ -714,9 +717,10 @@ void LLPanelPicks::createNewPick()
void LLPanelPicks::createNewClassified()
{
createClassifiedEditPanel();
LLPanelClassifiedEdit* panel = NULL;
createClassifiedEditPanel(&panel);
getProfilePanel()->openPanel(mPanelClassifiedEdit, LLSD());
getProfilePanel()->openPanel(panel, LLSD());
}
void LLPanelPicks::onClickInfo()
@ -756,26 +760,20 @@ void LLPanelPicks::openClassifiedInfo()
if (selected_value.isUndefined()) return;
LLClassifiedItem* c_item = getSelectedClassifiedItem();
LLSD params;
params["classified_id"] = c_item->getClassifiedId();
params["classified_creator_id"] = c_item->getAvatarId();
params["classified_snapshot_id"] = c_item->getSnapshotId();
params["classified_name"] = c_item->getClassifiedName();
params["classified_desc"] = c_item->getDescription();
params["from_search"] = false;
openClassifiedInfo(c_item->getClassifiedId(), c_item->getAvatarId(),
c_item->getSnapshotId(), c_item->getClassifiedName(),
c_item->getDescription());
openClassifiedInfo(params);
}
void LLPanelPicks::openClassifiedInfo(const LLUUID &classified_id,
const LLUUID &avatar_id,
const LLUUID &snapshot_id,
const std::string &name, const std::string &desc)
void LLPanelPicks::openClassifiedInfo(const LLSD &params)
{
createClassifiedInfoPanel();
LLSD params;
params["classified_id"] = classified_id;
params["avatar_id"] = avatar_id;
params["snapshot_id"] = snapshot_id;
params["name"] = name;
params["desc"] = desc;
getProfilePanel()->openPanel(mPanelClassifiedInfo, params);
}
@ -807,11 +805,10 @@ void LLPanelPicks::onPanelClassifiedSave(LLPanelClassifiedEdit* panel)
if(panel->isNew())
{
mEditClassifiedPanels[panel->getClassifiedId()] = panel;
LLClassifiedItem* c_item = new LLClassifiedItem(getAvatarId(), panel->getClassifiedId());
c_item->setClassifiedName(panel->getClassifiedName());
c_item->setDescription(panel->getDescription());
c_item->setSnapshotId(panel->getSnapshotId());
c_item->fillIn(panel);
LLSD c_value;
c_value.insert(CLASSIFIED_ID, c_item->getClassifiedId());
@ -827,6 +824,11 @@ void LLPanelPicks::onPanelClassifiedSave(LLPanelClassifiedEdit* panel)
mClassifiedsAccTab->changeOpenClose(false);
showAccordion("tab_classifieds", true);
}
else if(panel->isNewWithErrors())
{
LLClassifiedItem* c_item = dynamic_cast<LLClassifiedItem*>(mClassifiedsList->getSelectedItem());
c_item->fillIn(panel);
}
else
{
onPanelClassifiedClose(panel);
@ -887,15 +889,16 @@ void LLPanelPicks::createClassifiedInfoPanel()
}
}
void LLPanelPicks::createClassifiedEditPanel()
void LLPanelPicks::createClassifiedEditPanel(LLPanelClassifiedEdit** panel)
{
if(!mPanelClassifiedEdit)
if(panel)
{
mPanelClassifiedEdit = LLPanelClassifiedEdit::create();
mPanelClassifiedEdit->setExitCallback(boost::bind(&LLPanelPicks::onPanelClassifiedClose, this, mPanelClassifiedEdit));
mPanelClassifiedEdit->setSaveCallback(boost::bind(&LLPanelPicks::onPanelClassifiedSave, this, mPanelClassifiedEdit));
mPanelClassifiedEdit->setCancelCallback(boost::bind(&LLPanelPicks::onPanelClassifiedClose, this, mPanelClassifiedEdit));
mPanelClassifiedEdit->setVisible(FALSE);
LLPanelClassifiedEdit* new_panel = LLPanelClassifiedEdit::create();
new_panel->setExitCallback(boost::bind(&LLPanelPicks::onPanelClassifiedClose, this, new_panel));
new_panel->setSaveCallback(boost::bind(&LLPanelPicks::onPanelClassifiedSave, this, new_panel));
new_panel->setCancelCallback(boost::bind(&LLPanelPicks::onPanelClassifiedClose, this, new_panel));
new_panel->setVisible(FALSE);
*panel = new_panel;
}
}
@ -968,16 +971,26 @@ void LLPanelPicks::onPanelClassifiedEdit()
LLClassifiedItem* c_item = dynamic_cast<LLClassifiedItem*>(mClassifiedsList->getSelectedItem());
createClassifiedEditPanel();
LLSD params;
params["classified_id"] = c_item->getClassifiedId();
params["avatar_id"] = c_item->getAvatarId();
params["classified_creator_id"] = c_item->getAvatarId();
params["snapshot_id"] = c_item->getSnapshotId();
params["name"] = c_item->getClassifiedName();
params["desc"] = c_item->getDescription();
params["category"] = (S32)c_item->getCategory();
params["content_type"] = (S32)c_item->getContentType();
params["auto_renew"] = c_item->getAutoRenew();
params["price_for_listing"] = c_item->getPriceForListing();
params["location_text"] = c_item->getLocationText();
getProfilePanel()->openPanel(mPanelClassifiedEdit, params);
LLPanelClassifiedEdit* panel = mEditClassifiedPanels[c_item->getClassifiedId()];
if(!panel)
{
createClassifiedEditPanel(&panel);
mEditClassifiedPanels[c_item->getClassifiedId()] = panel;
}
getProfilePanel()->openPanel(panel, params);
panel->setPosGlobal(c_item->getPosGlobal());
}
void LLPanelPicks::onClickMenuEdit()
@ -992,6 +1005,20 @@ void LLPanelPicks::onClickMenuEdit()
}
}
bool LLPanelPicks::onEnableMenuItem(const LLSD& user_data)
{
std::string param = user_data.asString();
LLClassifiedItem* c_item = dynamic_cast<LLClassifiedItem*>(mClassifiedsList->getSelectedItem());
if(c_item && "info" == param)
{
// dont show Info panel if classified was not created
return isClassifiedPublished(c_item);
}
return true;
}
inline LLPanelProfile* LLPanelPicks::getProfilePanel()
{
llassert_always(NULL != mProfilePanel);
@ -1180,6 +1207,24 @@ void LLClassifiedItem::setValue(const LLSD& value)
childSetVisible("selected_icon", value["selected"]);
}
void LLClassifiedItem::fillIn(LLPanelClassifiedEdit* panel)
{
if(!panel)
{
return;
}
setClassifiedName(panel->getClassifiedName());
setDescription(panel->getDescription());
setSnapshotId(panel->getSnapshotId());
setCategory(panel->getCategory());
setContentType(panel->getContentType());
setAutoRenew(panel->getAutoRenew());
setPriceForListing(panel->getPriceForListing());
setPosGlobal(panel->getPosGlobal());
setLocationText(panel->getClassifiedLocation());
}
void LLClassifiedItem::setClassifiedName(const std::string& name)
{
childSetValue("name", name);

View File

@ -55,7 +55,6 @@ class LLPanelPickEdit;
class LLToggleableMenu;
class LLPanelClassifiedInfo;
class LLPanelClassifiedEdit;
class LLClassifiedClickThrough;
// *TODO
// Panel Picks has been consolidated with Classifieds (EXT-2095), give LLPanelPicks
@ -99,6 +98,8 @@ private:
void onPlusMenuItemClicked(const LLSD& param);
bool isActionEnabled(const LLSD& userdata) const;
bool isClassifiedPublished(LLClassifiedItem* c_item);
void onListCommit(const LLFlatListView* f_list);
void onAccordionStateChanged(const LLAccordionCtrlTab* acc_tab);
@ -115,14 +116,14 @@ private:
void onPanelClassifiedEdit();
void onClickMenuEdit();
bool onEnableMenuItem(const LLSD& user_data);
void createNewPick();
void createNewClassified();
void openPickInfo();
void openClassifiedInfo();
void openClassifiedInfo(const LLUUID &classified_id, const LLUUID &avatar_id,
const LLUUID &snapshot_id, const std::string &name,
const std::string &desc);
void openClassifiedInfo(const LLSD& params);
friend class LLPanelProfile;
void showAccordion(const std::string& name, bool show);
@ -143,7 +144,7 @@ private:
void createPickInfoPanel();
void createPickEditPanel();
void createClassifiedInfoPanel();
void createClassifiedEditPanel();
void createClassifiedEditPanel(LLPanelClassifiedEdit** panel);
LLMenuGL* mPopupMenu;
LLPanelProfile* mProfilePanel;
@ -152,15 +153,19 @@ private:
LLFlatListView* mClassifiedsList;
LLPanelPickInfo* mPanelPickInfo;
LLPanelClassifiedInfo* mPanelClassifiedInfo;
LLPanelClassifiedEdit* mPanelClassifiedEdit;
LLPanelPickEdit* mPanelPickEdit;
LLToggleableMenu* mPlusMenu;
// <classified_id, edit_panel>
typedef std::map<LLUUID, LLPanelClassifiedEdit*> panel_classified_edit_map_t;
// This map is needed for newly created classifieds. The purpose of panel is to
// sit in this map and listen to LLPanelClassifiedEdit::processProperties callback.
panel_classified_edit_map_t mEditClassifiedPanels;
LLAccordionCtrlTab* mPicksAccTab;
LLAccordionCtrlTab* mClassifiedsAccTab;
LLClassifiedClickThrough* mClickThroughDisp;
//true if picks list is empty after processing picks
bool mNoPicks;
//true if classifieds list is empty after processing classifieds
@ -250,6 +255,8 @@ public:
/*virtual*/ void setValue(const LLSD& value);
void fillIn(LLPanelClassifiedEdit* panel);
LLUUID getAvatarId() {return mAvatarId;}
void setAvatarId(const LLUUID& avatar_id) {mAvatarId = avatar_id;}
@ -260,7 +267,11 @@ public:
void setPosGlobal(const LLVector3d& pos) { mPosGlobal = pos; }
const LLVector3d& getPosGlobal() { return mPosGlobal; }
const LLVector3d getPosGlobal() { return mPosGlobal; }
void setLocationText(const std::string location) { mLocationText = location; }
std::string getLocationText() { return mLocationText; }
void setClassifiedName (const std::string& name);
@ -274,10 +285,31 @@ public:
LLUUID getSnapshotId();
void setCategory(U32 cat) { mCategory = cat; }
U32 getCategory() { return mCategory; }
void setContentType(U32 ct) { mContentType = ct; }
U32 getContentType() { return mContentType; }
void setAutoRenew(U32 renew) { mAutoRenew = renew; }
bool getAutoRenew() { return mAutoRenew; }
void setPriceForListing(S32 price) { mPriceForListing = price; }
S32 getPriceForListing() { return mPriceForListing; }
private:
LLUUID mAvatarId;
LLUUID mClassifiedId;
LLVector3d mPosGlobal;
std::string mLocationText;
U32 mCategory;
U32 mContentType;
bool mAutoRenew;
S32 mPriceForListing;
};
#endif // LL_LLPANELPICKS_H

View File

@ -171,15 +171,13 @@ void LLPanelProfile::onOpen(const LLSD& key)
}
else if (panel == "classified_details")
{
LLUUID classified_id = key["classified_id"].asUUID();
LLUUID avatar_id = key["classified_avatar_id"].asUUID();
LLUUID snapshot_id = key["classified_snapshot_id"].asUUID();
std::string name = key["classified_name"].asString();
std::string desc = key["classified_desc"].asString();
LLPanelPicks* picks = dynamic_cast<LLPanelPicks *>(getTabContainer()[PANEL_PICKS]);
if (picks)
{
picks->openClassifiedInfo(classified_id, avatar_id, snapshot_id, name, desc);
LLSD params = key;
params.erase("show_tab_panel");
params.erase("open_tab_name");
picks->openClassifiedInfo(params);
}
}
}

View File

@ -220,10 +220,6 @@ void LLPopupView::removePopup(LLView* popup)
{
if (popup)
{
if (gFocusMgr.childHasKeyboardFocus(popup))
{
gFocusMgr.setKeyboardFocus(NULL);
}
popup_list_t::iterator iter = std::find(mPopups.begin(), mPopups.end(), popup->getHandle());
if(iter != mPopups.end())
{

View File

@ -154,14 +154,17 @@ void LLScriptFloater::createForm(const LLUUID& notification_id)
}
// create new form
mScriptForm = new LLToastNotifyPanel(notification);
LLRect toast_rect = getRect();
// LLToastNotifyPanel will fit own content in vertical direction,
// but it needs an initial rect to properly calculate its width
// Use an initial rect of the script floater to make the floater window more configurable.
mScriptForm = new LLToastNotifyPanel(notification, toast_rect);
addChild(mScriptForm);
// position form on floater
mScriptForm->setOrigin(0, 0);
// make floater size fit form size
LLRect toast_rect = getRect();
LLRect panel_rect = mScriptForm->getRect();
toast_rect.setLeftTopAndSize(toast_rect.mLeft, toast_rect.mTop, panel_rect.getWidth(), panel_rect.getHeight() + getHeaderHeight());
setShape(toast_rect);

View File

@ -751,6 +751,7 @@ LLTextureCache::LLTextureCache(bool threaded)
LLTextureCache::~LLTextureCache()
{
clearDeleteList() ;
writeUpdatedEntries() ;
}
//////////////////////////////////////////////////////////////////////////////
@ -758,6 +759,9 @@ LLTextureCache::~LLTextureCache()
//virtual
S32 LLTextureCache::update(U32 max_time_ms)
{
static LLFrameTimer timer ;
static const F32 MAX_TIME_INTERVAL = 300.f ; //seconds.
S32 res;
res = LLWorkerThread::update(max_time_ms);
@ -793,6 +797,12 @@ S32 LLTextureCache::update(U32 max_time_ms)
responder->completed(success);
}
if(!res && timer.getElapsedTimeF32() > MAX_TIME_INTERVAL)
{
timer.reset() ;
writeUpdatedEntries() ;
}
return res;
}
@ -1083,6 +1093,8 @@ S32 LLTextureCache::openAndReadEntry(const LLUUID& id, Entry& entry, bool create
entry.init(id, time(NULL));
// Update Header
writeEntriesHeader();
//the new entry, write immediately.
// Write Entry
S32 offset = sizeof(EntriesInfo) + idx * sizeof(Entry);
LLAPRFile* aprfile = openHeaderEntriesFile(false, offset);
@ -1098,12 +1110,20 @@ S32 LLTextureCache::openAndReadEntry(const LLUUID& id, Entry& entry, bool create
// Remove this entry from the LRU if it exists
mLRU.erase(id);
// Read the entry
S32 offset = sizeof(EntriesInfo) + idx * sizeof(Entry);
LLAPRFile* aprfile = openHeaderEntriesFile(true, offset);
S32 bytes_read = aprfile->read((void*)&entry, (S32)sizeof(Entry));
llassert_always(bytes_read == sizeof(Entry));
idx_entry_map_t::iterator iter = mUpdatedEntryMap.find(idx) ;
if(iter != mUpdatedEntryMap.end())
{
entry = iter->second ;
}
else
{
S32 offset = sizeof(EntriesInfo) + idx * sizeof(Entry);
LLAPRFile* aprfile = openHeaderEntriesFile(true, offset);
S32 bytes_read = aprfile->read((void*)&entry, (S32)sizeof(Entry));
llassert_always(bytes_read == sizeof(Entry));
closeHeaderEntriesFile();
}
llassert_always(entry.mImageSize == 0 || entry.mImageSize == -1 || entry.mImageSize > entry.mBodySize);
closeHeaderEntriesFile();
}
return idx;
}
@ -1121,12 +1141,8 @@ void LLTextureCache::writeEntryAndClose(S32 idx, Entry& entry)
mTexturesSizeMap[entry.mID] = entry.mBodySize;
}
// llinfos << "Updating TE: " << idx << ": " << id << " Size: " << entry.mBodySize << " Time: " << entry.mTime << llendl;
S32 offset = sizeof(EntriesInfo) + idx * sizeof(Entry);
LLAPRFile* aprfile = openHeaderEntriesFile(false, offset);
S32 bytes_written = aprfile->write((void*)&entry, (S32)sizeof(Entry));
llassert_always(bytes_written == sizeof(Entry));
mHeaderEntriesMaxWriteIdx = llmax(mHeaderEntriesMaxWriteIdx, idx);
closeHeaderEntriesFile();
mUpdatedEntryMap[idx] = entry ;
}
}
}
@ -1141,6 +1157,7 @@ U32 LLTextureCache::openAndReadEntries(std::vector<Entry>& entries)
mTexturesSizeTotal = 0;
LLAPRFile* aprfile = openHeaderEntriesFile(false, (S32)sizeof(EntriesInfo));
updatedHeaderEntriesFile() ;
for (U32 idx=0; idx<num_entries; idx++)
{
Entry entry;
@ -1191,6 +1208,47 @@ void LLTextureCache::writeEntriesAndClose(const std::vector<Entry>& entries)
}
}
void LLTextureCache::writeUpdatedEntries()
{
lockHeaders() ;
if (!mReadOnly && !mUpdatedEntryMap.empty())
{
openHeaderEntriesFile(false, 0);
updatedHeaderEntriesFile() ;
closeHeaderEntriesFile();
}
unlockHeaders() ;
}
//mHeaderMutex is locked and mHeaderAPRFile is created before calling this.
void LLTextureCache::updatedHeaderEntriesFile()
{
if (!mReadOnly && !mUpdatedEntryMap.empty() && mHeaderAPRFile)
{
//entriesInfo
mHeaderAPRFile->seek(APR_SET, 0);
S32 bytes_written = mHeaderAPRFile->write((U8*)&mHeaderEntriesInfo, sizeof(EntriesInfo)) ;
llassert_always(bytes_written == sizeof(EntriesInfo));
//write each updated entry
S32 entry_size = (S32)sizeof(Entry) ;
S32 prev_idx = -1 ;
S32 delta_idx ;
for (idx_entry_map_t::iterator iter = mUpdatedEntryMap.begin(); iter != mUpdatedEntryMap.end(); ++iter)
{
delta_idx = iter->first - prev_idx - 1;
prev_idx = iter->first ;
if(delta_idx)
{
mHeaderAPRFile->seek(APR_CUR, delta_idx * entry_size);
}
bytes_written = mHeaderAPRFile->write((void*)(&iter->second), entry_size);
llassert_always(bytes_written == entry_size);
}
mUpdatedEntryMap.clear() ;
}
}
//----------------------------------------------------------------------------
// Called from either the main thread or the worker thread

View File

@ -68,6 +68,7 @@ private:
Entry(const LLUUID& id, S32 imagesize, S32 bodysize, U32 time) :
mID(id), mImageSize(imagesize), mBodySize(bodysize), mTime(time) {}
void init(const LLUUID& id, U32 time) { mID = id, mImageSize = 0; mBodySize = 0; mTime = time; }
Entry& operator=(const Entry& entry) {mID = entry.mID, mImageSize = entry.mImageSize; mBodySize = entry.mBodySize; mTime = entry.mTime; return *this;}
LLUUID mID; // 16 bytes
S32 mImageSize; // total size of image if known
S32 mBodySize; // size of body file in body cache
@ -166,6 +167,8 @@ private:
S32 getHeaderCacheEntry(const LLUUID& id, S32& imagesize);
S32 setHeaderCacheEntry(const LLUUID& id, S32 imagesize);
bool removeHeaderCacheEntry(const LLUUID& id);
void writeUpdatedEntries() ;
void updatedHeaderEntriesFile() ;
void lockHeaders() { mHeaderMutex.lock(); }
void unlockHeaders() { mHeaderMutex.unlock(); }
@ -204,6 +207,9 @@ private:
S64 mTexturesSizeTotal;
LLAtomic32<BOOL> mDoPurge;
typedef std::map<S32, Entry> idx_entry_map_t;
idx_entry_map_t mUpdatedEntryMap;
// Statics
static F32 sHeaderCacheVersion;
static U32 sCacheMaxEntries;

View File

@ -658,6 +658,14 @@ struct compare_decode_pair
}
};
struct KillView
{
void operator()(LLView* viewp) const
{
viewp->die();
}
};
void LLTextureView::draw()
{
if (!mFreezeView)
@ -665,12 +673,12 @@ void LLTextureView::draw()
// LLViewerObject *objectp;
// S32 te;
for_each(mTextureBars.begin(), mTextureBars.end(), DeletePointer());
for_each(mTextureBars.begin(), mTextureBars.end(), KillView());
mTextureBars.clear();
delete mGLTexMemBar;
delete mGLTexMemBar;
mGLTexMemBar = 0;
typedef std::multiset<decode_pair_t, compare_decode_pair > display_list_t;
display_list_t display_image_list;
@ -683,6 +691,10 @@ void LLTextureView::draw()
iter != gTextureList.mImageList.end(); )
{
LLPointer<LLViewerFetchedTexture> imagep = *iter++;
if(!imagep->hasFetcher())
{
continue ;
}
S32 cur_discard = imagep->getDiscardLevel();
S32 desired_discard = imagep->mDesiredDiscardLevel;

View File

@ -53,7 +53,7 @@ S32 BUTTON_WIDTH = 90;
const LLFontGL* LLToastNotifyPanel::sFont = NULL;
const LLFontGL* LLToastNotifyPanel::sFontSmall = NULL;
LLToastNotifyPanel::LLToastNotifyPanel(LLNotificationPtr& notification) :
LLToastNotifyPanel::LLToastNotifyPanel(LLNotificationPtr& notification, const LLRect& rect) :
LLToastPanel(notification),
mTextBox(NULL),
mInfoPanel(NULL),
@ -63,6 +63,10 @@ mNumButtons(0),
mAddedDefaultBtn(false)
{
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_notification.xml");
if(rect != LLRect::null)
{
this->setShape(rect);
}
mInfoPanel = getChild<LLPanel>("info_panel");
mControlPanel = getChild<LLPanel>("control_panel");
BUTTON_WIDTH = gSavedSettings.getS32("ToastButtonWidth");
@ -159,7 +163,12 @@ mAddedDefaultBtn(false)
* for a scriptdialog toast h_pad can be < 2*HPAD if we have a lot of buttons.
* In last case set default h_pad to avoid heaping of buttons
*/
h_pad = 2*HPAD;
S32 button_per_row = button_panel_width / BUTTON_WIDTH;
h_pad = (button_panel_width % BUTTON_WIDTH) / (button_per_row - 1);// -1 because we do not need space after last button in a row
if(h_pad < 2*HPAD) // still not enough space between buttons ?
{
h_pad = 2*HPAD;
}
}
if (mIsScriptDialog)
{
@ -224,7 +233,7 @@ LLButton* LLToastNotifyPanel::createButton(const LLSD& form_element, BOOL is_opt
p.click_callback.function(boost::bind(&LLToastNotifyPanel::onClickButton, userdata));
p.rect.width = BUTTON_WIDTH;
p.auto_resize = false;
p.follows.flags(FOLLOWS_RIGHT | FOLLOWS_LEFT | FOLLOWS_BOTTOM);
p.follows.flags(FOLLOWS_LEFT | FOLLOWS_BOTTOM);
if (mIsCaution)
{
p.image_color(LLUIColorTable::instance().getColor("ButtonCautionImageColor"));

View File

@ -53,7 +53,15 @@ class LLNotificationForm;
class LLToastNotifyPanel: public LLToastPanel
{
public:
LLToastNotifyPanel(LLNotificationPtr&);
/**
* Constructor for LLToastNotifyPanel.
*
* @param pNotification a shared pointer to LLNotification
* @param rect an initial rectangle of the toast panel.
* If it is null then a loaded from xml rectangle will be used.
* @see LLNotification
*/
LLToastNotifyPanel(LLNotificationPtr& pNotification, const LLRect& rect = LLRect::null);
virtual ~LLToastNotifyPanel();
LLPanel * getControlPanel() { return mControlPanel; }
@ -77,7 +85,7 @@ private:
/*
* It lays out buttons of the notification in mControlPanel.
* Buttons will be placed from BOTTOM to TOP.
* @param h_pad horizontal space between buttons. It is depent on number of buttons.
* @param h_pad horizontal space between buttons. It is depend on number of buttons.
* @param buttons vector of button to be added.
*/
void updateButtonsLayout(const std::vector<index_button_pair_t>& buttons, S32 h_pad);

View File

@ -50,6 +50,7 @@
#include "llcallbacklist.h"
#include "llparcel.h"
#include "llaudioengine.h" // for gAudiop
#include "llurldispatcher.h"
#include "llvoavatar.h"
#include "llvoavatarself.h"
#include "llviewerregion.h"
@ -1090,7 +1091,8 @@ LLViewerMediaImpl::LLViewerMediaImpl( const LLUUID& texture_id,
mBackgroundColor(LLColor4::white),
mNavigateSuspended(false),
mNavigateSuspendedDeferred(false),
mIsUpdated(false)
mIsUpdated(false),
mTrustedBrowser(false)
{
// Set up the mute list observer if it hasn't been set up already.
@ -2353,6 +2355,14 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla
{
switch(event)
{
case MEDIA_EVENT_CLICK_LINK_NOFOLLOW:
{
LL_DEBUGS("Media") << "MEDIA_EVENT_CLICK_LINK_NOFOLLOW, uri is: " << plugin->getClickURL() << LL_ENDL;
std::string url = plugin->getClickURL();
LLURLDispatcher::dispatch(url, NULL, mTrustedBrowser);
}
break;
case MEDIA_EVENT_PLUGIN_FAILED_LAUNCH:
{
// The plugin failed to load properly. Make sure the timer doesn't retry.

View File

@ -322,6 +322,9 @@ public:
void setLowPrioritySizeLimit(int size);
void setTextureID(LLUUID id = LLUUID::null);
bool isTrustedBrowser() { return mTrustedBrowser; }
void setTrustedBrowser(bool trusted) { mTrustedBrowser = trusted; }
typedef enum
{
@ -405,6 +408,7 @@ private:
LLColor4 mBackgroundColor;
bool mNavigateSuspended;
bool mNavigateSuspendedDeferred;
bool mTrustedBrowser;
private:
BOOL mIsUpdated ;

View File

@ -82,7 +82,7 @@ LLTexturePipelineTester* LLViewerTextureManager::sTesterp = NULL ;
S32 LLViewerTexture::sImageCount = 0;
S32 LLViewerTexture::sRawCount = 0;
S32 LLViewerTexture::sAuxCount = 0;
LLTimer LLViewerTexture::sEvaluationTimer;
LLFrameTimer LLViewerTexture::sEvaluationTimer;
F32 LLViewerTexture::sDesiredDiscardBias = 0.f;
F32 LLViewerTexture::sDesiredDiscardScale = 1.1f;
S32 LLViewerTexture::sBoundTextureMemoryInBytes = 0;
@ -102,7 +102,7 @@ F32 LLViewerTexture::sCurrentTime = 0.0f ;
BOOL LLViewerTexture::sUseTextureAtlas = FALSE ;
const F32 desired_discard_bias_min = -2.0f; // -max number of levels to improve image quality by
const F32 desired_discard_bias_max = 1.5f; // max number of levels to reduce image quality by
const F32 desired_discard_bias_max = (F32)MAX_DISCARD_LEVEL; // max number of levels to reduce image quality by
const F64 log_2 = log(2.0);
//----------------------------------------------------------------------------------------------
@ -369,7 +369,7 @@ S32 LLViewerTexture::getCategoryFromIndex(S32 index)
}
// tuning params
const F32 discard_bias_delta = .05f;
const F32 discard_bias_delta = .25f;
const F32 discard_delta_time = 0.5f;
const S32 min_non_tex_system_mem = (128<<20); // 128 MB
// non-const (used externally
@ -1424,9 +1424,8 @@ BOOL LLViewerFetchedTexture::createTexture(S32 usename/*= 0*/)
if (!mForceToSaveRawImage)
{
mNeedsAux = FALSE;
}
destroyRawImage();
}
return res;
}
@ -2749,7 +2748,7 @@ void LLViewerLODTexture::processTextureStats()
mCalculatedDiscardLevel = discard_level;
}
}
if (mBoostLevel < LLViewerTexture::BOOST_HIGH)
if (mBoostLevel < LLViewerTexture::BOOST_SCULPTED)
{
discard_level += sDesiredDiscardBias;
discard_level *= sDesiredDiscardScale; // scale
@ -2775,8 +2774,7 @@ void LLViewerLODTexture::processTextureStats()
//
S32 current_discard = getDiscardLevel();
if ((sDesiredDiscardBias > 0.0f) &&
(current_discard >= 0 && mDesiredDiscardLevel >= current_discard))
if (sDesiredDiscardBias > 0.0f && mBoostLevel < LLViewerTexture::BOOST_SCULPTED && current_discard >= 0)
{
// Limit the amount of GL memory bound each frame
if ( BYTES_TO_MEGA_BYTES(sBoundTextureMemoryInBytes) > sMaxBoundTextureMemInMegaBytes * texmem_middle_bound_scale &&

View File

@ -300,7 +300,7 @@ public:
static S32 sImageCount;
static S32 sRawCount;
static S32 sAuxCount;
static LLTimer sEvaluationTimer;
static LLFrameTimer sEvaluationTimer;
static F32 sDesiredDiscardBias;
static F32 sDesiredDiscardScale;
static S32 sBoundTextureMemoryInBytes;
@ -455,6 +455,7 @@ public:
F32 getElapsedLastReferencedSavedRawImageTime() const ;
BOOL isFullyLoaded() const;
BOOL hasFetcher() const { return mHasFetcher;}
protected:
/*virtual*/ void switchToCachedImage();
S32 getCurrentDiscardLevelForFetching() ;

View File

@ -212,8 +212,8 @@
Næste ejer:
</text>
<check_box label="Redigére" name="checkbox next owner can modify"/>
<check_box label="Kopiére" left_delta="80" name="checkbox next owner can copy"/>
<check_box label="Sælge/give væk" left_delta="67" name="checkbox next owner can transfer" tool_tip="Næste ejer kan give væk eller sælge dette objekt"/>
<check_box label="Kopiére" name="checkbox next owner can copy"/>
<check_box label="Sælge/give væk" name="checkbox next owner can transfer" tool_tip="Næste ejer kan give væk eller sælge dette objekt"/>
<text name="B:">
B:
</text>

View File

@ -1,5 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floaterland" title="LAND-INFO">
<floater.string name="maturity_icon_general">
&quot;Parcel_PG_Dark&quot;
</floater.string>
<floater.string name="maturity_icon_moderate">
&quot;Parcel_M_Dark&quot;
</floater.string>
<floater.string name="maturity_icon_adult">
&quot;Parcel_R_Dark&quot;
</floater.string>
<floater.string name="Minutes">
[MINUTES] Minuten
</floater.string>
@ -15,7 +24,7 @@
<tab_container name="landtab" tab_min_width="40" width="489">
<panel label="ALLGEMEIN" name="land_general_panel">
<panel.string name="new users only">
Nur neue Benutzer
Nur neue Einwohner
</panel.string>
<panel.string name="anyone">
Jeder
@ -388,10 +397,6 @@ Nur große Parzellen können in der Suche aufgeführt werden.
Homepage:
</text>
<button label="Festlegen" label_selected="Einstellen..." name="set_media_url"/>
<text name="CurrentURL:">
Aktuelle Seite:
</text>
<button label="Zurücksetzen..." label_selected="Zurücksetzen..." name="reset_media_url" tool_tip="URL aktualisieren"/>
<check_box label="URL ausblenden" name="hide_media_url" tool_tip="Aktivieren Sie diese Option, wenn Sie nicht möchten, dass unautorisierte Personen die Medien-URL sehen können. Diese Option ist für HTML-Medien nicht verfügbar."/>
<text name="Description:">
Inhalt:

View File

@ -41,8 +41,8 @@ Verkleinern Sie Ihre Auswahl.
Das ausgewählte Land beinhaltet kein öffentliches Land.
</floater.string>
<floater.string name="not_owned_by_you">
Sie haben Land ausgewählt, das einer anderen Person gehört.
Verkleinern Sie Ihre Auswahl.
Sie haben Land ausgewählt, das einem anderen Einwohner gehört.
Wählen Sie ein kleineres Gebiet aus.
</floater.string>
<floater.string name="processing">
Kauf wird abgewickelt...

View File

@ -311,8 +311,8 @@
<text name="Item Action Label" right="100">
Jacke:
</text>
<texture_picker label="Oberstoff" name="Upper Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
<texture_picker label="Unterstoff" name="Lower Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
<texture_picker label="Stoff: oben" name="Upper Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
<texture_picker label="Stoff: unten" name="Lower Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
<color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
<button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/>
<button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/>

View File

@ -2,7 +2,7 @@
<floater name="godtools floater" title="GOTT-WERKZEUGE">
<tab_container name="GodTools Tabs">
<panel label="Raster" name="grid">
<button label="Alle Benutzer hinauswerfen" label_selected="Alle Benutzer hinauswerfen" name="Kick all users" width="175"/>
<button label="Alle Einwohner hinauswerfen" label_selected="Alle Einwohner hinauswerfen" name="Kick all users" width="175"/>
<button label="Sichtbarkeits-Cache dieser Regionskarte leeren" label_selected="Sichtbarkeits-Cache dieser Regionskarte leeren" name="Flush This Region&apos;s Map Visibility Caches" width="285"/>
</panel>
<panel label="Region" name="region">
@ -35,8 +35,8 @@
<text name="Redirect to Grid: " width="110">
Auf Raster umleiten:
</text>
<line_editor left_delta="110" name="redirectx" width="35" left_pad="0"/>
<line_editor left_delta="45" name="redirecty" width="35" />
<line_editor left_delta="110" left_pad="0" name="redirectx" width="35"/>
<line_editor left_delta="45" name="redirecty" width="35"/>
<text font="SansSerifSmall" name="billable factor text">
Abrechnungsfaktor:
</text>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<multi_floater name="im_floater" title="Instant Message">
<string name="only_user_message">
Sie sind der einzige Benutzer in dieser Sitzung.
Sie sind der einzige Einwohner in dieser Sitzung.
</string>
<string name="offline_message">
[FIRST] [LAST] ist offline.
@ -32,7 +32,7 @@
</string>
<!-- ALL of the event strings should have [RECIPIENT] in them -->
<string name="add_session_event">
Es konnten keine Benutzer zur Chat-Sitzung mit [RECIPIENT] hinzugefügt werden.
Es konnten keine Einwohner zur Chat-Sitzung mit [RECIPIENT] hinzugefügt werden.
</string>
<string name="message_session_event">
Ihre Nachricht konnte nicht an die Chat-Sitzung mit [RECIPIENT] gesendet werden.

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="publish_classified" title="Anzeige wird veröffentlicht">
<text name="explanation_text">
Ihr Anzeige wird für eine Woche veröffentlicht.
Anzeigengebühren werden nicht zurückerstattet.
</text>
<spinner label="Anzeigenpreis:" name="price_for_listing" tool_tip="Preis für Anzeige." value="50"/>
<text name="l$_text" value="L$"/>
<text name="more_info_text">
Weitere Infos (Link zur Hilfe)
</text>
<button label="Veröffentlichen" name="publish_btn"/>
<button label="Abbrechen" name="cancel_btn"/>
</floater>

View File

@ -41,11 +41,11 @@ Objekt:
</text>
<combo_box name="category_combo" tool_tip="Kategorie -- wählen Sie die Kategorie aus, die am besten auf diesen Bericht zutrifft">
<combo_box.item label="Kategorie auswählen" name="Select_category"/>
<combo_box.item label="Alter&gt; Age-Play" name="Age__Age_play"/>
<combo_box.item label="Alter &gt; Age-Play" name="Age__Age_play"/>
<combo_box.item label="Alter &gt; Erwachsener Einwohner in Teen Second Life" name="Age__Adult_resident_on_Teen_Second_Life"/>
<combo_box.item label="Alter &gt; Minderjähriger Einwohner außerhalb Teen Second Life" name="Age__Underage_resident_outside_of_Teen_Second_Life"/>
<combo_box.item label="Angriff&gt; Kampf-Sandbox / unsichere Region" name="Assault__Combat_sandbox___unsafe_area"/>
<combo_box.item label="Angriff&gt; Sichere Region" name="Assault__Safe_area"/>
<combo_box.item label="Angriff &gt; Kampf-Sandbox / unsichere Region" name="Assault__Combat_sandbox___unsafe_area"/>
<combo_box.item label="Angriff &gt; Sichere Region" name="Assault__Safe_area"/>
<combo_box.item label="Angriff &gt; Sandbox für Waffentest" name="Assault__Weapons_testing_sandbox"/>
<combo_box.item label="Handel &gt; Produkt nicht geliefert oder Dienstleistung nicht erbracht" name="Commerce__Failure_to_deliver_product_or_service"/>
<combo_box.item label="Offenlegung &gt; Informationen aus realer Welt" name="Disclosure__Real_world_information"/>
@ -57,7 +57,7 @@ Objekt:
<combo_box.item label="Ruhestörung &gt; Ständige Spam-Wiederholung" name="Disturbing_the_peace__Repetitive_spam"/>
<combo_box.item label="Ruhestörung &gt; Unerwünschte Spam-Werbung" name="Disturbing_the_peace__Unwanted_advert_spam"/>
<combo_box.item label="Betrug &gt; L$" name="Fraud__L$"/>
<combo_box.item label="Betrug&gt; Land" name="Fraud__Land"/>
<combo_box.item label="Betrug &gt; Land" name="Fraud__Land"/>
<combo_box.item label="Betrug &gt; Schneeballsystem oder Kettenbrief" name="Fraud__Pyramid_scheme_or_chain_letter"/>
<combo_box.item label="Betrug &gt; US$" name="Fraud__US$"/>
<combo_box.item label="Belästigung &gt; Werbefarmen / visueller Spam" name="Harassment__Advert_farms___visual_spam"/>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="texture picker" title="AUSWÄHLEN: TEXTUR">
<floater name="texture picker" title="TEXTUR AUSWÄHLEN">
<string name="choose_picture">
Zum Auswählen eines Bildes hier klicken
</string>

View File

@ -364,14 +364,14 @@
Objekteigenschaften bearbeiten:
</text>
<check_box label="Flexibler Pfad" name="Flexible1D Checkbox Ctrl" tool_tip="Bewirkt, dass sich das Objekt um die Z-Achse biegen kann. (Nur Client-Seite)"/>
<spinner label="Weichheit" name="FlexNumSections" width="140"/>
<spinner label="Schwerkraft" name="FlexGravity" width="140"/>
<spinner label="Ziehen" name="FlexFriction" width="140"/>
<spinner label="Wind" name="FlexWind" width="140"/>
<spinner label="Spannung" name="FlexTension" width="140"/>
<spinner label="Erzwingen X" name="FlexForceX" width="140"/>
<spinner label="Erzwingen Y" name="FlexForceY" width="140"/>
<spinner label="Erzwingen Z" name="FlexForceZ" width="140"/>
<spinner label="Weichheit" name="FlexNumSections"/>
<spinner label="Schwerkraft" name="FlexGravity"/>
<spinner label="Ziehen" name="FlexFriction"/>
<spinner label="Wind" name="FlexWind"/>
<spinner label="Spannung" name="FlexTension"/>
<spinner label="Kraft X" name="FlexForceX"/>
<spinner label="Kraft Y" name="FlexForceY"/>
<spinner label="Kraft Z" name="FlexForceZ"/>
<check_box label="Licht" name="Light Checkbox Ctrl" tool_tip="Verursacht, dass Objekt Licht emittiert"/>
<color_swatch label="" name="colorswatch" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
<texture_picker label="" name="light texture control" tool_tip="Klicken, um eine Bild auszuwählen (dieser Effekt funktioniert nur, wenn zeitversetzte Wiedergabe aktiviert ist)"/>

View File

@ -5,8 +5,7 @@
Legende
</text>
</panel>
<panel
name="layout_panel_2">
<panel name="layout_panel_2">
<button label="Meine Position" label_selected="Wo bin ich?" name="Show My Location" tool_tip="Karte auf Position meines Avatars zentrieren"/>
<text name="me_label">
Ich
@ -40,7 +39,7 @@
<text name="pg_label">
Generell
</text>
<check_box initial_value="true" label="Mature" name="event_mature_chk"/>
<check_box initial_value="wahr" label="Mature" name="event_mature_chk"/>
<text name="mature_label">
Moderat
</text>
@ -49,14 +48,12 @@
Adult
</text>
</panel>
<panel
name="layout_panel_3">
<panel name="layout_panel_3">
<text name="find_on_map_label">
Auf Karte anzeigen
</text>
</panel>
<panel
name="layout_panel_4">
<panel name="layout_panel_4">
<combo_box label="Online-Freunde" name="friend combo" tool_tip="Freunde auf Karte anzeigen">
<combo_box.item label="Meine Freunde: Online" name="item1"/>
</combo_box>
@ -74,14 +71,12 @@
<button font="SansSerifSmall" label="SLurl kopieren" name="copy_slurl" tool_tip="Kopiert die aktuelle Position als SLurl zur Verwendung im Web."/>
<button label="Auswahl anzeigen" label_selected="Ziel anzeigen" name="Show Destination" tool_tip="Karte auf ausgewählte Position zentrieren"/>
</panel>
<panel
name="layout_panel_5">
<panel name="layout_panel_5">
<text name="zoom_label">
Zoom
</text>
</panel>
<panel
name="layout_panel_6">
<panel name="layout_panel_6">
<slider label="Zoom" name="zoom slider"/>
</panel>
</floater>

View File

@ -107,7 +107,7 @@ Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
</notification>
<notification name="FriendsAndGroupsOnly">
Leute, die nicht auf Ihrer Freundesliste stehen, werden nicht wissen, dass Sie deren Anrufe oder Sofortnachrichten ignoriert haben.
<usetemplate name="okbutton" yestext="Ja"/>
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="GrantModifyRights">
Wenn Sie einem anderen Einwohner, das die Erlaubnis zum Bearbeiten erteilen, dann kann dieser JEDES Objekt, das Sie inworld besitzen, verändern, löschen oder nehmen. Seien Sie SEHR vorsichtig, wenn Sie diese Erlaubnis gewähren!
@ -185,7 +185,7 @@ Fortfahren?
<notification name="JoinGroupNoCost">
Sie treten der Gruppe [NAME] bei.
Fortfahren?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Zusammenlegen"/>
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Beitreten"/>
</notification>
<notification name="JoinGroupCannotAfford">
Der Beitritt zu dieser Gruppe kostet [COST] L$.
@ -920,13 +920,13 @@ Dies ist ein temporärer Fehler. Bitte passen Sie das Kleidungsstück in einigen
Sie sind nicht berechtigt, Land für die aktive Gruppe zu kaufen.
</notification>
<notification label="Freund hinzufügen" name="AddFriend">
Freunde können sich gegenseitig die Berechtigung erteilen, sich auf der Karte zu verfolgen und Online-Status Benachrichtigungen zu empfangen.
Freunde können sich gegenseitig die Berechtigung erteilen, sich auf der Karte zu sehen und den Online-Status anzuzeigen.
[NAME] Freundschaft anbieten?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
</notification>
<notification label="Freund hinzufügen" name="AddFriendWithMessage">
Freunde können sich gegenseitig die Berechtigung erteilen, sich auf der Karte zu verfolgen und Online-Status Benachrichtigungen zu empfangen.
Freunde können sich gegenseitig die Berechtigung erteilen, sich auf der Karte zu sehen und den Online-Status anzuzeigen.
[NAME] Freundschaft anbieten?
<form name="form">
@ -1314,8 +1314,8 @@ Diese Gruppe verlassen?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
</notification>
<notification name="ConfirmKick">
Möchten Sie WIRKLICH alle Benutzer aus dem Grid werfen?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Alle Benutzer hinauswerfen"/>
Möchten Sie WIRKLICH alle Einwohner aus dem Grid werfen?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Alle Einwohner hinauswerfen"/>
</notification>
<notification name="MuteLinden">
Lindens können nicht ignoriert werden.
@ -1355,7 +1355,7 @@ Chat und Instant Messages werden ausgeblendet. Instant Messages (Sofortnachricht
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="KickUser">
Beim Hinauswerfen dieses Benutzers welche Meldung anzeigen?
Beim Hinauswerfen dieses Einwohners welche Meldung anzeigen?
<form name="form">
<input name="message">
Sie wurden von einem Administrator abgemeldet.
@ -1375,7 +1375,7 @@ Chat und Instant Messages werden ausgeblendet. Instant Messages (Sofortnachricht
</form>
</notification>
<notification name="FreezeUser">
Beim Einfrieren dieses Benutzers welche Meldung anzeigen?
Beim Einfrieren dieses Einwohners welche Meldung anzeigen?
<form name="form">
<input name="message">
Sie wurden eingefroren. Bewegen oder Chatten ist nicht mehr möglich. Ein Administrator wird sich über IM an Sie wenden
@ -1385,7 +1385,7 @@ Chat und Instant Messages werden ausgeblendet. Instant Messages (Sofortnachricht
</form>
</notification>
<notification name="UnFreezeUser">
Beim Auftauen dieses Benutzers welche Meldung anzeigen?
Beim Auftauen dieses Einwohners welche Meldung anzeigen?
<form name="form">
<input name="message">
Sie sind nicht mehr eingefroren.
@ -1405,7 +1405,7 @@ Chat und Instant Messages werden ausgeblendet. Instant Messages (Sofortnachricht
</form>
</notification>
<notification name="OfferTeleportFromGod">
Benutzer an Ihrem Standort herbeirufen?
Einwohner an Ihrem Standort herbeirufen?
<form name="form">
<input name="message">
Triff mich in [REGION]
@ -1435,9 +1435,9 @@ Chat und Instant Messages werden ausgeblendet. Instant Messages (Sofortnachricht
</form>
</notification>
<notification label="Linden-Grundstück ändern" name="ChangeLindenEstate">
Sie sind im Begriff, ein Grundstück in Linden-Besitz (Mainland, Teen-Raster, Orientierung usw.) zu verändern.
Sie sind im Begriff, ein Grundstück in Linden-Besitz (Mainland, Teen-Grid, Orientation, usw.) zu verändern.
Dies ist ÄUSSERST GEFÄHRLICH, da es grundlegende Auswirkungen auf das Benutzererlebnis hat. Auf dem Mainland werden tausende Regionen geändert, was den Spaceserver stark belastet.
Dies hat EXTREME KONSEQUENZEN und wirkt sich auf die Einwohner aus! Auf dem Mainland kann dies zu Veränderungen in Tausenden von Regionen und zu Problemen mit dem Spaceserver führen!
Fortfahren?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
@ -2200,10 +2200,10 @@ Bitte besuchen Sie unsere Knowledgebase, um mehr Details über Zugang zu Regione
Die für den Zutritt zu dieser Region erforderlichen Zahlungsinformationen liegen nicht vor.
</notification>
<notification name="MustGetAgeRgion">
Sie müssen alterüberprüft sein, um diese Region betreten zu können.
Sie müssen altersüberprüft sein, um diese Region betreten zu können.
</notification>
<notification name="MustGetAgeParcel">
Sie müssen alterüberprüft sein, um diese Parzelle betreten zu können.
Sie müssen altersüberprüft sein, um diese Parzelle betreten zu können.
</notification>
<notification name="NoDestRegion">
Keine Zielregion gefunden.
@ -2367,7 +2367,7 @@ Ihrem Inventar wird ein Lesezeichen erstellt, damit Sie diesem Einwohner einfach
</form>
</notification>
<notification name="RegionRestartMinutes">
Diese Region wird in [Minuten] neu gestartet.
Diese Region wird in [MINUTES] neu gestartet.
Wenn Sie in dieser Region bleiben, werden Sie abgemeldet.
</notification>
<notification name="RegionRestartSeconds">
@ -2433,7 +2433,7 @@ Anfrage gestatten?
</form>
</notification>
<notification name="ScriptToast">
[FIRST] [LAST]s &apos;[TITLE]&apos; fordert Eingaben vom Benutzer an.
[FIRST] [LAST]s &apos;[TITLE]&apos; fordert Eingaben vom Einwohner an.
<form name="form">
<button name="Open" text="Dialog öffnen"/>
<button name="Ignore" text="Ignorieren"/>

View File

@ -9,16 +9,46 @@
<panel.string name="l$_price">
[PRICE] L$
</panel.string>
<panel.string name="click_through_text_fmt">
[TELEPORT] teleportieren, [MAP] Karte, [PROFILE] Profil
</panel.string>
<panel.string name="date_fmt">
[mthnum,datetime,slt]/[day,datetime,slt]/[year,datetime,slt]
</panel.string>
<panel.string name="auto_renew_on">
Aktiviert
</panel.string>
<panel.string name="auto_renew_off">
Deaktiviert
</panel.string>
<text name="title" value="Anzeigen-Info"/>
<scroll_container name="profile_scroll">
<panel name="scroll_content_panel">
<text_editor name="classified_name" value="[name]"/>
<text name="classified_location_label" value="Standort:"/>
<text_editor name="classified_location" value="[wird geladen...]"/>
<text name="content_type_label" value="Inhaltsart:"/>
<text_editor name="content_type" value="[Inhalts-Art]"/>
<text name="category_label" value="Kategorie:"/>
<text_editor name="category" value="[Kategorie]"/>
<check_box label="Jede Woche automatisch erneuern" name="auto_renew"/>
<text_editor name="price_for_listing" tool_tip="Preis für Anzeige."/>
<text_editor name="classified_desc" value="[description]"/>
<text name="creation_date_label" value="Erstellungsdatum:"/>
<text_editor name="creation_date" tool_tip="Erstellungsdatum" value="[date]"/>
<text name="price_for_listing_label" value="Preis für Anzeige:"/>
<text_editor name="price_for_listing" tool_tip="Preis für Anzeige." value="[price]"/>
<layout_stack name="descr_stack">
<layout_panel name="clickthrough_layout_panel">
<text name="click_through_label" value="Klicks:"/>
<text_editor name="click_through_text" tool_tip="Click-Through-Daten" value="[clicks]"/>
</layout_panel>
<layout_panel name="price_layout_panel">
<text name="auto_renew_label" value="Autom. erneuern:"/>
<text name="auto_renew" value="Aktiviert"/>
</layout_panel>
<layout_panel name="descr_layout_panel">
<text name="classified_desc_label" value="Beschreibung:"/>
<text_editor name="classified_desc" value="[description]"/>
</layout_panel>
</layout_stack>
</panel>
</scroll_container>
<panel name="buttons">

View File

@ -3,12 +3,20 @@
<panel.string name="location_notice">
(wird nach Speichern aktualisiert)
</panel.string>
<string name="publish_label">
Veröffentlichen
</string>
<string name="save_label">
Speichern
</string>
<text name="title">
Anzeige bearbeiten
</text>
<scroll_container name="profile_scroll">
<panel name="scroll_content_panel">
<icon label="" name="edit_icon" tool_tip="Klicken, um ein Bild auszuwählen"/>
<panel name="snapshot_panel">
<icon label="" name="edit_icon" tool_tip="Klicken, um ein Bild auszuwählen"/>
</panel>
<text name="Name:">
Titel:
</text>
@ -22,20 +30,19 @@
wird geladen...
</text>
<button label="Aktuellen Standort verwenden" name="set_to_curr_location_btn"/>
<combo_box name="content_type">
<combo_item name="mature_ci">
Moderater Inhalt
</combo_item>
<combo_item name="pg_ci">
Allgemeiner Inhalt
</combo_item>
</combo_box>
<text name="category_label" value="Kategorie:"/>
<text name="content_type_label" value="Inhaltsart:"/>
<icons_combo_box label="Genereller Inhalt" name="content_type">
<icons_combo_box.item label="Moderater Inhalt" name="mature_ci" value="Moderat"/>
<icons_combo_box.item label="Genereller Inhalt" name="pg_ci" value="G"/>
</icons_combo_box>
<text name="price_for_listing_label" value="Preis für Anzeige:"/>
<spinner label="L$" name="price_for_listing" tool_tip="Preis für Anzeige." value="50"/>
<check_box label="Jede Woche automatisch erneuern" name="auto_renew"/>
</panel>
</scroll_container>
<panel label="bottom_panel" name="bottom_panel">
<button label="Speichern" name="save_changes_btn"/>
<button label="[LABEL]" name="save_changes_btn"/>
<button label="Abbrechen" name="cancel_btn"/>
</panel>
</panel>

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="edit_jacket_panel">
<panel name="avatar_jacket_color_panel">
<texture_picker label="Oberstoff" name="Upper Fabric" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
<texture_picker label="Unterstoff" name="Lower Fabric" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
<texture_picker label="Stoff: oben" name="Upper Fabric" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
<texture_picker label="Stoff: unten" name="Lower Fabric" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
<color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
</panel>
<accordion name="wearable_accordion">

View File

@ -9,18 +9,18 @@
<panel.string name="already_in_group">
Einige der ausgewählten Einwohner sind bereits Gruppenmitglieder und haben aus diesem Grund keine Einladung erhalten.
</panel.string>
<text name="help_text" top="10">
<text name="help_text">
Sie können mehrere Einwohner Ihre Gruppe einladen. Klicken Sie hierzu auf „Einwohnerliste öffnen“.
</text>
<button label="Einwohnerliste öffnen" name="add_button" tool_tip="" top_delta="62"/>
<button label="Einwohnerliste öffnen" name="add_button" tool_tip=""/>
<name_list name="invitee_list" tool_tip="Halten Sie zur Mehrfachauswahl die Strg-Taste gedrückt und klicken Sie auf die Namen."/>
<button label="Auswahl aus Liste löschen" name="remove_button" tool_tip="Die oben ausgewählten Einwohner von der Einladungsliste entfernen."/>
<text name="role_text">
Wählen Sie eine Rolle aus:
</text>
<combo_box name="role_name" tool_tip="Wählen Sie aus der Liste der Rollen, die Sie an Mitglieder vergeben dürfen."/>
<button label="Einladungen versenden" name="ok_button" width="136"/>
<button label="Abbrechen" name="cancel_button" width="66"/>
<button label="Einladungen versenden" name="ok_button"/>
<button label="Abbrechen" name="cancel_button"/>
<string name="GroupInvitation">
Gruppeneinladung
</string>

View File

@ -7,6 +7,8 @@
<string name="no_friends" value="Keine Freunde"/>
<string name="people_filter_label" value="Nach Leuten filtern"/>
<string name="groups_filter_label" value="Nach Gruppen filtern"/>
<string name="no_filtered_groups_msg" value="[secondlife:///app/search/groups Suche verwenden, um die Gruppe zu finden?]"/>
<string name="no_groups_msg" value="[secondlife:///app/search/groups Suche verwenden, um Gruppen zu finden?]"/>
<filter_editor label="Filter" name="filter_input"/>
<tab_container name="tabs">
<panel label="IN DER NÄHE" name="nearby_panel">
@ -20,15 +22,15 @@
<accordion_tab name="tab_online" title="Online"/>
<accordion_tab name="tab_all" title="Alle"/>
</accordion>
<text name="no_friends_msg">
Verwenden Sie [secondlife:///app/search/people die globale Suche], um Freunde hinzuzufügen. Oder klicken Sie mit rechts auf einen Einwohner und fügen Sie diesen als Freund hinzu.
Wenn Sie nach Orten suchen, an denen sich Leute befinden, verwenden Sie [secondlife:///app/worldmap die Karte].
</text>
<panel label="bottom_panel" name="bottom_panel">
<button name="friends_viewsort_btn" tool_tip="Optionen"/>
<button name="add_btn" tool_tip="Bieten Sie einem Einwohner die Freundschaft an"/>
<button name="del_btn" tool_tip="Ausgewählte Person von Ihrer Freundesliste entfernen"/>
</panel>
<text name="no_friends_msg">
Verwenden Sie [secondlife:///app/search/people die globale Suche], um Freunde hinzuzufügen. Oder klicken Sie mit rechts auf einen Einwohner und fügen Sie diesen als Freund hinzu.
Wenn Sie nach Orten suchen, an denen sich Leute befinden, verwenden Sie [secondlife:///app/worldmap die Karte].
</text>
</panel>
<panel label="MEINE GRUPPEN" name="groups_panel">
<panel label="bottom_panel" name="bottom_panel">

View File

@ -83,7 +83,7 @@
<text name="scripts_value" value="Ein"/>
<text name="damage_label" value="Schaden:"/>
<text name="damage_value" value="Aus"/>
<button label="Über Land" name="about_land_btn"/>
<button label="Land-Info" name="about_land_btn"/>
</panel>
</accordion_tab>
<accordion_tab name="region_information_tab" title="Region">

View File

@ -9,7 +9,7 @@
<radio_item label="Groß" name="radio3" value="2"/>
</radio_group>
<text name="font_colors">
Schriftfarbe:
Schriftfarben:
</text>
<color_swatch label="Sie" name="user"/>
<text name="text_box1">
@ -45,7 +45,7 @@
</text>
<check_box initial_value="true" label="Beim Chatten Tippanimation abspielen" name="play_typing_animation"/>
<check_box label="IMs per Email zuschicken, wenn ich offline bin" name="send_im_to_email"/>
<check_box label="Text-Chatverlauf aktivieren" name="plain_text_chat_history"/>
<check_box label="Kompakten Text-Chatverlauf aktivieren" name="plain_text_chat_history"/>
<radio_group name="chat_window" tool_tip="Zeigen Sie Ihre Sofortnachrichten (Instant Messages) in einem anderen Fenster oder in einem einzigen Fenster mit viele Registerkarten an (Neustart erforderlich).">
<radio_item label="Getrennte Fenster" name="radio" value="0"/>
<radio_item label="Registerkarten" name="radio2" value="1"/>

View File

@ -70,5 +70,5 @@
<button label="Hinzufügen..." name="add_banned_avatar_btn"/>
<button label="Entfernen..." name="remove_banned_avatar_btn"/>
<button label="Nachricht an Grundstück" name="message_estate_btn"/>
<button label="Einwohner hinauswerfen" name="kick_user_from_estate_btn"/>
<button label="Einwohner hinauswerfen..." name="kick_user_from_estate_btn"/>
</panel>

View File

@ -19,35 +19,25 @@
unbekannt
</text>
<check_box label="Terraformen blockieren" name="block_terraform_check"/>
<button label="?" name="terraform_help"/>
<check_box label="Fliegen blockieren" name="block_fly_check"/>
<button label="?" name="fly_help"/>
<check_box label="Schaden zulassen" name="allow_damage_check"/>
<button label="?" name="damage_help"/>
<check_box label="Stoßen beschränken" name="restrict_pushobject"/>
<button label="?" name="restrict_pushobject_help"/>
<check_box label="Landwiederverkauf zulassen" name="allow_land_resell_check"/>
<button label="?" name="land_resell_help"/>
<check_box label="Landumverteilung zulassen" name="allow_parcel_changes_check"/>
<button label="?" name="parcel_changes_help"/>
<check_box label="Landanzeige in Suche blockieren" name="block_parcel_search_check" tool_tip="Diese Region und ihre Parzellen in Suchergebnissen anzeigen"/>
<button label="?" name="parcel_search_help"/>
<spinner label="Avatar-Limit" name="agent_limit_spin"/>
<button label="?" name="agent_limit_help"/>
<spinner label="Objektbonus" name="object_bonus_spin"/>
<button label="?" name="object_bonus_help"/>
<text label="Inhaltseinstufung" name="access_text">
Einstufung:
</text>
<combo_box label="Moderat" name="access_combo">
<combo_box.item label="Adult" name="Adult"/>
<combo_box.item label="Moderat" name="Mature"/>
<combo_box.item label="Allgemein" name="PG"/>
</combo_box>
<button label="?" name="access_help"/>
<icons_combo_box label="Moderat" name="access_combo">
<icons_combo_box.item label="Adult" name="Adult" value="42"/>
<icons_combo_box.item label="Moderat" name="Mature" value="21"/>
<icons_combo_box.item label="Allgemein" name="PG" value="13"/>
</icons_combo_box>
<button label="Übernehmen" name="apply_btn"/>
<button label="Einen Benutzer nach Hause teleportieren..." name="kick_btn"/>
<button label="Alle Benutzer nach Hause teleportieren..." name="kick_all_btn"/>
<button label="Einen Einwohner nach Hause teleportieren..." name="kick_btn"/>
<button label="Alle Einwohner nach Hause teleportieren..." name="kick_all_btn"/>
<button label="Nachricht an Region senden..." name="im_btn"/>
<button label="Telehub verwalten..." name="manage_telehub_btn"/>
</panel>

View File

@ -36,8 +36,8 @@
<combo_box.item label="Allgemein" name="PG"/>
</combo_box>
<button label="Übernehmen" name="apply_btn"/>
<button label="Einen Benutzer nach Hause teleportieren..." name="kick_btn"/>
<button label="Alle Benutzer nach Hause teleportieren..." name="kick_all_btn"/>
<button label="Einen Einwohner nach Hause teleportieren..." name="kick_btn"/>
<button label="Alle Einwohner nach Hause teleportieren..." name="kick_all_btn"/>
<button label="Nachricht an Region senden..." name="im_btn"/>
<button label="Telehub verwalten..." name="manage_telehub_btn"/>
</panel>

View File

@ -25,25 +25,25 @@
Texturhöhenbereich
</text>
<text name="height_text_lbl6">
Südwest
</text>
<text name="height_text_lbl7">
Nordwest
</text>
<text name="height_text_lbl8">
Südost
</text>
<text name="height_text_lbl9">
<text name="height_text_lbl7">
Nordost
</text>
<spinner label="Niedrig" name="height_start_spin_0" label_width="40"/>
<spinner label="Niedrig" name="height_start_spin_1" label_width="40"/>
<spinner label="Niedrig" name="height_start_spin_2" label_width="40"/>
<spinner label="Niedrig" name="height_start_spin_3" label_width="40"/>
<spinner label="Hoch" name="height_range_spin_0" label_width="40"/>
<spinner label="Hoch" name="height_range_spin_1" label_width="40"/>
<spinner label="Hoch" name="height_range_spin_2" label_width="40"/>
<spinner label="Hoch" name="height_range_spin_3" label_width="40"/>
<text name="height_text_lbl8">
Südwest
</text>
<text name="height_text_lbl9">
Südost
</text>
<spinner label="Niedrig" label_width="40" name="height_start_spin_0"/>
<spinner label="Niedrig" label_width="40" name="height_start_spin_1"/>
<spinner label="Niedrig" label_width="40" name="height_start_spin_2"/>
<spinner label="Niedrig" label_width="40" name="height_start_spin_3"/>
<spinner label="Hoch" label_width="40" name="height_range_spin_0"/>
<spinner label="Hoch" label_width="40" name="height_range_spin_1"/>
<spinner label="Hoch" label_width="40" name="height_range_spin_2"/>
<spinner label="Hoch" label_width="40" name="height_range_spin_3"/>
<text name="height_text_lbl10">
Diese Werte geben den Mischungsgrad für die obigen Texturen an.
</text>

View File

@ -38,7 +38,7 @@
</panel.string>
<text name="title" value="Objektprofil"/>
<text name="where" value="(inworld)"/>
<panel name="properties_panel" label="">
<panel label="" name="properties_panel">
<text name="Name:">
Name:
</text>
@ -85,7 +85,7 @@
<text name="GroupLabel">
Gruppe:
</text>
<check_box label="Teilen" name="checkbox share with group" tool_tip="Mit allen Mitgliedern der zugeordneten Gruppe, Ihre Berechtigungen dieses Objekt zu ändern teilen. Sie müssen Übereignen, um Rollenbeschränkungen zu aktivieren."/>
<check_box label="Teilen" name="checkbox share with group" tool_tip="Mit allen Mitgliedern der zugeordneten Gruppe, Ihre Berechtigungen dieses Objekt zu ändern, teilen. Sie müssen Übereignen, um Rollenbeschränkungen zu aktivieren."/>
<text name="NextOwnerLabel">
Nächster Eigentümer:
</text>
@ -96,7 +96,7 @@
<check_box label="Zum Verkauf" name="checkbox for sale"/>
<combo_box name="sale type">
<combo_box.item label="Kopieren" name="Copy"/>
<combo_box.item label="Inhalte" name="Contents"/>
<combo_box.item label="Inhalt" name="Contents"/>
<combo_box.item label="Original" name="Original"/>
</combo_box>
<spinner label="Preis: L$" name="Edit Cost"/>
@ -124,5 +124,6 @@
<button label="Öffnen" name="open_btn"/>
<button label="Bezahlen" name="pay_btn"/>
<button label="Kaufen" name="buy_btn"/>
<button label="Details" name="details_btn"/>
</panel>
</panel>

View File

@ -753,11 +753,14 @@
Alpha
</string>
<string name="tattoo">
Taetowierung
Tätowierung
</string>
<string name="invalid">
ungültig
</string>
<string name="NewWearable">
Neue/r/s [WEARABLE_ITEM]
</string>
<string name="next">
Weiter
</string>
@ -1256,7 +1259,7 @@
(unbekannt)
</string>
<string name="SummaryForTheWeek" value="Zusammenfassung für diese Woche, beginnend am "/>
<string name="NextStipendDay" value="Der nächste Stipendium-Tag ist "/>
<string name="NextStipendDay" value=". Der nächste Stipendium-Tag ist "/>
<string name="GroupIndividualShare" value=" Gruppenanteil Einzelanteil"/>
<string name="Balance">
Kontostand
@ -1468,6 +1471,9 @@
<string name="PanelContentsNewScript">
Neues Skript
</string>
<string name="BusyModeResponseDefault">
Der Einwohner/Die Einwohnerin ist „beschäftigt&quot;, d.h. er/sie möchte im Moment nicht gestört werden. Ihre Nachricht wird dem Einwohner/der Einwohnerin als IM angezeigt, und kann später beantwortet werden.
</string>
<string name="MuteByName">
(nach Namen)
</string>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<teleport_messages name="">
<teleport_messages>
<message_set name="errors">
<message name="invalid_tport">
Bei der Bearbeitung Ihrer Teleport-Anfrage ist ein Problem aufgetreten. Sie müssen sich zum Teleportieren eventuell neu anmelden.
@ -62,6 +62,9 @@ Ihre Teleport-Anfrage kann nicht sofort bearbeitet werden. Versuchen Sie es in e
<message name="completing">
Teleport wird abgeschlossen.
</message>
<message name="completed_from">
Teleport aus [T_SLURL] wurde erfolgreich abgeschlossen.
</message>
<message name="resolving">
Ziel wird ermittelt.
</message>

View File

@ -8,6 +8,18 @@
save_rect="true"
title="ABOUT LAND"
width="490">
<floater.string
name="maturity_icon_general">
"Parcel_PG_Dark"
</floater.string>
<floater.string
name="maturity_icon_moderate">
"Parcel_M_Dark"
</floater.string>
<floater.string
name="maturity_icon_adult">
"Parcel_R_Dark"
</floater.string>
<floater.string
name="Minutes">
[MINUTES] minutes
@ -1107,7 +1119,7 @@ Leyla Linden </text>
label="Type"
name="type"
sort_column="online_status"
width="24" />
width="50" />
<name_list.columns
name="online_status"
width="-1" />
@ -1874,6 +1886,10 @@ Only large parcels can be listed in search.
name="access_estate_defined">
(Defined by the Estate)
</panel.string>
<panel.string
name="allow_public_access">
Allow Public Access ([MATURITY])
</panel.string>
<panel.string
name="estate_override">
One or more of these options is set at the estate level
@ -1894,7 +1910,6 @@ Only large parcels can be listed in search.
<check_box
follows="top|left"
height="16"
label="Allow Public Access [MATURITY]"
layout="topleft"
left_delta="0"
name="public_access"

View File

@ -3,7 +3,7 @@
legacy_header_height="18"
background_visible="true"
follows="left|top|right|bottom"
height="369"
height="250"
layout="topleft"
left="0"
name="script_floater"
@ -11,8 +11,8 @@
can_dock="true"
can_minimize="true"
visible="false"
width="520"
width="350"
can_resize="false"
min_width="350"
min_height="369">
min_height="200">
</floater>

View File

@ -290,11 +290,11 @@
width="134" />
<check_box
control_name="SnapEnabled"
height="20"
height="18"
initial_value="true"
label="Snap to grid"
layout="topleft"
top_pad="0"
top_pad="7"
name="checkbox snap to grid"
width="134" />
<combo_box
@ -990,11 +990,11 @@
label="For Sale:"
layout="topleft"
name="checkbox for sale"
left="10"
width="90" />
left="7"
width="93" />
<!-- NEW SALE TYPE COMBO BOX -->
<combo_box
left_pad="0"
left_pad="3"
layout="topleft"
follows="left|top"
allow_text_entry="false"
@ -1104,9 +1104,9 @@ even though the user gets a free copy.
follows="left|top|right"
label="Modify"
layout="topleft"
left="15"
left="5"
name="checkbox next owner can modify"
width="85" />
width="80" />
<check_box
follows="left|top|right"
height="19"
@ -1114,7 +1114,7 @@ even though the user gets a free copy.
layout="topleft"
left_pad="0"
name="checkbox next owner can copy"
width="90" />
width="80" />
<check_box
follows="left|top|right"
height="19"
@ -1124,7 +1124,7 @@ even though the user gets a free copy.
left_pad="0"
top_delta="0"
tool_tip="Next owner can give away or resell this object"
width="90" />
width="100" />
<text
type="string"
text_color="EmphasisColor"
@ -2054,7 +2054,7 @@ even though the user gets a free copy.
increment="1"
initial_value="2"
label="Softness"
label_width="65"
label_width="70"
layout="topleft"
left_delta="0"
max_val="3"
@ -2067,7 +2067,7 @@ even though the user gets a free copy.
increment="0.5"
initial_value="0.3"
label="Gravity"
label_width="65"
label_width="70"
layout="topleft"
left_delta="0"
max_val="10"
@ -2081,7 +2081,7 @@ even though the user gets a free copy.
increment="0.5"
initial_value="2"
label="Drag"
label_width="65"
label_width="70"
layout="topleft"
left_delta="0"
max_val="10"
@ -2094,7 +2094,7 @@ even though the user gets a free copy.
increment="0.5"
initial_value="0"
label="Wind"
label_width="65"
label_width="70"
layout="topleft"
left_delta="0"
max_val="10"
@ -2107,7 +2107,7 @@ even though the user gets a free copy.
increment="0.5"
initial_value="1"
label="Tension"
label_width="65"
label_width="70"
layout="topleft"
left_delta="0"
max_val="10"
@ -2120,7 +2120,7 @@ even though the user gets a free copy.
increment="0.01"
initial_value="0"
label="Force X"
label_width="65"
label_width="70"
layout="topleft"
left_delta="0"
max_val="10"
@ -2134,7 +2134,7 @@ even though the user gets a free copy.
increment="0.01"
initial_value="0"
label="Force Y"
label_width="65"
label_width="70"
layout="topleft"
left_delta="0"
max_val="10"
@ -2148,7 +2148,7 @@ even though the user gets a free copy.
increment="0.01"
initial_value="0"
label="Force Z"
label_width="65"
label_width="70"
layout="topleft"
left_delta="0"
max_val="10"

View File

@ -8,6 +8,9 @@
name="pick_info">
<menu_item_call.on_click
function="Pick.Info" />
<menu_item_call.on_enable
function="Pick.Enable"
parameter="info" />
</menu_item_call>
<menu_item_call
label="Edit"
@ -16,6 +19,9 @@
visible="false">
<menu_item_call.on_click
function="Pick.Edit" />
<menu_item_call.on_enable
function="Pick.Enable"
parameter="edit" />
</menu_item_call>
<menu_item_call
label="Teleport"
@ -23,6 +29,9 @@
name="pick_teleport">
<menu_item_call.on_click
function="Pick.Teleport" />
<menu_item_call.on_enable
function="Pick.Enable"
parameter="teleport" />
</menu_item_call>
<menu_item_call
label="Map"
@ -30,6 +39,9 @@
name="pick_map">
<menu_item_call.on_click
function="Pick.Map" />
<menu_item_call.on_enable
function="Pick.Enable"
parameter="map" />
</menu_item_call>
<menu_item_separator
layout="topleft"
@ -42,5 +54,8 @@
visible="false">
<menu_item_call.on_click
function="Pick.Delete" />
<menu_item_call.on_enable
function="Pick.Enable"
parameter="delete" />
</menu_item_call>
</context_menu>

View File

@ -24,7 +24,7 @@
</panel.string>
<panel.string
name="click_through_text_fmt">
[TELEPORT] teleport, [MAP] map, [MAP] profile
[TELEPORT] teleport, [MAP] map, [PROFILE] profile
</panel.string>
<panel.string
name="date_fmt">
@ -156,6 +156,24 @@
top_pad="10"
value="Content Type:"
width="140" />
<icon
follows="top|left"
height="16"
image_name="Parcel_M_Light"
layout="topleft"
left_pad="0"
name="content_type_moderate"
top_pad="-11"
width="18" />
<icon
follows="top|left"
height="16"
image_name="Parcel_PG_Light"
layout="topleft"
left_delta="0"
name="content_type_general"
top_delta="0"
width="18" />
<text_editor
allow_scroll="false"
bg_visible="false"
@ -163,11 +181,11 @@
h_pad="0"
height="18"
layout="topleft"
left_pad="0"
left_pad="2"
name="content_type"
read_only="true"
width="150"
top_pad="-10"
width="130"
top_delta="1"
v_pad="0"
value="[content type]" />
<text

View File

@ -186,7 +186,7 @@
left="10"
top_pad="5"
name="set_to_curr_location_btn"
width="156" />
width="200" />
<text
follows="left|top"
font.style="BOLD"
@ -217,25 +217,41 @@
top_pad="15"
value="Content type:"
width="250" />
<combo_box
allow_text_entry="false"
follows="left|top"
height="23"
<icons_combo_box
follows="left|top"
height="23"
label="General Content"
layout="topleft"
left="10"
name="content_type"
name="content_type"
top_pad="5"
width="156">
<combo_item
name="mature_ci"
value="Mature">
Moderate Content
</combo_item>
<combo_item
name="pg_ci"
value="PG">
General Content
</combo_item>
</combo_box>
<icons_combo_box.drop_down_button
image_overlay="Parcel_PG_Light"
image_overlay_alignment="left"
imgoverlay_label_space="3"
pad_left="3"/>
<icons_combo_box.item
label="Moderate Content"
name="mature_ci"
value="Mature">
<item.columns
halign="center"
type="icon"
value="Parcel_M_Light"
width="20"/>
</icons_combo_box.item>
<icons_combo_box.item
label="General Content"
name="pg_ci"
value="PG">
<item.columns
halign="center"
type="icon"
value="Parcel_PG_Light"
width="20"/>
</icons_combo_box.item>
</icons_combo_box>
<text
follows="left|top"
font.style="BOLD"

View File

@ -164,7 +164,7 @@
left="8"
top_pad="0"
name="set_to_curr_location_btn"
width="156" />
width="200" />
</panel>
</scroll_container>
<panel

View File

@ -86,7 +86,7 @@
left="4"
name="ok_button"
top="356"
width="130" />
width="135" />
<button
height="20"
label="Cancel"

View File

@ -325,6 +325,7 @@
top_pad="10"
width="313">
<accordion_tab
height="170"
layout="topleft"
name="parcel_characteristics_tab"
title="Parcel">
@ -537,6 +538,7 @@
</accordion_tab>
<accordion_tab
expanded="false"
height="150"
layout="topleft"
name="region_information_tab"
title="Region">
@ -664,6 +666,7 @@
</accordion_tab>
<accordion_tab
expanded="false"
height="190"
layout="topleft"
name="estate_information_tab"
title="Estate">
@ -753,6 +756,7 @@
</accordion_tab>
<accordion_tab
expanded="false"
height="320"
layout="topleft"
name="sales_tab"
title="For Sale">

View File

@ -635,7 +635,7 @@
left_delta="-230"
name="LightingDetailText"
top_pad="8"
width="128">
width="140">
Lighting detail:
</text>
<radio_group
@ -672,10 +672,10 @@
follows="left|top"
height="12"
layout="topleft"
left="360"
left="358"
name="TerrainDetailText"
top="465"
width="128">
width="155">
Terrain detail:
</text>
<radio_group

View File

@ -20,7 +20,7 @@
name="estate_help_text"
top="14"
word_wrap="true"
width="275">
width="250">
Changes to settings on this tab will affect all regions in the estate.
</text>
<text

View File

@ -187,6 +187,7 @@
pad_left="3"/>
<icons_combo_box.item
label="Adult"
name="Adult"
value="42">
<item.columns
halign="center"
@ -196,6 +197,7 @@
</icons_combo_box.item>
<icons_combo_box.item
label="Moderate"
name="Mature"
value="21">
<item.columns
halign="center"
@ -205,6 +207,7 @@
</icons_combo_box.item>
<icons_combo_box.item
label="General"
name="PG"
value="13">
<item.columns
halign="center"

View File

@ -77,7 +77,7 @@
top="0"
use_ellipses="true"
value="Object Profile"
width="275" />
width="290" />
<text
follows="top|left"
height="13"

View File

@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<!--All horizontal sliders are configured to have no highlighted track. See EXT-5939. -->
<slider_bar track_color="SliderTrackColor"
thumb_outline_color="SliderThumbOutlineColor"
thumb_center_color="SliderThumbCenterColor"
@ -7,6 +8,6 @@
thumb_image_disabled="SliderThumb_Disabled"
track_image_horizontal="SliderTrack_Horiz"
track_image_vertical="SliderTrack_Vert"
track_highlight_horizontal_image="SliderTrack_Horiz"
track_highlight_horizontal_image="transparent.j2c"
track_highlight_vertical_image="SliderTrack_Vert"
font="SansSerif" />

View File

@ -144,7 +144,7 @@ Asegúrate de que tu conexión a internet está funcionando adecuadamente.
Va a añadir miembros al rol de [ROLE_NAME].
No podrá removérseles de ese rol, sino que deberán renunciar a él por sí mismos.
¿Está seguro de que quiere seguir?
<usetemplate ignoretext="Confirma que vas a añadir un nuevo Propietario al grupo" name="okcancelignore" notext="No" yestext="Sí"/>
<usetemplate ignoretext="Confirmar que vas a añadir un nuevo propietario al grupo" name="okcancelignore" notext="No" yestext="Sí"/>
</notification>
<notification name="AssignDangerousActionWarning">
Va a añadir la capacidad &apos;[ACTION_NAME]&apos; al rol &apos;[ROLE_NAME]&apos;.
@ -1526,7 +1526,7 @@ Por favor, compruebe que tiene instalado el último visor, y vaya a la Base de C
<url name="url">
http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview/es
</url>
<usetemplate ignoretext="No puedo reclamar este terreno, dado el nivel de calificación" name="okcancelignore" notext="Cerrar" yestext="Ir a la Base de Conocimientos"/>
<usetemplate ignoretext="No puedo reclamar este terreno dado el nivel de calificación" name="okcancelignore" notext="Cerrar" yestext="Ir a la Base de Conocimientos"/>
</notification>
<notification name="LandClaimAccessBlocked_Notify">
Por su nivel de calificación, usted no puede reclamar este terreno.
@ -1550,7 +1550,7 @@ Por favor, compruebe que tiene instalado el último visor, y vaya a la Base de C
<url name="url">
http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview/es
</url>
<usetemplate ignoretext="No puedo comprar este terreno, dado el nivel de calificación" name="okcancelignore" notext="Cerrar" yestext="Ir a la Base de Conocimientos"/>
<usetemplate ignoretext="No puedo comprar este terreno dado el nivel de calificación" name="okcancelignore" notext="Cerrar" yestext="Ir a la Base de Conocimientos"/>
</notification>
<notification name="LandBuyAccessBlocked_Notify">
No puede comprar este terreno por su nivel de calificación.
@ -1731,7 +1731,7 @@ Dado que estos objetos tienen scripts, moverlos a su inventario puede provocar u
<usetemplate ignoretext="Abrir mi navegador para ver el historial de mi cuenta" name="okcancelignore" notext="Cancelar" yestext="Ir a la página"/>
</notification>
<notification name="ConfirmQuit">
¿Está seguro de que quiere salir?
¿Estás seguro de que quieres salir?
<usetemplate ignoretext="Confirmar antes de salir" name="okcancelignore" notext="No salir" yestext="Salir"/>
</notification>
<notification name="HelpReportAbuseEmailLL">

View File

@ -24,7 +24,7 @@
</layout_panel>
<layout_panel name="links">
<text name="create_new_account_text">
Registrarse
Registrarme
</text>
<text name="login_help">
¿Necesitas ayuda para conectarte?

View File

@ -20,7 +20,7 @@
(requiere reiniciar)
</text>
<text name="maturity_desired_prompt">
Quiero acceder a contenido calificado:
Quiero acceder a contenido:
</text>
<text name="maturity_desired_textbox"/>
<combo_box name="maturity_desired_combobox">
@ -62,6 +62,6 @@
<combo_box.item label="nunca" name="item4"/>
</combo_box>
<text name="text_box3">
Respuesta cuando estoy en el modo ocupado:
Respuesta cuando estoy en modo ocupado:
</text>
</panel>

View File

@ -6,11 +6,11 @@
<text name="QualitySpeed">
Calidad y velocidad:
</text>
<text left="95" name="FasterText">
El más rápido
<text name="FasterText">
Más rápido
</text>
<text name="BetterText">
Mejor
Más calidad
</text>
<text name="ShadersPrefText">
Bajo
@ -83,24 +83,23 @@
<text name="SkyMeshDetailText">
Bajo
</text>
<text name="LightingDetailText" width="135">
Detalles de la iluminación:
<text name="LightingDetailText">
Detalles de iluminación:
</text>
<radio_group name="LightingDetailRadio">
<radio_item label="Sólo el Sol y la Luna" name="SunMoon" value="0"/>
<radio_item label="Puntos de luz cercanos" name="LocalLights" value="1"/>
<radio_item label="Sólo el Sol y la Luna" name="SunMoon"/>
<radio_item label="Puntos de luz cercanos" name="LocalLights"/>
</radio_group>
<text name="TerrainDetailText">
Nivel de detalle del
terreno:
Detalle del terreno:
</text>
<radio_group left_delta="60" name="TerrainDetailRadio">
<radio_group name="TerrainDetailRadio">
<radio_item label="Bajo" name="0"/>
<radio_item label="Alto" name="2"/>
</radio_group>
</panel>
<button label="Aplicar" label_selected="Aplicar" name="Apply"/>
<button label="Por defecto" left="110" name="Defaults" width="195"/>
<button label="Por defecto" name="Defaults"/>
<button label="Avanzado" name="Advanced"/>
<button label="Hardware" label_selected="Hardware" left="315" name="GraphicsHardwareButton"/>
</panel>

View File

@ -7,10 +7,10 @@
<slider label="Efectos de sonido" name="SFX Volume"/>
<slider label="Música en streaming" name="Music Volume"/>
<check_box label="Activada" name="music_enabled"/>
<slider label="Medios de comunicación" name="Media Volume"/>
<check_box label="Activados" name="enable_media"/>
<slider label="Multimedia" name="Media Volume"/>
<check_box label="Activada" name="enable_media"/>
<slider label="Chat de voz" name="Voice Volume"/>
<check_box label="Activada" name="enable_voice_check"/>
<check_box label="Activado" name="enable_voice_check"/>
<check_box label="Permitir la ejecución automática de los media" name="media_auto_play_btn" tool_tip="Marcar esto para permitir la ejecución automática de los media" value="Sí"/>
<check_box label="Ejecutar para otros avatares los media anexados" name="media_show_on_others_btn" tool_tip="Al desmarcar esto se esconderán los media anexados a otros avatares cercanos" value="Sí"/>
<text name="voice_chat_settings">

View File

@ -1,5 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floaterland" title="À PROPOS DES TERRAINS">
<floater.string name="maturity_icon_general">
&quot;Parcel_PG_Dark&quot;
</floater.string>
<floater.string name="maturity_icon_moderate">
&quot;Parcel_M_Dark&quot;
</floater.string>
<floater.string name="maturity_icon_adult">
&quot;Parcel_R_Dark&quot;
</floater.string>
<floater.string name="Minutes">
[MINUTES] minutes
</floater.string>
@ -15,7 +24,7 @@
<tab_container name="landtab" tab_min_width="60">
<panel label="GÉNÉRAL" name="land_general_panel">
<panel.string name="new users only">
Nouveaux utilisateurs uniquement
Nouveaux résidents uniquement
</panel.string>
<panel.string name="anyone">
Tout le monde
@ -380,7 +389,7 @@ Seules les parcelles de grande taille peuvent apparaître dans la recherche.
<combo_box.item label="Lieu d&apos;arrivée fixe" name="LandingPoint"/>
<combo_box.item label="Lieu d&apos;arrivée libre" name="Anywhere"/>
</combo_box>
</panel>
</panel>
<panel label="MÉDIA" name="land_media_panel">
<text name="with media:" width="85">
Type :
@ -392,10 +401,6 @@ Seules les parcelles de grande taille peuvent apparaître dans la recherche.
</text>
<line_editor left="97" name="media_url"/>
<button label="Choisir" label_selected="Définir..." name="set_media_url"/>
<text name="CurrentURL:">
Page actuelle :
</text>
<button label="Réinitialiser..." label_selected="Réinitialiser..." name="reset_media_url" tool_tip="Actualiser l&apos;URL"/>
<check_box label="Masquer l&apos;URL" left="97" name="hide_media_url" tool_tip="Si vous cochez cette option, les personnes non autorisées à accéder aux infos de cette parcelle ne verront pas l&apos;URL du média. Cette option n&apos;est pas disponible pour les fichiers HTML."/>
<text name="Description:">
Description :

View File

@ -2,7 +2,7 @@
<floater name="godtools floater" title="OUTILS DIVINS">
<tab_container name="GodTools Tabs">
<panel label="Grille" name="grid">
<button label="Éjecter tous" label_selected="Éjecter tous" name="Kick all users" width="175"/>
<button label="Éjecter tous les résidents" label_selected="Éjecter tous les résidents" name="Kick all users" width="175"/>
<button label="Vider le cache cartographique de la région" label_selected="Vider le cache cartographique de la région" name="Flush This Region&apos;s Map Visibility Caches" width="285"/>
</panel>
<panel label="Région" name="region">

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<multi_floater name="im_floater" title="Message instantané">
<text name="only_user_message">
Vous êtes le seul participant à cette session.
Vous êtes le seul résident participant à cette session.
</text>
<text name="offline_message">
[FIRST] [LAST] est déconnecté(e).
@ -31,7 +31,7 @@
Un modérateur de groupe a désactivé votre chat écrit.
</string>
<string name="add_session_event">
Impossible d&apos;ajouter des participants à la session de chat avec [RECIPIENT].
Impossible d&apos;ajouter des résidents à la session de chat avec [RECIPIENT].
</string>
<string name="message_session_event">
Impossible d&apos;envoyer votre message à la session de chat avec [RECIPIENT].

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="publish_classified" title="Publication de l&apos;annonce">
<text name="explanation_text">
Votre petite annonce sera visible pendant une semaine à partir de sa date de publication.
Rappel : les frais liés aux annonces passées ne sont pas remboursables.
</text>
<spinner label="Coût de l&apos;annonce :" name="price_for_listing" tool_tip="Coût de lannonce." value="50"/>
<text name="l$_text" value="L$"/>
<text name="more_info_text">
En savoir plus (lien vers l&apos;aide sur les annonces)
</text>
<button label="Publier" name="publish_btn"/>
<button label="Annuler" name="cancel_btn"/>
</floater>

View File

@ -63,7 +63,7 @@
<check_box label="HUD" name="hud_check"/>
<check_box label="Garder ouvert après enregistrement" name="keep_open_check"/>
<check_box label="Conserver les proportions" name="keep_aspect_check"/>
<check_box label="Figer l'image (plein écran)" name="freeze_frame_check"/>
<check_box label="Figer l&apos;image (plein écran)" name="freeze_frame_check"/>
<button label="Rafraîchir" name="new_snapshot_btn"/>
<check_box label="Rafraîchissement automatique" name="auto_snapshot_check"/>
<button label="Enregistrer ([AMOUNT] L$)" name="upload_btn" width="118"/>

View File

@ -5,20 +5,17 @@
Légende
</text>
</panel>
<panel>
<button label="Afficher mon emplacement" label_selected="Afficher mon emplacement" name="Show My Location" tool_tip="Centrer la carte sur l&apos;emplacement de mon avatar"/>
<panel name="layout_panel_2">
<button name="Show My Location" tool_tip="Centrer la carte sur lemplacement de mon avatar"/>
<text name="me_label">
Moi
</text>
<check_box label="Résident" name="people_chk"/>
<text name="person_label">
Résident
</text>
<check_box label="Infohub" name="infohub_chk"/>
<text name="infohub_label">
Infohub
</text>
<check_box label="Terrain à vendre" name="land_for_sale_chk"/>
<text name="land_sale_label">
Vente de terrains
</text>
@ -28,55 +25,46 @@
<text name="auction_label">
enchères
</text>
<button label="Aller chez moi" label_selected="Aller chez moi" name="Go Home" tool_tip="Me téléporter jusqu&apos;à mon domicile"/>
<button name="Go Home" tool_tip="Me téléporter jusquà mon domicile"/>
<text name="Home_label">
Domicile
</text>
<text name="events_label">
Événements :
</text>
<check_box label="PG" name="event_chk"/>
<text name="pg_label">
Général
</text>
<check_box initial_value="true" label="Mature" name="event_mature_chk"/>
<check_box initial_value="true" name="event_mature_chk"/>
<text name="mature_label">
Modéré
</text>
<check_box label="Adult" name="event_adult_chk"/>
<text name="adult_label">
Adulte
</text>
</panel>
<panel>
<panel name="layout_panel_3">
<text name="find_on_map_label">
Situer sur la carte
</text>
</panel>
<panel>
<panel name="layout_panel_4">
<combo_box label="Amis connectés" name="friend combo" tool_tip="Afficher les amis sur la carte">
<combo_box.item label="Mes amis connectés" name="item1"/>
</combo_box>
<combo_box label="Mes repères" name="landmark combo" tool_tip="Repère à afficher sur la carte">
<combo_box.item label="Mes repères" name="item1"/>
</combo_box>
<search_editor label="Régions par nom" name="location" tool_tip="Saisissez le nom d&apos;une région"/>
<button label="Trouver" label_selected="&gt;" name="DoSearch" tool_tip="Recherchez sur la carte"/>
<search_editor label="Régions par nom" name="location" tool_tip="Tapez le nom d&apos;une région"/>
<button label="Trouver" name="DoSearch" tool_tip="Rechercher une région"/>
<button name="Clear" tool_tip="Effacer les lignes de suivi et réinitialiser la carte"/>
<scroll_list name="search_results">
<scroll_list.columns label="" name="icon"/>
<scroll_list.columns label="" name="sim_name"/>
</scroll_list>
<button label="Téléporter" label_selected="Téléporter" name="Teleport" tool_tip="Téléporter à l&apos;endroit sélectionné"/>
<button label="Copier la SLurl" name="copy_slurl" tool_tip="Copie l&apos;emplacement actuel sous la forme d&apos;une SLurl à utiliser sur le Web."/>
<button label="Afficher la sélection" label_selected="Afficher la destination" name="Show Destination" tool_tip="Centrer la carte sur l&apos;endroit sélectionné"/>
<button label="Téléporter" name="Teleport" tool_tip="Me téléporter à l&apos;emplacement sélectionné"/>
<button label="Copier la SLurl" name="copy_slurl" tool_tip="Copie lemplacement actuel sous la forme dune SLurl à utiliser sur le Web."/>
<button label="Afficher la sélection" name="Show Destination" tool_tip="Centrer la carte sur l&apos;emplacement sélectionné"/>
</panel>
<panel>
<panel name="layout_panel_5">
<text name="zoom_label">
Zoomer
</text>
</panel>
<panel>
<slider label="Zoom" name="zoom slider"/>
</panel>
</floater>

View File

@ -8,7 +8,7 @@
<menu_item_call label="Inviter dans le groupe" name="Invite..."/>
<menu_item_call label="Ignorer" name="Avatar Mute"/>
<menu_item_call label="Signaler" name="abuse"/>
<menu_item_call label="Geler" name="Freeze..."/>
<menu_item_call label="Figer" name="Freeze..."/>
<menu_item_call label="Expulser" name="Eject..."/>
<menu_item_call label="Débogage" name="Debug..."/>
<menu_item_call label="Zoomer en avant" name="Zoom In"/>

View File

@ -8,7 +8,7 @@
<menu_item_call label="Inviter dans le groupe" name="Invite..."/>
<menu_item_call label="Ignorer" name="Avatar Mute"/>
<menu_item_call label="Signaler" name="abuse"/>
<menu_item_call label="Geler" name="Freeze..."/>
<menu_item_call label="Figer" name="Freeze..."/>
<menu_item_call label="Expulser" name="Eject..."/>
<menu_item_call label="Débogage" name="Debug..."/>
<menu_item_call label="Zoomer en avant" name="Zoom In"/>

View File

@ -9,7 +9,7 @@
<menu_item_call label="Ignorer" name="block"/>
<menu_item_call label="Ne plus ignorer" name="unblock"/>
<menu_item_call label="Signaler" name="report"/>
<menu_item_call label="Geler" name="freeze"/>
<menu_item_call label="Figer" name="freeze"/>
<menu_item_call label="Expulser" name="eject"/>
<menu_item_call label="Débogage" name="debug"/>
<menu_item_call label="Situer sur la carte" name="find_on_map"/>

View File

@ -5,7 +5,7 @@
<menu_item_call label="Ignorer" name="block"/>
<menu_item_call label="Ne plus ignorer" name="unblock"/>
<menu_item_call label="Éjecter" name="kick"/>
<menu_item_call label="Geler" name="freeze"/>
<menu_item_call label="Dégeler" name="unfreeze"/>
<menu_item_call label="Figer" name="freeze"/>
<menu_item_call label="Libérer" name="unfreeze"/>
<menu_item_call label="Représentant du service consommateur" name="csr"/>
</toggleable_menu>

View File

@ -107,7 +107,7 @@ Veuillez ne sélectionner qu&apos;un seul objet.
</notification>
<notification name="FriendsAndGroupsOnly">
Les résidents qui ne sont pas vos amis ne sauront pas que vous avez choisi d&apos;ignorer leurs appels et leurs messages instantanés.
<usetemplate name="okbutton" yestext="Oui"/>
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="GrantModifyRights">
Lorsque vous accordez des droits d&apos;édition à un autre résident, vous lui permettez de changer, supprimer ou prendre n&apos;importe lequel de vos objets dans le Monde. Réfléchissez bien avant d&apos;accorder ces droits.
@ -495,14 +495,14 @@ Souhaitez-vous vraiment donner ces objets ?
Vous n&apos;êtes pas autorisé à transférer le dossier sélectionné.
</notification>
<notification name="FreezeAvatar">
Geler cet avatar ?
Figer cet avatar ?
Il ou elle ne pourra temporairement plus bouger, chatter, ou interagir dans le Monde.
<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Dégeler" yestext="Geler"/>
<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Libérer" yestext="Figer"/>
</notification>
<notification name="FreezeAvatarFullname">
Geler [AVATAR_NAME] ?
Figer [AVATAR_NAME] ?
Il ou elle ne pourra temporairement plus bouger, chatter, ou interagir dans le Monde.
<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Dégeler" yestext="Geler"/>
<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Libérer" yestext="Figerf"/>
</notification>
<notification name="EjectAvatarFullname">
Expulser [AVATAR_NAME] de votre terrain ?
@ -1295,8 +1295,8 @@ Quitter le groupe ?
<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
</notification>
<notification name="ConfirmKick">
Souhaitez-vous vraiment éjecter tous les utilisateurs de la grille ?
<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Éjecter tous"/>
Souhaitez-vous vraiment éjecter tous les résidents de la grille ?
<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Éjecter tous les résidents"/>
</notification>
<notification name="MuteLinden">
Désolé, vous ne pouvez pas ignorer un Linden.
@ -1336,7 +1336,7 @@ Les chats et les messages instantanés ne s&apos;afficheront pas. Les messages i
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="KickUser">
Éjecter cet utilisateur avec quel message ?
Éjecter ce résident avec quel message ?
<form name="form">
<input name="message">
Un administrateur vous a déconnecté.
@ -1356,20 +1356,20 @@ Les chats et les messages instantanés ne s&apos;afficheront pas. Les messages i
</form>
</notification>
<notification name="FreezeUser">
Geler cet utilisateur avec quel message ?
Figer ce résident avec quel message ?
<form name="form">
<input name="message">
Vous avez été gelé. Vous ne pouvez ni bouger ni chatter. Un administrateur va vous envoyer un message instantané (IM).
Vous avez été figé. Vous ne pouvez ni bouger ni chatter. Un administrateur va vous envoyer un message instantané (IM).
</input>
<button name="OK" text="OK"/>
<button name="Cancel" text="Annuler"/>
</form>
</notification>
<notification name="UnFreezeUser">
Dégeler cet utilisateur avec quel message ?
Libérer ce résident avec quel message ?
<form name="form">
<input name="message">
Vous n&apos;êtes plus gelé.
Vous n&apos;êtes plus figé.
</input>
<button name="OK" text="OK"/>
<button name="Cancel" text="Annuler"/>
@ -1386,7 +1386,7 @@ Les chats et les messages instantanés ne s&apos;afficheront pas. Les messages i
</form>
</notification>
<notification name="OfferTeleportFromGod">
Demander au résident de venir vous rejoindre ?
Exiger du résident qu&apos;il vienne vous rejoindre ?
<form name="form">
<input name="message">
On se rejoint à [REGION] ?
@ -1418,7 +1418,7 @@ Les chats et les messages instantanés ne s&apos;afficheront pas. Les messages i
<notification label="Modifier un domaine Linden" name="ChangeLindenEstate">
Vous vous apprêtez à modifier un domaine appartenant aux Lindens (continent, zone réservée aux ados, orientation etc.).
Cela est extrêmement délicat car l&apos;expérience des résidents est en jeu. Sur le continent, cela modifiera des milliers de régions et sera difficile à digérer pour le serveur.
Cela est extrêmement délicat car l&apos;expérience des résidents est en jeu. Sur le continent, cette action modifiera des milliers de régions et sera difficile à digérer pour le serveur.
Continuer ?
<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
@ -2415,7 +2415,7 @@ Accepter cette requête ?
</form>
</notification>
<notification name="ScriptToast">
[FIRST] [LAST]&apos;s &apos;[TITLE]&apos; demande la participation de l&apos;utilisateur.
Le/La [TITLE] de [FIRST] [LAST] demande la participation du résident.
<form name="form">
<button name="Open" text="Ouvrir la boîte de dialogue"/>
<button name="Ignore" text="Ignorer"/>

View File

@ -9,16 +9,46 @@
<panel.string name="l$_price">
[PRICE] L$
</panel.string>
<panel.string name="click_through_text_fmt">
[TELEPORT] téléporter, [MAP] carte, [PROFILE] profil
</panel.string>
<panel.string name="date_fmt">
[day,datetime,slt]/[mthnum,datetime,slt]/[year,datetime,slt]
</panel.string>
<panel.string name="auto_renew_on">
Activé
</panel.string>
<panel.string name="auto_renew_off">
Désactivé
</panel.string>
<text name="title" value="Infos sur la petite annonce"/>
<scroll_container name="profile_scroll">
<panel name="scroll_content_panel">
<text_editor name="classified_name" value="[name]"/>
<text name="classified_location_label" value="Emplacement :"/>
<text_editor name="classified_location" value="[loading...]"/>
<text name="content_type_label" value="Type de contenu :"/>
<text_editor name="content_type" value="[content type]"/>
<text name="category_label" value="Catégorie :"/>
<text_editor name="category" value="[category]"/>
<check_box label="Renouvellement automatique toutes les semaines" name="auto_renew"/>
<text_editor name="price_for_listing" tool_tip="Coût de l&apos;annonce."/>
<text_editor name="classified_desc" value="[description]"/>
<text name="creation_date_label" value="Date de création :"/>
<text_editor name="creation_date" tool_tip="Date de création" value="[date]"/>
<text name="price_for_listing_label" value="Coût de l&apos;annonce :"/>
<text_editor name="price_for_listing" tool_tip="Coût de l&apos;annonce." value="[prix]"/>
<layout_stack name="descr_stack">
<layout_panel name="clickthrough_layout_panel">
<text name="click_through_label" value="Clics :"/>
<text_editor name="click_through_text" tool_tip="Parcourir les données en cliquant" value="[clics]"/>
</layout_panel>
<layout_panel name="price_layout_panel">
<text name="auto_renew_label" value="Renouvellement automatique :"/>
<text name="auto_renew" value="Activé"/>
</layout_panel>
<layout_panel name="descr_layout_panel">
<text name="classified_desc_label" value="Description :"/>
<text_editor name="classified_desc" value="[description]"/>
</layout_panel>
</layout_stack>
</panel>
</scroll_container>
<panel name="buttons">

Some files were not shown because too many files have changed in this diff Show More