/** * @file llui_libtest.cpp * @brief Integration test for the LLUI library * * $LicenseInfo:firstyear=2009&license=viewergpl$ * * Copyright (c) 2002-2009, Linden Research, Inc. * * Second Life Viewer Source Code * The source code in this file ("Source Code") is provided by Linden Lab * to you under the terms of the GNU General Public License, version 2.0 * ("GPL"), unless you have obtained a separate licensing agreement * ("Other License"), formally executed by you and Linden Lab. Terms of * the GPL can be found in doc/GPL-license.txt in this distribution, or * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 * * There are special exceptions to the terms and conditions of the GPL as * it is applied to this Source Code. View the full text of the exception * in the file doc/FLOSS-exception.txt in this software distribution, or * online at * http://secondlifegrid.net/programs/open_source/licensing/flossexception * * By copying, modifying or distributing this software, you acknowledge * that you have read and understood your obligations described above, * and agree to abide by those obligations. * * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, * COMPLETENESS OR PERFORMANCE. * $/LicenseInfo$ */ #include "linden_common.h" #include "llui_libtest.h" // project includes #include "llwidgetreg.h" // linden library includes #include "llcontrol.h" // LLControlGroup #include "lldir.h" #include "llerrorcontrol.h" #include "llfloater.h" #include "llfontgl.h" #include "lltrans.h" #include "llui.h" #include "lluictrlfactory.h" #include // *TODO: switch to using TUT // *TODO: teach Parabuild about this program, run automatically after full builds static std::string get_xui_dir() { std::string delim = gDirUtilp->getDirDelimiter(); return gDirUtilp->getAppRODataDir() + delim + std::string("skins") + delim + "default" + delim + "xui" + delim; } int main(int argc, char** argv) { // Must init LLError for llerrs to actually cause errors. LLError::initForApplication("."); // Font lookup needs directory support gDirUtilp->initAppDirs("SecondLife", "../../../newview"); gDirUtilp->setSkinFolder("default"); std::string config_filename = gDirUtilp->getExpandedFilename( LL_PATH_APP_SETTINGS, "settings.xml"); LLControlGroup config_group("config"); config_group.loadFromFile(config_filename); std::string color_filename = gDirUtilp->getExpandedFilename( LL_PATH_DEFAULT_SKIN, "colors.xml"); LLControlGroup color_group("color"); color_group.loadFromFile(color_filename); LLControlGroup floater_group("floater"); LLControlGroup ignores_group("ignores"); LLUI::settings_map_t settings; settings["config"] = &config_group; settings["color"] = &color_group; settings["floater"] = &floater_group; settings["ignores"] = &ignores_group; LLImageProviderInterface* image_provider = NULL; LLUI::initClass(settings, image_provider); const bool no_register_widgets = false; LLWidgetReg::initClass( no_register_widgets ); // Unclear if this is needed LLUI::setupPaths(); // Otherwise we get translation warnings when setting up floaters // (tooltips for buttons) std::set default_args; LLTrans::parseStrings("strings.xml", default_args); LLFontManager::initClass(); // Creating widgets apparently requires fonts to be initialized, // otherwise it crashes. LLFontGL::initClass(96.f, 1.f, 1.f, gDirUtilp->getAppRODataDir(), LLUI::getXUIPaths(), false ); // don't create gl textures LLFloaterView::Params fvparams; fvparams.name("Floater View"); fvparams.rect( LLRect(0,480,640,0) ); fvparams.mouse_opaque(false); fvparams.follows.flags(FOLLOWS_ALL); fvparams.tab_stop(false); gFloaterView = LLUICtrlFactory::create (fvparams); // Convert all test floaters to new XML format std::string delim = gDirUtilp->getDirDelimiter(); std::string xui_dir = get_xui_dir() + "en-us" + delim; std::string filename; while (gDirUtilp->getNextFileInDir(xui_dir, "floater_test_*.xml", filename, false)) { if (filename.find("_new.xml") != std::string::npos) { // don't re-export other test floaters continue; } llinfos << "Converting " << filename << llendl; // Build a floater and output new attributes LLXMLNodePtr output_node = new LLXMLNode(); LLFloater* floater = new LLFloater(); LLUICtrlFactory::getInstance()->buildFloater(floater, filename, FALSE, // don't open floater output_node); std::string out_filename = xui_dir + filename; std::string::size_type extension_pos = out_filename.rfind(".xml"); out_filename.resize(extension_pos); out_filename += "_new.xml"; llinfos << "Output: " << out_filename << llendl; LLFILE* floater_file = LLFile::fopen(out_filename.c_str(), "w"); LLXMLNode::writeHeaderToFile(floater_file); const char* const indent = " "; output_node->writeToFile(floater_file, indent); fclose(floater_file); } return 0; }