From: Christian S. <blu...@us...> - 2005-05-12 16:56:18
|
Update of /cvsroot/planeshift/planeshift/src/setup In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15199/src/setup Modified Files: pawssetupwindow.cpp pssetup.cpp Added Files: pawsskinwindow.cpp pawsskinwindow.h Log Message: - Added /changeguildname - Fixed memory leak in pawsBorder with SetTitleImage - Added GUI to change skin in the setup application - Pushed the version to 0.3.010 --- NEW FILE: pawsskinwindow.cpp --- /* * pawsskinwindow.cpp * * Copyright (C) 2005 Atomic Blue (in...@pl..., http://www.planeshift.it) * * Credits : Christian Svensson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * This program 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 General Public License for more details. * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */ #include <psconfig.h> #include "globals.h" #include <csutil/cfgfile.h> // PAWS INCLUDES #include "pawsskinwindow.h" #include "paws/pawsmanager.h" #include "paws/pawslistbox.h" #include "paws/pawscombo.h" #include "paws/pawsbutton.h" #include "paws/pawscheckbox.h" #include "util/psxmlparser.h" pawsSkinWindow::pawsSkinWindow( PawsManager* manager ) :pawsWidget( manager ) { } pawsSkinWindow::~pawsSkinWindow() { vfs->Unmount("/skin",mountedPath); mountedPath.Empty(); } bool pawsSkinWindow::PostSetup() { vfs = CS_QUERY_REGISTRY (WindowManager()->GetObjectRegistry(), iVFS); skins = (pawsComboBox*)FindWidget("skins"); desc = (pawsMultiLineTextBox*)FindWidget("desc"); preview = (pawsWidget*)FindWidget("preview"); previewBtn = (pawsButton*)FindWidget("PreviewButton"); previewBox = (pawsCheckBox*)FindWidget("PreviewBox"); // Fill the skins csString root = "/this/art/skins/"; csRef<iStringArray> files = vfs->FindFiles(root); for(size_t i = 0; i < files->Length();i++) { csString file = files->Get(i); file = file.Slice(root.Length(),file.Length()-root.Length()); csString ext = file.Slice(file.Length()-3,3); if(ext == "zip") { skins->NewOption(file.Slice(0,file.Length()-4)); } } // Load the current skin config = new csConfigFile("/this/psclient.cfg", vfs); csString skin = config->GetStr("Planeshift.GUI.skin"); if(!strcmp(skin,"")) return true; // Stop here, but it's ok LoadSkin(skin); return true; } void pawsSkinWindow::OnListAction( pawsListBox* widget, int status ) { LoadSkin(skins->GetSelectedRowString().GetData()); } void pawsSkinWindow::LoadSkin(const char* name) { csString zip; zip += "/this/art/skins/"; zip += name; zip += ".zip"; if(!vfs->Exists(zip)) { printf("Current skin doesn't exist, skipping..\n"); return; } // Make sure the skin is selected skins->Select(name); // Get the path csRef<iDataBuffer> real = vfs->GetRealPath(zip); // Mount the skin vfs->Unmount("/skin",mountedPath); vfs->Mount("/skin",real->GetData()); mountedPath = real->GetData(); // Parse XML csRef<iDocument> xml = ParseFile(WindowManager()->GetObjectRegistry(),"/skin/skin.xml"); csRef<iDocumentNode> root = xml->GetRoot(); root = root->GetNode("xml"); csRef<iDocumentNode> skinInfo = root->GetNode("skin_information"); // Read XML csRef<iDocumentNode> nameNode = skinInfo->GetNode("name"); csRef<iDocumentNode> authorNode = skinInfo->GetNode("author"); csRef<iDocumentNode> descriptionNode = skinInfo->GetNode("description"); // Move data to variables csString skinname,author,description; skinname = nameNode->GetContentsValue(); author = authorNode->GetContentsValue(); description = descriptionNode->GetContentsValue(); currentSkin = name; // Print the info csString info; info.Format("%s\nAuthor: %s\n%s",skinname.GetData(),author.GetData(),description.GetData()); desc->SetText(info); // Reset the backgrounds preview->RemoveTitle(); preview->SetBackground("Blue Background"); previewBtn->SetBackground("Blue Background"); previewBox->SetImages("radiooff","radioon"); // Load the skin bool sucess = true; sucess = sucess && LoadResource("Charbirth Background","skintest_bg"); sucess = sucess && LoadResource("Standard Button","skintest_btn"); sucess = sucess && LoadResource("Blue Title","skintest_title"); sucess = sucess && LoadResource("radiooff","skintest_roff"); sucess = sucess && LoadResource("radioon","skintest_ron"); sucess = sucess && LoadResource("quit","quit"); if(!sucess) { WindowManager()->CreateWarningBox("Couldn't load skin! Check the console for detailed output"); return; } preview->SetTitle("Skin preview","skintest_title","center","true"); preview->SetMaxAlpha(1); preview->SetBackground("skintest_bg"); previewBtn->SetMaxAlpha(1); previewBtn->SetBackground("skintest_btn"); previewBox->SetImages("skintest_roff","skintest_ron"); } bool pawsSkinWindow::LoadResource(const char* resource,const char* resname) { // Remove the resource if it exists WindowManager()->GetTextureManager()->Remove(resname); // Open the image list csRef<iDocument> xml = ParseFile(WindowManager()->GetObjectRegistry(),"/skin/imagelist.xml"); csRef<iDocumentNode> root = xml->GetRoot(); csRef<iDocumentNode> topNode = root->GetNode("image_list"); csRef<iDocumentNodeIterator> iter = topNode->GetNodes(); // Find the resource csString filename; while ( iter->HasNext() ) { csRef<iDocumentNode> node = iter->Next(); if ( node->GetType() != CS_NODE_ELEMENT ) continue; if ( strcmp( node->GetValue(), "image" ) == 0 ) { if(!strcmp(node->GetAttributeValue( "resource" ),resource)) { filename = node->GetAttributeValue( "file" ); break; } } } if(!filename.Length()) { printf("Couldn't locate resource %s in the current skin!\n",resource); return false; } // Skin uses /paws/skin which we can't use since the app is already using that // So we need to replace that with /skin which we can and do use (/paws/skin - /paws = /skin) filename.DeleteAt(0,5); // "/paws" = 5 chars if(!vfs->Exists(filename)) { printf("Skin is missing the '%s' resource at file '%s'!\n",resource,filename.GetData()); return false; } // Compile the structure psImageDescription* desc = new psImageDescription(WindowManager()->GetTextureManager()); desc->refCount = 0; desc->resourceName = resname; desc->imageFileLocation = filename; desc->tiled = false; // Add the info WindowManager()->GetTextureManager()->AddImageDescription(desc); return true; } bool pawsSkinWindow::OnButtonPressed( int mouseButton, int keyModifier, pawsWidget* widget ) { if(!widget->GetName()) return false; if(!strcmp(widget->GetName(),"CancelButton")) { this->Hide(); return true; } if(!strcmp(widget->GetName(),"OKButton")) { config->SetStr("Planeshift.GUI.skin",currentSkin); config->Save(); this->Hide(); return true; } return false; } --- NEW FILE: pawsskinwindow.h --- /* * pawsskinwindow.h * * Copyright (C) 2005 Atomic Blue (in...@pl..., http://www.planeshift.it) * * Credits : Christian Svensson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * This program 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 General Public License for more details. * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */ #ifndef PAWS_SKIN_WINDOW #define PAWS_SKIN_WINDOW #include <iutil/vfs.h> #include <csutil/ref.h> #include "paws/pawswidget.h" class pawsComboBox; class pawsButton; class pawsMultiLineTextBox; class pawsCheckBox; class pawsSkinWindow : public pawsWidget { public: pawsSkinWindow( PawsManager* manager ); ~pawsSkinWindow(); bool OnButtonPressed( int mouseButton, int keyModifier, pawsWidget* widget ); void OnListAction( pawsListBox* widget, int status ); bool PostSetup(); // Used to load a resource from the new skin bool LoadResource(const char* resource,const char* resname); void LoadSkin(const char* name); private: csString mountedPath; csString currentSkin; csRef<iVFS> vfs; csRef<iConfigFile> config; pawsComboBox* skins; pawsMultiLineTextBox* desc; pawsWidget* preview; // The preview widget pawsButton* previewBtn; // The preview button pawsCheckBox* previewBox; // The preview checkbox }; CREATE_PAWS_FACTORY( pawsSkinWindow ); #endif Index: pawssetupwindow.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/setup/pawssetupwindow.cpp,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** pawssetupwindow.cpp 2 Nov 2004 06:30:06 -0000 1.8 --- pawssetupwindow.cpp 12 May 2005 16:56:05 -0000 1.9 *************** *** 138,141 **** --- 138,152 ---- } + if(!strcmp(widget->GetName(),"Skins")) + { + pawsWidget* skin = windowManager->FindWidget("skin"); + if(skin) + { + skin->SetFade(false); + skin->SetMaxAlpha(1); + skin->Show(); + } + } + return false; } Index: pssetup.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/setup/pssetup.cpp,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** pssetup.cpp 30 Apr 2005 21:26:22 -0000 1.5 --- pssetup.cpp 12 May 2005 16:56:05 -0000 1.6 *************** *** 36,39 **** --- 36,40 ---- #include "paws/pawsmainwidget.h" #include "pawssetupwindow.h" + #include "pawsskinwindow.h" #include "util/pscssetup.h" *************** *** 120,123 **** --- 121,125 ---- if (nw) nw->SetTitle(WINDOW_CAPTION); + g3d->GetDriver2D()->AllowResize(false); // Mount the skin *************** *** 179,182 **** --- 181,191 ---- succeeded = false; } + + if (!paws->LoadWidget("data/config/skinwindow.xml")) + { + csReport (object_reg, CS_REPORTER_SEVERITY_NOTIFY, APP_NAME, + "Warning: Loading 'data/config/skinwindow.xml' failed!"); + succeeded = false; + } if (!paws->LoadWidget("data/gui/ok.xml")) *************** *** 240,243 **** --- 249,253 ---- factory = new pawsSetupWindowFactory(paws); + factory = new pawsSkinWindowFactory(paws); } |