Refactoring, pull FS structs out of LL files

Nicky 2014-09-29 21:28:55 +02:00
parent 365aeed15c
commit a06a012abc
8 changed files with 352 additions and 241 deletions

View File

@ -141,6 +141,7 @@ set(llui_HEADER_FILES
CMakeLists.txt
fsregistrarutils.h
fssearchablecontrol.h
llaccordionctrl.h
llaccordionctrltab.h

View File

@ -0,0 +1,70 @@
#ifndef FS_SEARCHABLE_CONTROL_H
#define FS_SEARCHABLE_CONTROL_H
/**
* $LicenseInfo:firstyear=2014&license=fsviewerlgpl$
* Phoenix Firestorm Viewer Source Code
* Copyright (C) 2014, Nicky Dasmijn
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
* http://www.firestormviewer.org
* $/LicenseInfo$
*/
#include "lluicolortable.h"
#include "lluicolor.h"
namespace nd
{
namespace ui
{
class SearchableControl
{
mutable bool mIsHighlighed;
public:
SearchableControl()
: mIsHighlighed( false )
{ }
virtual ~SearchableControl()
{ }
LLColor4 getHighlightColor( ) const
{
static LLUIColor highlight_color = LLUIColorTable::instance().getColor("SearchableControlHighlightColor", LLColor4::red);
return highlight_color.get();
}
void setHighlighted( bool aVal ) const
{
mIsHighlighed = aVal;
onSetHighlight( );
}
bool getHighlighted( ) const
{ return mIsHighlighed; }
std::string getSearchText() const
{ return _getSearchText(); }
protected:
virtual std::string _getSearchText() const = 0;
virtual void onSetHighlight( ) const
{ }
};
}
}
#endif

View File

@ -38,49 +38,11 @@
#include "llview.h"
#include "llviewmodel.h" // *TODO move dependency to .cpp file
#include "fssearchablecontrol.h"
const BOOL TAKE_FOCUS_YES = TRUE;
const BOOL TAKE_FOCUS_NO = FALSE;
// <FS:ND> To search in prefs. A control which can advertise a searchable text and can be highlighted for matching.
namespace nd
{
namespace ui
{
class SearchableControl
{
mutable bool mIsHighlighed;
public:
SearchableControl()
: mIsHighlighed( false )
{ }
virtual ~SearchableControl()
{ }
LLColor4 getHighlightColor( ) const
{
static LLUIColor highlight_color = LLUIColorTable::instance().getColor("SearchableControlHighlightColor", LLColor4::red);
return highlight_color.get();
}
void setHighlighted( bool aVal ) const
{
mIsHighlighed = aVal;
onSetHighlight( );
}
bool getHighlighted( ) const
{ return mIsHighlighed; }
std::string getSearchText() const
{ return _getSearchText(); }
protected:
virtual std::string _getSearchText() const = 0;
virtual void onSetHighlight( ) const
{ }
};
}
}
// </FS:ND>
class LLUICtrl
: public LLView, public boost::signals2::trackable
{

View File

@ -195,6 +195,7 @@ set(viewer_SOURCE_FILES
fsradarmenu.cpp
fsscriptlibrary.cpp
fsscrolllistctrl.cpp
fssearchableui.cpp
fsslurlcommand.cpp
fswsassetblacklist.cpp
groupchatlistener.cpp
@ -907,6 +908,7 @@ set(viewer_HEADER_FILES
fsradarmenu.h
fsscriptlibrary.h
fsscrolllistctrl.h
fssearchableui.h
fsslurl.h
fsslurlcommand.h
fswsassetblacklist.h

View File

@ -0,0 +1,153 @@
/**
* $LicenseInfo:firstyear=2014&license=fsviewerlgpl$
* Phoenix Firestorm Viewer Source Code
* Copyright (C) 2014, Nicky Dasmijn
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
* http://www.firestormviewer.org
* $/LicenseInfo$
*/
#include "llviewerprecompiledheaders.h"
#include "fssearchableui.h"
#include "llview.h"
#include "lltabcontainer.h"
#include "llmenugl.h"
nd::prefs::SearchableItem::~SearchableItem()
{}
void nd::prefs::SearchableItem::setNotHighlighted()
{
mCtrl->setHighlighted( false );
}
bool nd::prefs::SearchableItem::hightlightAndHide( LLWString const &aFilter )
{
if( mCtrl->getHighlighted() )
return true;
LLView const *pView = dynamic_cast< LLView const* >( mCtrl );
if( pView && !pView->getVisible() )
return false;
if( aFilter.empty() )
{
mCtrl->setHighlighted( false );
return true;
}
if( mLabel.find( aFilter ) != LLWString::npos )
{
mCtrl->setHighlighted( true );
return true;
}
return false;
}
nd::prefs::PanelData::~PanelData()
{}
bool nd::prefs::PanelData::hightlightAndHide( LLWString const &aFilter )
{
for( tSearchableItemList::iterator itr = mChildren.begin(); itr != mChildren.end(); ++itr )
(*itr)->setNotHighlighted( );
bool bVisible(false);
for( tSearchableItemList::iterator itr = mChildren.begin(); itr != mChildren.end(); ++itr )
bVisible |= (*itr)->hightlightAndHide( aFilter );
for( tPanelDataList::iterator itr = mChildPanel.begin(); itr != mChildPanel.end(); ++itr )
bVisible |= (*itr)->hightlightAndHide( aFilter );
return bVisible;
}
bool nd::prefs::TabContainerData::hightlightAndHide( LLWString const &aFilter )
{
for( tSearchableItemList::iterator itr = mChildren.begin(); itr != mChildren.end(); ++itr )
(*itr)->setNotHighlighted( );
bool bVisible(false);
for( tSearchableItemList::iterator itr = mChildren.begin(); itr != mChildren.end(); ++itr )
bVisible |= (*itr)->hightlightAndHide( aFilter );
for( tPanelDataList::iterator itr = mChildPanel.begin(); itr != mChildPanel.end(); ++itr )
{
bool bPanelVisible = (*itr)->hightlightAndHide( aFilter );
if( (*itr)->mPanel )
mTabContainer->setTabVisibility( (*itr)->mPanel, bPanelVisible );
bVisible |= bPanelVisible;
}
return bVisible;
}
nd::statusbar::SearchableItem::SearchableItem()
: mMenu(0)
, mCtrl(0)
, mWasHiddenBySearch( false )
{ }
void nd::statusbar::SearchableItem::setNotHighlighted( )
{
for( tSearchableItemList::iterator itr = mChildren.begin(); itr != mChildren.end(); ++itr )
(*itr)->setNotHighlighted( );
if( mCtrl )
{
mCtrl->setHighlighted( false );
if( mWasHiddenBySearch )
mMenu->setVisible( TRUE );
}
}
bool nd::statusbar::SearchableItem::hightlightAndHide( LLWString const &aFilter )
{
if( mMenu && !mMenu->getVisible() && !mWasHiddenBySearch )
return false;
setNotHighlighted( );
bool bVisible(false);
for( tSearchableItemList::iterator itr = mChildren.begin(); itr != mChildren.end(); ++itr )
bVisible |= (*itr)->hightlightAndHide( aFilter );
if( aFilter.empty() )
{
if( mCtrl )
mCtrl->setHighlighted( false );
return true;
}
if( mLabel.find( aFilter ) != LLWString::npos )
{
if( mCtrl )
mCtrl->setHighlighted( true );
return true;
}
if( mCtrl && !bVisible )
{
mWasHiddenBySearch = true;
mMenu->setVisible(FALSE);
}
return bVisible;
}

View File

@ -0,0 +1,120 @@
#ifndef FS_SEARCHABLE_UI_H
#define FS_SEARCHABLE_UI_H
/**
* $LicenseInfo:firstyear=2014&license=fsviewerlgpl$
* Phoenix Firestorm Viewer Source Code
* Copyright (C) 2014, Nicky Dasmijn
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
* http://www.firestormviewer.org
* $/LicenseInfo$
*/
class LLMenuItemGL;
class LLView;
class LLPanel;
class LLTabContainer;
#include "fssearchablecontrol.h"
namespace nd
{
namespace prefs
{
struct SearchableItem;
struct PanelData;
struct TabContainerData;
typedef boost::shared_ptr< SearchableItem > SearchableItemPtr;
typedef boost::shared_ptr< PanelData > PanelDataPtr;
typedef boost::shared_ptr< TabContainerData > TabContainerDataPtr;
typedef std::vector< TabContainerData > tTabContainerDataList;
typedef std::vector< SearchableItemPtr > tSearchableItemList;
typedef std::vector< PanelDataPtr > tPanelDataList;
struct SearchableItem
{
LLWString mLabel;
LLView const *mView;
nd::ui::SearchableControl const *mCtrl;
std::vector< boost::shared_ptr< SearchableItem > > mChildren;
virtual ~SearchableItem();
void setNotHighlighted();
virtual bool hightlightAndHide( LLWString const &aFilter );
};
struct PanelData
{
LLPanel const *mPanel;
std::string mLabel;
std::vector< boost::shared_ptr< SearchableItem > > mChildren;
std::vector< boost::shared_ptr< PanelData > > mChildPanel;
virtual ~PanelData();
virtual bool hightlightAndHide( LLWString const &aFilter );
};
struct TabContainerData: public PanelData
{
LLTabContainer *mTabContainer;
virtual bool hightlightAndHide( LLWString const &aFilter );
};
struct SearchData
{
TabContainerDataPtr mRootTab;
LLWString mLastFilter;
};
}
namespace statusbar
{
struct SearchableItem;
typedef boost::shared_ptr< SearchableItem > SearchableItemPtr;
typedef std::vector< SearchableItemPtr > tSearchableItemList;
struct SearchableItem
{
LLWString mLabel;
LLMenuItemGL *mMenu;
tSearchableItemList mChildren;
nd::ui::SearchableControl const *mCtrl;
bool mWasHiddenBySearch;
SearchableItem();
void setNotHighlighted( );
bool hightlightAndHide( LLWString const &aFilter );
};
struct SearchData
{
SearchableItemPtr mRootMenu;
LLWString mLastFilter;
};
}
}
#endif

View File

@ -137,127 +137,7 @@
#include "NACLantispam.h"
#include "../llcrashlogger/llcrashlogger.h"
// <FS:ND> To search in prefs: Data that is collected from all floater
namespace nd
{
namespace prefs
{
struct SearchableItem;
struct PanelData;
struct TabContainerData;
typedef boost::shared_ptr< SearchableItem > SearchableItemPtr;
typedef boost::shared_ptr< PanelData > PanelDataPtr;
typedef boost::shared_ptr< TabContainerData > TabContainerDataPtr;
typedef std::vector< TabContainerData > tTabContainerDataList;
typedef std::vector< SearchableItemPtr > tSearchableItemList;
typedef std::vector< PanelDataPtr > tPanelDataList;
struct SearchableItem
{
LLWString mLabel;
LLView const *mView;
nd::ui::SearchableControl const *mCtrl;
std::vector< boost::shared_ptr< SearchableItem > > mChildren;
virtual ~SearchableItem()
{}
void setNotHighlighted()
{
mCtrl->setHighlighted( false );
}
virtual bool hightlightAndHide( LLWString const &aFilter )
{
if( mCtrl->getHighlighted() )
return true;
LLView const *pView = dynamic_cast< LLView const* >( mCtrl );
if( pView && !pView->getVisible() )
return false;
if( aFilter.empty() )
{
mCtrl->setHighlighted( false );
return true;
}
if( mLabel.find( aFilter ) != LLWString::npos )
{
mCtrl->setHighlighted( true );
return true;
}
return false;
}
};
struct PanelData
{
LLPanel const *mPanel;
std::string mLabel;
std::vector< boost::shared_ptr< SearchableItem > > mChildren;
std::vector< boost::shared_ptr< PanelData > > mChildPanel;
virtual ~PanelData()
{}
virtual bool hightlightAndHide( LLWString const &aFilter )
{
for( tSearchableItemList::iterator itr = mChildren.begin(); itr != mChildren.end(); ++itr )
(*itr)->setNotHighlighted( );
bool bVisible(false);
for( tSearchableItemList::iterator itr = mChildren.begin(); itr != mChildren.end(); ++itr )
bVisible |= (*itr)->hightlightAndHide( aFilter );
for( tPanelDataList::iterator itr = mChildPanel.begin(); itr != mChildPanel.end(); ++itr )
bVisible |= (*itr)->hightlightAndHide( aFilter );
return bVisible;
}
};
struct TabContainerData: public PanelData
{
LLTabContainer *mTabContainer;
virtual bool hightlightAndHide( LLWString const &aFilter )
{
for( tSearchableItemList::iterator itr = mChildren.begin(); itr != mChildren.end(); ++itr )
(*itr)->setNotHighlighted( );
bool bVisible(false);
for( tSearchableItemList::iterator itr = mChildren.begin(); itr != mChildren.end(); ++itr )
bVisible |= (*itr)->hightlightAndHide( aFilter );
for( tPanelDataList::iterator itr = mChildPanel.begin(); itr != mChildPanel.end(); ++itr )
{
bool bPanelVisible = (*itr)->hightlightAndHide( aFilter );
if( (*itr)->mPanel )
mTabContainer->setTabVisibility( (*itr)->mPanel, bPanelVisible );
bVisible |= bPanelVisible;
}
return bVisible;
}
};
struct SearchData
{
~SearchData()
{
}
TabContainerDataPtr mRootTab;
LLWString mLastFilter;
};
}
}
// </FS:ND>
#include "fssearchableui.h"
const F32 MAX_USER_FAR_CLIP = 512.f;
const F32 MIN_USER_FAR_CLIP = 64.f;

View File

@ -107,90 +107,13 @@
#include "llviewernetwork.h"
#endif // OPENSIM
// </FS:CR>
#include "fssearchableui.h"
//
// Globals
//
namespace nd
{
namespace statusbar
{
struct SearchableItem;
typedef boost::shared_ptr< SearchableItem > SearchableItemPtr;
typedef std::vector< SearchableItemPtr > tSearchableItemList;
struct SearchableItem
{
LLWString mLabel;
LLMenuItemGL *mMenu;
tSearchableItemList mChildren;
nd::ui::SearchableControl const *mCtrl;
bool mWasHiddenBySearch;
SearchableItem()
: mMenu(0)
, mCtrl(0)
, mWasHiddenBySearch( false )
{ }
void setNotHighlighted( )
{
for( tSearchableItemList::iterator itr = mChildren.begin(); itr != mChildren.end(); ++itr )
(*itr)->setNotHighlighted( );
if( mCtrl )
{
mCtrl->setHighlighted( false );
if( mWasHiddenBySearch )
mMenu->setVisible( TRUE );
}
}
bool hightlightAndHide( LLWString const &aFilter )
{
if( mMenu && !mMenu->getVisible() && !mWasHiddenBySearch )
return false;
setNotHighlighted( );
bool bVisible(false);
for( tSearchableItemList::iterator itr = mChildren.begin(); itr != mChildren.end(); ++itr )
bVisible |= (*itr)->hightlightAndHide( aFilter );
if( aFilter.empty() )
{
if( mCtrl )
mCtrl->setHighlighted( false );
return true;
}
if( mLabel.find( aFilter ) != LLWString::npos )
{
if( mCtrl )
mCtrl->setHighlighted( true );
return true;
}
if( mCtrl && !bVisible )
{
mWasHiddenBySearch = true;
mMenu->setVisible(FALSE);
}
return bVisible;
}
};
struct SearchData
{
SearchableItemPtr mRootMenu;
LLWString mLastFilter;
};
}
}
LLStatusBar *gStatusBar = NULL;
S32 STATUS_BAR_HEIGHT = 26;
extern S32 MENU_BAR_HEIGHT;