summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/llui/llcommandmanager.h2
-rw-r--r--indra/llui/lltoolbar.h3
-rw-r--r--indra/llui/lltoolbarview.cpp172
-rw-r--r--indra/llui/lltoolbarview.h3
4 files changed, 124 insertions, 56 deletions
diff --git a/indra/llui/llcommandmanager.h b/indra/llui/llcommandmanager.h
index 8435d915f3..4781f77177 100644
--- a/indra/llui/llcommandmanager.h
+++ b/indra/llui/llcommandmanager.h
@@ -81,6 +81,8 @@ private:
std::string mName;
};
+typedef std::list<LLCommandId> command_id_list_t;
+
class LLCommand
{
public:
diff --git a/indra/llui/lltoolbar.h b/indra/llui/lltoolbar.h
index 02db58128c..8e484c7e13 100644
--- a/indra/llui/lltoolbar.h
+++ b/indra/llui/lltoolbar.h
@@ -123,6 +123,7 @@ public:
bool addCommand(const LLCommandId& commandId);
bool hasCommand(const LLCommandId& commandId) const;
bool enableCommand(const LLCommandId& commandId, bool enabled);
+ command_id_list_t& getCommandsList() { return mButtonCommands; }
protected:
friend class LLUICtrlFactory;
@@ -143,7 +144,7 @@ private:
const bool mReadOnly;
std::list<LLToolBarButton*> mButtons;
- std::list<LLCommandId> mButtonCommands;
+ command_id_list_t mButtonCommands;
LLToolBarEnums::ButtonType mButtonType;
LLLayoutStack* mCenteringStack;
LLLayoutStack* mWrapStack;
diff --git a/indra/llui/lltoolbarview.cpp b/indra/llui/lltoolbarview.cpp
index 73c8c99418..aee7ffa517 100644
--- a/indra/llui/lltoolbarview.cpp
+++ b/indra/llui/lltoolbarview.cpp
@@ -50,59 +50,6 @@ LLToolBarView::ToolbarSet::ToolbarSet()
bottom_toolbar("bottom_toolbar")
{}
-bool LLToolBarView::load()
-{
- LLToolBarView::ToolbarSet toolbar_set;
-
- // Load the default toolbars.xml file
- // *TODO : pick up the user's toolbar setting if existing
- std::string toolbar_file = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "toolbars.xml");
-
- LLXMLNodePtr root;
- if(!LLXMLNode::parseFile(toolbar_file, root, NULL))
- {
- llerrs << "Unable to load toolbars from file: " << toolbar_file << llendl;
- return false;
- }
- if(!root->hasName("toolbars"))
- {
- llwarns << toolbar_file << " is not a valid toolbars definition file" << llendl;
- return false;
- }
-
- // Parse the toolbar settings
- LLXUIParser parser;
- parser.readXUI(root, toolbar_set, toolbar_file);
- if (!toolbar_set.validateBlock())
- {
- llerrs << "Unable to validate toolbars from file: " << toolbar_file << llendl;
- return false;
- }
-
- // Add commands to each toolbar
- if (toolbar_set.left_toolbar.isProvided() && mToolbarLeft)
- {
- BOOST_FOREACH(LLCommandId::Params& command, toolbar_set.left_toolbar.commands)
- {
- addCommand(LLCommandId(command),mToolbarLeft);
- }
- }
- if (toolbar_set.right_toolbar.isProvided() && mToolbarRight)
- {
- BOOST_FOREACH(LLCommandId::Params& command, toolbar_set.right_toolbar.commands)
- {
- addCommand(LLCommandId(command),mToolbarRight);
- }
- }
- if (toolbar_set.bottom_toolbar.isProvided() && mToolbarBottom)
- {
- BOOST_FOREACH(LLCommandId::Params& command, toolbar_set.bottom_toolbar.commands)
- {
- addCommand(LLCommandId(command),mToolbarBottom);
- }
- }
- return true;
-}
LLToolBarView::LLToolBarView(const LLToolBarView::Params& p)
: LLUICtrl(p),
@@ -120,6 +67,7 @@ void LLToolBarView::initFromParams(const LLToolBarView::Params& p)
LLToolBarView::~LLToolBarView()
{
+ saveToolbars();
}
BOOL LLToolBarView::postBuild()
@@ -129,7 +77,7 @@ BOOL LLToolBarView::postBuild()
mToolbarBottom = getChild<LLToolBar>("toolbar_bottom");
// Load the toolbars from the settings
- load();
+ loadToolbars();
return TRUE;
}
@@ -167,6 +115,122 @@ bool LLToolBarView::addCommand(const LLCommandId& command, LLToolBar* toolbar)
return true;
}
+bool LLToolBarView::loadToolbars()
+{
+ LLToolBarView::ToolbarSet toolbar_set;
+
+ // Load the default toolbars.xml file
+ // *TODO : pick up the user's toolbar setting if existing
+ std::string toolbar_file = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "toolbars.xml");
+
+ LLXMLNodePtr root;
+ if(!LLXMLNode::parseFile(toolbar_file, root, NULL))
+ {
+ llerrs << "Unable to load toolbars from file: " << toolbar_file << llendl;
+ return false;
+ }
+ if(!root->hasName("toolbars"))
+ {
+ llwarns << toolbar_file << " is not a valid toolbars definition file" << llendl;
+ return false;
+ }
+
+ // Parse the toolbar settings
+ LLXUIParser parser;
+ parser.readXUI(root, toolbar_set, toolbar_file);
+ if (!toolbar_set.validateBlock())
+ {
+ llerrs << "Unable to validate toolbars from file: " << toolbar_file << llendl;
+ return false;
+ }
+
+ // Add commands to each toolbar
+ if (toolbar_set.left_toolbar.isProvided() && mToolbarLeft)
+ {
+ BOOST_FOREACH(LLCommandId::Params& command, toolbar_set.left_toolbar.commands)
+ {
+ addCommand(LLCommandId(command),mToolbarLeft);
+ }
+ }
+ if (toolbar_set.right_toolbar.isProvided() && mToolbarRight)
+ {
+ BOOST_FOREACH(LLCommandId::Params& command, toolbar_set.right_toolbar.commands)
+ {
+ addCommand(LLCommandId(command),mToolbarRight);
+ }
+ }
+ if (toolbar_set.bottom_toolbar.isProvided() && mToolbarBottom)
+ {
+ BOOST_FOREACH(LLCommandId::Params& command, toolbar_set.bottom_toolbar.commands)
+ {
+ addCommand(LLCommandId(command),mToolbarBottom);
+ }
+ }
+ return true;
+}
+
+void LLToolBarView::saveToolbars() const
+{
+ // Build the parameter tree from the toolbar data
+ LLToolBarView::ToolbarSet toolbar_set;
+
+ // *TODO : factorize that code a bit...
+ if (mToolbarLeft)
+ {
+ command_id_list_t& command_list = mToolbarLeft->getCommandsList();
+ for (command_id_list_t::const_iterator it = command_list.begin();
+ it != command_list.end();
+ ++it)
+ {
+ LLCommandId::Params command;
+ command.name = it->name();
+ toolbar_set.left_toolbar.commands.add(command);
+ }
+ }
+ if (mToolbarRight)
+ {
+ command_id_list_t& command_list = mToolbarRight->getCommandsList();
+ for (command_id_list_t::const_iterator it = command_list.begin();
+ it != command_list.end();
+ ++it)
+ {
+ LLCommandId::Params command;
+ command.name = it->name();
+ toolbar_set.right_toolbar.commands.add(command);
+ }
+ }
+ if (mToolbarBottom)
+ {
+ command_id_list_t& command_list = mToolbarBottom->getCommandsList();
+ for (command_id_list_t::const_iterator it = command_list.begin();
+ it != command_list.end();
+ ++it)
+ {
+ LLCommandId::Params command;
+ command.name = it->name();
+ toolbar_set.bottom_toolbar.commands.add(command);
+ }
+ }
+
+ // Serialize the parameter tree
+ LLXMLNodePtr output_node = new LLXMLNode("toolbars", false);
+ LLXUIParser parser;
+ parser.writeXUI(output_node, toolbar_set);
+
+ // Write the resulting XML to file
+ if(!output_node->isNull())
+ {
+ const std::string& filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "toolbars.xml");
+ LLFILE *fp = LLFile::fopen(filename, "w");
+ if (fp != NULL)
+ {
+ LLXMLNode::writeHeaderToFile(fp);
+ output_node->writeToFile(fp);
+ fclose(fp);
+ }
+ }
+}
+
void LLToolBarView::draw()
{
static bool debug_print = true;
diff --git a/indra/llui/lltoolbarview.h b/indra/llui/lltoolbarview.h
index 208660da8e..646a1fd636 100644
--- a/indra/llui/lltoolbarview.h
+++ b/indra/llui/lltoolbarview.h
@@ -77,7 +77,8 @@ protected:
private:
// Loads the toolbars from the existing user or default settings
- bool load(); // return false if load fails
+ bool loadToolbars(); // return false if load fails
+ void saveToolbars() const;
bool addCommand(const LLCommandId& commandId, LLToolBar* toolbar);
// Pointers to the toolbars handled by the toolbar view