/* * Author: Andrew Robberts * * Copyright (C) 2004 PlaneShift Team (info@planeshift.it, * http://www.planeshift.it) * * 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 (version 2 of the License) * 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 #include "eedit.h" #include #include #include #include #include #include #include #include #include #include #include "paws/pawsmanager.h" #include "paws/pawsmainwidget.h" #include "pawsgeneric.h" #include "util/pscssetup.h" const char* eEditApp::CONFIG_FILENAME = "/this/paws_generic.cfg"; const char* eEditApp::APP_NAME = "planeshift.eedit.application"; const char* eEditApp::WINDOW_CAPTION = "Planeshift Effect Editor"; CS_IMPLEMENT_APPLICATION eEditApp::eEditApp(iObjectRegistry *obj_reg) { object_reg = obj_reg; paws = NULL; drawScreen = true; } eEditApp::~eEditApp() { if (event_handler && queue) queue->RemoveListener(event_handler); delete paws; } void eEditApp::SevereError(const char* msg) { csReport(object_reg, CS_REPORTER_SEVERITY_ERROR, APP_NAME, msg); } bool eEditApp::Init() { queue = CS_QUERY_REGISTRY(object_reg, iEventQueue); if (!queue) { SevereError("No iEventQueue plugin!"); return false; } vfs = CS_QUERY_REGISTRY(object_reg, iVFS); if (!vfs) { SevereError("No iVFS plugin!"); return false; } engine = CS_QUERY_REGISTRY(object_reg, iEngine); if (!engine) { SevereError("No iEngine plugin!"); return false; } cfgmgr = CS_QUERY_REGISTRY(object_reg, iConfigManager); if (!cfgmgr) { SevereError("No iConfigManager plugin!"); return false; } g3d = CS_QUERY_REGISTRY(object_reg, iGraphics3D); if (!g3d) { SevereError("No iGraphics3D plugin!"); return false; } g2d = g3d->GetDriver2D(); if (!g2d) { SevereError("Could not load iGraphics2D!"); return false; } // set the window caption iNativeWindow *nw = g3d->GetDriver2D()->GetNativeWindow(); if (nw) nw->SetTitle(WINDOW_CAPTION); // paws initialization csString skinPath; skinPath.Format("/planeshift/art/skins/%s.zip",cfgmgr->GetStr("Planeshift.GUI.Skin","default")); paws = new PawsManager(object_reg, skinPath); if (!paws) { SevereError("Could not initialize PAWS!"); return false; } mainWidget = new pawsMainWidget(); paws->SetMainWidget(mainWidget); RegisterFactories(); // Load and assign a default button click sound for pawsbutton paws->LoadSound("/this/art/music/gui/ccreate/next.wav","sound.standardButtonClick"); if (!LoadWidgets()) { csReport(object_reg, CS_REPORTER_SEVERITY_NOTIFY, APP_NAME, "Warning: Some PAWS widgets failed to load"); } paws->GetMouse()->ChangeImage("Standard Mouse Pointer"); // Register our event handler event_handler = csPtr (new EventHandler (this)); csEventID esub[] = { csevPreProcess (object_reg), csevProcess (object_reg), csevPostProcess (object_reg), csevFinalProcess (object_reg), csevFrame (object_reg), csevMouseEvent (object_reg), csevKeyboardEvent (object_reg), CS_EVENTLIST_END }; queue->RegisterListener(event_handler, esub); // Inform debug that everything initialized succesfully csReport (object_reg, CS_REPORTER_SEVERITY_NOTIFY, APP_NAME, "Application initialized successfully."); return true; } bool eEditApp::LoadWidgets() { bool succeeded = true; if (!paws->LoadWidget("data/gui/paws_generic.xml")) { csReport (object_reg, CS_REPORTER_SEVERITY_NOTIFY, APP_NAME, "Warning: Loading 'data/gui/paws_generic.xml' failed!"); succeeded = false; } // load all other custom made paws widgets here return succeeded; } bool eEditApp::HandleEvent (iEvent &ev) { if (paws->HandleEvent(ev)) return true; if (ev.Name == csevProcess (object_reg)) return true; else if (ev.Name == csevFinalProcess (object_reg)) { g3d->FinishDraw (); g3d->Print (NULL); return true; } else if (ev.Name == csevPostProcess (object_reg)) { if (drawScreen) { g3d->BeginDraw(engine->GetBeginDrawFlags() | CSDRAW_2DGRAPHICS); paws->Draw(); } else { csSleep(150); } } else if (ev.Name == csevCanvasHidden (object_reg, g3d->GetDriver2D ())) drawScreen = false; else if (ev.Name == csevCanvasExposed (object_reg, g3d->GetDriver2D ())) drawScreen = true; return false; } void eEditApp::RegisterFactories() { pawsWidgetFactory* factory; factory = new pawsGenericFactory(); // register the factories of all other custom made paws widgets here } /** Application entry point */ int main (int argc, char *argv[]) { psCSSetup *CSSetup = new psCSSetup(argc, argv, eEditApp::CONFIG_FILENAME, ""); iObjectRegistry *object_reg = CSSetup->InitCS(); eEditApp *editApp = new eEditApp(object_reg); // Initialize application if (!editApp->Init()) { editApp->SevereError("Failed to init app!"); PS_PAUSEEXIT(1); } // start the main event loop csDefaultRunLoop(object_reg); // clean up delete editApp; delete CSSetup; csInitializer::DestroyApplication(object_reg); return 0; }