[Amis-vcs] SF.net SVN: amis: [2342] branches/amis3
Brought to you by:
julienq,
marisademeglio
From: <mar...@us...> - 2008-02-26 05:25:15
|
Revision: 2342 http://amis.svn.sourceforge.net/amis/?rev=2342&view=rev Author: marisademeglio Date: 2008-02-25 21:25:21 -0800 (Mon, 25 Feb 2008) Log Message: ----------- Added logging Modified Paths: -------------- branches/amis3/AmisCore/AmisCore.sln branches/amis3/AmisCore/AmisCore.vcproj branches/amis3/AmisCore/include/AmisCore.h branches/amis3/AmisCore/include/dtb/nav/NavList.h branches/amis3/AmisCore/include/dtb/nav/NavModel.h branches/amis3/AmisCore/src/dtb/Bookmarks.cpp branches/amis3/AmisCore/src/dtb/CustomTest.cpp branches/amis3/AmisCore/src/dtb/Dtb.cpp branches/amis3/AmisCore/src/dtb/nav/NavList.cpp branches/amis3/AmisCore/src/dtb/nav/NavModel.cpp branches/amis3/AmisCore/src/dtb/nav/NavPoint.cpp branches/amis3/AmisCore/src/dtb/nav/PageList.cpp branches/amis3/AmisCore/src/io/NavFileReader.cpp branches/amis3/AmisCore/src/io/NccFileReader.cpp branches/amis3/AmisCore/src/io/NcxFileReader.cpp branches/amis3/AmisCore/src/io/XercesSaxParseBase.cpp branches/amis3/AmisCore/testAmisCoreWin32/testAmisCore.cpp branches/amis3/AmisGuiMFC2/include/Preferences.h branches/amis3/AmisGuiMFC2/src/DtbWithHooks.cpp branches/amis3/AmisGuiMFC2/src/Preferences.cpp branches/amis3/AmisGuiMFC2/src/gui/AmisApp.cpp branches/amis3/AmisGuiMFC2/src/gui/ChildFrm.cpp branches/amis3/AmisGuiMFC2/src/gui/HtmlDoc.cpp branches/amis3/AmisGuiMFC2/src/gui/HtmlView.cpp branches/amis3/AmisGuiMFC2/src/gui/MainFrm.cpp branches/amis3/AmisGuiMFC2/src/gui/MainWndParts.cpp branches/amis3/AmisGuiMFC2/src/gui/TextRenderBrain.cpp branches/amis3/AmisGuiMFC2/src/gui/dialogs/AboutDialog.cpp branches/amis3/AmisGuiMFC2/src/gui/dialogs/AmisDialogBase.cpp branches/amis3/AmisGuiMFC2/src/gui/dialogs/AmisFileDialog.cpp branches/amis3/AmisGuiMFC2/src/gui/dialogs/PublicationSummaryDialog.cpp branches/amis3/AmisGuiMFC2/src/gui/dialogs/SkipDialog.cpp branches/amis3/AmisGuiMFC2/src/gui/sidebar/AmisSidebar.cpp branches/amis3/AmisGuiMFC2/src/gui/sidebar/AmisSidebarLoader.cpp branches/amis3/AmisGuiMFC2/src/gui/toolbar/Toolbar.cpp branches/amis3/AmisGuiMFC2/src/pdtb.cpp Added Paths: ----------- branches/amis3/AmisCore/include/util/Log.h branches/amis3/AmisCore/src/util/Log.cpp Modified: branches/amis3/AmisCore/AmisCore.sln =================================================================== --- branches/amis3/AmisCore/AmisCore.sln 2008-02-24 04:58:39 UTC (rev 2341) +++ branches/amis3/AmisCore/AmisCore.sln 2008-02-26 05:25:21 UTC (rev 2342) @@ -3,7 +3,7 @@ ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testAmisCore", "testAmisCore\testAmisCore.vcproj", "{EF232C4C-7F7A-496F-A2DC-E658C2845330}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testAmisCore", "testAmisCoreWin32\testAmisCore.vcproj", "{EF232C4C-7F7A-496F-A2DC-E658C2845330}" ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject Modified: branches/amis3/AmisCore/AmisCore.vcproj =================================================================== --- branches/amis3/AmisCore/AmisCore.vcproj 2008-02-24 04:58:39 UTC (rev 2341) +++ branches/amis3/AmisCore/AmisCore.vcproj 2008-02-26 05:25:21 UTC (rev 2342) @@ -479,6 +479,9 @@ </FileConfiguration> </File> <File + RelativePath=".\src\util\Log.cpp"> + </File> + <File RelativePath=".\src\util\SearchForFiles.cpp"> </File> </Filter> @@ -635,7 +638,7 @@ RelativePath=".\include\util\FilePathTools.h"> </File> <File - RelativePath=".\include\util\findfilecontainer.h"> + RelativePath=".\include\util\Log.h"> </File> <File RelativePath=".\include\util\SearchForFiles.h"> Modified: branches/amis3/AmisCore/include/AmisCore.h =================================================================== --- branches/amis3/AmisCore/include/AmisCore.h 2008-02-24 04:58:39 UTC (rev 2341) +++ branches/amis3/AmisCore/include/AmisCore.h 2008-02-26 05:25:21 UTC (rev 2342) @@ -157,6 +157,7 @@ { class FilePathTools; class SmilAudioExtract; + class Log; } } Modified: branches/amis3/AmisCore/include/dtb/nav/NavList.h =================================================================== --- branches/amis3/AmisCore/include/dtb/nav/NavList.h 2008-02-24 04:58:39 UTC (rev 2341) +++ branches/amis3/AmisCore/include/dtb/nav/NavList.h 2008-02-26 05:25:21 UTC (rev 2342) @@ -50,7 +50,7 @@ void acceptDepthFirst(NavVisitor*); private: - vector<NavTarget*> mpNodes; + vector<NavTarget*> mNodes; }; } } Modified: branches/amis3/AmisCore/include/dtb/nav/NavModel.h =================================================================== --- branches/amis3/AmisCore/include/dtb/nav/NavModel.h 2008-02-24 04:58:39 UTC (rev 2341) +++ branches/amis3/AmisCore/include/dtb/nav/NavModel.h 2008-02-26 05:25:21 UTC (rev 2342) @@ -49,23 +49,23 @@ NavList* getNavList(unsigned int); NavList* getNavList(string); NavListList* getNavLists(); - int addNavList(string); - bool hasPages(); PageList* getPageList(); NavMap* getNavMap(); - void acceptDepthFirst(NavVisitor*); - NavNode* getNodeForSmilId(string, NavContainer*); void setSmilIdNodeMap(NodeRefMap*); void testMap(); + + //add a node to the big ordered list. the node will not necessarily be next in sequence. + void addToPlayOrderList(NavNode*); private: NavMap* mpNavMap; PageList* mpPageList; NodeRefMap* mpSmilIdNodeMap; NavListList mNavLists; + std::vector<NavNode*> mPlayOrderList; }; } } Added: branches/amis3/AmisCore/include/util/Log.h =================================================================== --- branches/amis3/AmisCore/include/util/Log.h (rev 0) +++ branches/amis3/AmisCore/include/util/Log.h 2008-02-26 05:25:21 UTC (rev 2342) @@ -0,0 +1,65 @@ +/* +AMIS: Adaptive Multimedia Information System +Software for playing DAISY books +Homepage: http://amis.sf.net + +Copyright (C) 2004-2007 DAISY for All Project + +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; either +version 2.1 of the License, or (at your option) any later version. + +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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +#ifndef LOG_H +#define LOG_H + +#include <string> +#include <fstream> + +#include "Error.h" +using namespace std; + +namespace amis +{ +namespace util +{ +class Log +{ +protected: + Log(); +public: + static Log* Instance(); + void DestroyInstance(); + ~Log(); + + void startLog(string); + void writeMessage(string, string, string); + void writeMessage(string); + void writeMessage(string, const ambulant::net::url*); + void writeWarning(string, string, string); + void writeError(string, string, string); + void writeMessage(string, const ambulant::net::url*, string, string); + void writeWarning(string, const ambulant::net::url*, string, string); + void writeError(string, const ambulant::net::url*, string, string); + void writeError(amis::Error, string, string); + void endLog(); + +private: + void writeData(string, string, string, string); + ofstream mFile; + static Log* pinstance; + bool mbIsFileOpen; +}; +} +} + +#endif \ No newline at end of file Modified: branches/amis3/AmisCore/src/dtb/Bookmarks.cpp =================================================================== --- branches/amis3/AmisCore/src/dtb/Bookmarks.cpp 2008-02-24 04:58:39 UTC (rev 2341) +++ branches/amis3/AmisCore/src/dtb/Bookmarks.cpp 2008-02-26 05:25:21 UTC (rev 2342) @@ -176,10 +176,14 @@ { mItems.push_back(pBookmark); } - +//todo: verify that this function works void amis::dtb::BookmarkSet::deleteItem(unsigned int idx) { - //@todo: write this deleteItem(..) function + if (mItems.size() == 0 || idx > mItems.size()-1) return; + vector<amis::dtb::PositionMark*>::iterator it; + it = mItems.begin(); + for (int i = 0; i<idx; i++) it++; + mItems.erase(it); } void amis::dtb::BookmarkSet::setTitle(amis::MediaGroup* pData) Modified: branches/amis3/AmisCore/src/dtb/CustomTest.cpp =================================================================== --- branches/amis3/AmisCore/src/dtb/CustomTest.cpp 2008-02-24 04:58:39 UTC (rev 2341) +++ branches/amis3/AmisCore/src/dtb/CustomTest.cpp 2008-02-26 05:25:21 UTC (rev 2342) @@ -33,81 +33,51 @@ mBookStruct = ""; mbCurrentState = false; } - - - amis::dtb::CustomTest::~CustomTest() { mId = ""; mBookStruct = ""; } - - - void amis::dtb::CustomTest::setId(const string id) { mId.assign(id); } - - - void amis::dtb::CustomTest::setOverride(bool override) { mbOverride = override; } - - - void amis::dtb::CustomTest::setDefaultState(bool defaultState) { mbDefaultState = defaultState; } - - - void amis::dtb::CustomTest::setBookStruct(const string bookStruct) { mBookStruct.assign(bookStruct); } - - - void amis::dtb::CustomTest::setCurrentState(bool currentState) { mbCurrentState = currentState; } - - - const string amis::dtb::CustomTest::getId() { return mId; } - - - bool amis::dtb::CustomTest::getOverride() { return mbOverride; } - - - bool amis::dtb::CustomTest::getDefaultState() { return mbDefaultState; } - const string amis::dtb::CustomTest::getBookStruct() { return mBookStruct; } - bool amis::dtb::CustomTest::getCurrentState() { return mbCurrentState; } - amis::dtb::CustomTestSet::CustomTestSet() { } @@ -134,9 +104,7 @@ break; } } - if (b_found == false) mList.push_back(pCustomTest); - return !b_found; } amis::dtb::CustomTest* amis::dtb::CustomTestSet::getCustomTest(int idx) Modified: branches/amis3/AmisCore/src/dtb/Dtb.cpp =================================================================== --- branches/amis3/AmisCore/src/dtb/Dtb.cpp 2008-02-24 04:58:39 UTC (rev 2341) +++ branches/amis3/AmisCore/src/dtb/Dtb.cpp 2008-02-26 05:25:21 UTC (rev 2342) @@ -33,6 +33,7 @@ #include "io/TextSearch.h" #include "io/OpfFileReader.h" #include "io/NcxFileReader.h" +#include "util/Log.h" #include "ambulant/common/plugin_engine.h" @@ -159,9 +160,9 @@ bool amis::dtb::Dtb::open(const ambulant::net::url* fileUrl, const ambulant::net::url* bookmarksDirectory) { cleanUpObjects(); + string log_msg = "Opening book: " + fileUrl->get_url(); + amis::util::Log::Instance()->writeMessage(log_msg, "Dtb::open", "AmisCore"); - //cout<<"trying to open: "<<filepath<<endl; - mpFiles = NULL; mpFiles = new amis::dtb::DtbFileSet(); mpFiles->initWithNccOrOpf(fileUrl, mpFileSearcher); @@ -169,6 +170,7 @@ if (DtbFileSet::isNccFile(fileUrl)) { + amis::util::Log::Instance()->writeMessage("This is a DAISY 2.02 book", "Dtb::open", "AmisCore"); mDaisyVersion = DAISY_202; if (!processNcc(mpFiles->getNavFilepath())) { @@ -179,7 +181,7 @@ { //TODO: differentiate between 2005 and 2002 mDaisyVersion = ZED_2005; - + amis::util::Log::Instance()->writeMessage("This is a Zed book", "Dtb::open", "AmisCore"); if (!processOpf(mpFiles->getOpfFilepath())) return false; if (!processNcx(mpFiles->getNavFilepath())) return false; //if (!processDaisyResourceFile(mpFiles->getResourceFilepath())) return false; @@ -187,7 +189,8 @@ else { mDaisyVersion = UNDEFINED; - //TODO: flag not supported + amis::util::Log::Instance()->writeWarning("The type of book could not be determined", + "Dtb::open", "AmisCore"); return false; } @@ -251,8 +254,8 @@ //from an encrypted file if (checkForCopyProtection(mpMetadata)) { + amis::util::Log::Instance()->writeMessage("This is a protected book", "Dtb::processNcc", "AmisCore"); mbIsProtected = true; - if (mpCallbackForPreprocessingBookKey != NULL) { if (mpCallbackForPreprocessingBookKey( @@ -269,10 +272,15 @@ mpCustomTests = ncc_file_reader.getCustomTests(); } } - /* if: 1. no function registered to handle protected books or - 2. that function failed - then: playback of NCC.html continues and it will say "this book is protected... " - */ + else + { + /* if: 1. no function registered to handle protected books or + 2. that function failed + then: playback of NCC.html continues and it will say "this book is protected... " + */ + amis::util::Log::Instance()->writeError("Protected book could not be read", + "Dtb::processNcc", "AmisCore"); + } } //the spine visitor also makes the smil file paths absolute @@ -665,6 +673,9 @@ amis::dtb::Bookmark* p_bmk = new amis::dtb::Bookmark(); amis::dtb::PositionData* p_pos = mpBookmarks->getLastmark()->copy(); + + amis::util::Log::Instance()->writeMessage("Adding bookmark", &p_pos->mUri, + "Dtb::addBookmark", "AmisCore"); p_bmk->mType = amis::dtb::Bookmark::BOOKMARK; p_bmk->mpStart = p_pos; @@ -685,6 +696,12 @@ //the callback here will get invoked during processNcc void amis::dtb::Dtb::setCallbackForPreprocessingBookKey(ProtectedBookKeyHandlerFunctionPtr pFunction) { + if (pFunction == NULL) + amis::util::Log::Instance()->writeWarning("Setting NULL handler for protected books", + "Dtb::setCallbackForPreprocessingBookKey", "AmisCore"); + else + amis::util::Log::Instance()->writeMessage("Setting handler for protected books", + "Dtb::setCallbackForPreprocessingBookKey", "AmisCore"); mpCallbackForPreprocessingBookKey = pFunction; } Modified: branches/amis3/AmisCore/src/dtb/nav/NavList.cpp =================================================================== --- branches/amis3/AmisCore/src/dtb/nav/NavList.cpp 2008-02-24 04:58:39 UTC (rev 2341) +++ branches/amis3/AmisCore/src/dtb/nav/NavList.cpp 2008-02-26 05:25:21 UTC (rev 2342) @@ -39,13 +39,13 @@ //-------------------------------------------------- amis::dtb::nav::NavList::~NavList() { - int sz = mpNodes.size(); + int sz = mNodes.size(); NavTarget* tmp_node; for (int i=sz-1; i>=0; i--) { - tmp_node = mpNodes[i]; - mpNodes.pop_back(); + tmp_node = mNodes[i]; + mNodes.pop_back(); delete tmp_node; } } @@ -56,18 +56,18 @@ void amis::dtb::nav::NavList::addNode(NavTarget* pNode) { pNode->setNavModel(mpNavModel); - pNode->setIndex(mpNodes.size()); + pNode->setIndex(mNodes.size()); pNode->setNavContainer(this); - mpNodes.push_back(pNode); + mNodes.push_back(pNode); + mpNavModel->addToPlayOrderList(pNode); } - //-------------------------------------------------- //get the list length //-------------------------------------------------- int amis::dtb::nav::NavList::getLength() { - return mpNodes.size(); + return mNodes.size(); } //-------------------------------------------------- @@ -76,12 +76,10 @@ amis::dtb::nav::NavNode* amis::dtb::nav::NavList::goToPlayOrder(int playOrder) { bool b_found = false; - unsigned int i = 0; - - for (i=0; i<mpNodes.size(); i++) + for (i=0; i<mNodes.size(); i++) { - if (mpNodes[i]->getPlayOrder() == playOrder) + if (mNodes[i]->getPlayOrder() == playOrder) { b_found = true; break; @@ -89,11 +87,9 @@ } if (b_found == true) - return mpNodes[i]; + return mNodes[i]; else - { return NULL; - } } amis::dtb::nav::NavNode* amis::dtb::nav::NavList::goToContentRef(string contentHref) @@ -103,12 +99,10 @@ unsigned int i = 0; - for (i=0; i<mpNodes.size(); i++) + for (i=0; i<mNodes.size(); i++) { - content_href = mpNodes[i]->getContent(); - + content_href = mNodes[i]->getContent(); content_href = amis::util::FilePathTools::getFileName(content_href); - if (content_href.compare(contentHref) == 0) { b_found = true; @@ -117,24 +111,19 @@ } if (b_found == true) - { - return mpNodes[i]; - } + return mNodes[i]; else - { return NULL; - } } amis::dtb::nav::NavNode* amis::dtb::nav::NavList::goToId(string id) { bool b_found = false; - unsigned int i = 0; - for (i=0; i<mpNodes.size(); i++) + for (i=0; i<mNodes.size(); i++) { - if (mpNodes[i]->getId().compare(id) == 0) + if (mNodes[i]->getId().compare(id) == 0) { b_found = true; break; @@ -142,36 +131,32 @@ } if (b_found == true) - { - return mpNodes[i]; - } + return mNodes[i]; else - { return NULL; - } } void amis::dtb::nav::NavList::print(bool printheader) { if (printheader) cout<<"Nav List: "<<this->getId()<<endl; - for (unsigned int i=0; i<mpNodes.size(); i++) + for (unsigned int i=0; i<mNodes.size(); i++) { - mpNodes[i]->print(0); + mNodes[i]->print(0); } } void amis::dtb::nav::NavList::acceptDepthFirst(NavVisitor* v) { - if (mpNodes.size() > 0) - mpNodes.front()->acceptDepthFirst(v); + if (mNodes.size() > 0) + mNodes.front()->acceptDepthFirst(v); } amis::dtb::nav::NavTarget* amis::dtb::nav::NavList::getAtIndex(int idx) { - if (idx >= 0 && idx < mpNodes.size()) - return mpNodes[idx]; + if (idx >= 0 && idx < mNodes.size()) + return mNodes[idx]; else return NULL; } Modified: branches/amis3/AmisCore/src/dtb/nav/NavModel.cpp =================================================================== --- branches/amis3/AmisCore/src/dtb/nav/NavModel.cpp 2008-02-24 04:58:39 UTC (rev 2341) +++ branches/amis3/AmisCore/src/dtb/nav/NavModel.cpp 2008-02-26 05:25:21 UTC (rev 2342) @@ -30,25 +30,18 @@ //all models will have a nav map and page list mpNavMap = new NavMap(); mpPageList = new PageList(); - - mpPageList->setNavModel(this); mpNavMap->setNavModel(this); - NavPoint* p_root = new NavPoint(); - //give the map a 'fake' root p_root->setClass("ROOT"); p_root->setLevel(0); p_root->setPlayOrder(-1); p_root->setId("ROOT"); p_root->setParent(NULL); - p_root->setNavModel(this); p_root->setLabel(NULL); - mpNavMap->setRoot(p_root); - mpSmilIdNodeMap = NULL; } @@ -58,10 +51,7 @@ int sz = mNavLists.size(); NavList* p_tmp_navlist; - if (mpNavMap != NULL) - { - delete mpNavMap; - } + if (mpNavMap != NULL) delete mpNavMap; //delete nav lists and page list for (i=sz-1; i>=0; i--) @@ -69,10 +59,7 @@ p_tmp_navlist = NULL; p_tmp_navlist = mNavLists[i]; mNavLists.pop_back(); - if (p_tmp_navlist != NULL) - { - delete p_tmp_navlist; - } + if (p_tmp_navlist != NULL) delete p_tmp_navlist; } if (mpPageList != NULL) delete mpPageList; @@ -101,12 +88,33 @@ amis::dtb::nav::NavList* amis::dtb::nav::NavModel::getNavList(unsigned int index) { if (index < mNavLists.size()) + return mNavLists[index]; + else + return NULL; +} +void amis::dtb::nav::NavModel::addToPlayOrderList(amis::dtb::nav::NavNode* pNode) +{ + if (pNode == NULL) return; + //1 is the first playOrder value; mpBigOrderedList is ordered by play order + int next_in_sequence = mPlayOrderList.size() + 1; + if (pNode->getPlayOrder() == next_in_sequence) { - return mNavLists[index]; + mPlayOrderList.push_back(pNode); } + //we are adding nodes out of order (not unusual) else { - return NULL; + if (pNode->getPlayOrder() > next_in_sequence) + mPlayOrderList.resize(next_in_sequence); + + //make sure there is nothing in that spot already + if (mPlayOrderList[next_in_sequence - 1] == NULL) + { + vector<NavNode*>::iterator it; + it = mPlayOrderList.begin(); + for (int i = 0; i<next_in_sequence; i++) it++; + mPlayOrderList.insert(it, pNode); + } } } Modified: branches/amis3/AmisCore/src/dtb/nav/NavPoint.cpp =================================================================== --- branches/amis3/AmisCore/src/dtb/nav/NavPoint.cpp 2008-02-24 04:58:39 UTC (rev 2341) +++ branches/amis3/AmisCore/src/dtb/nav/NavPoint.cpp 2008-02-26 05:25:21 UTC (rev 2342) @@ -30,25 +30,16 @@ mpSibling = NULL; mpParent = NULL; mpFirstChild = NULL; - this->mTypeOfNode = NavNode::NAV_POINT; } -//-------------------------------------------------- //Destructor -/*! - delete all children recursively -*/ -//-------------------------------------------------- amis::dtb::nav::NavPoint::~NavPoint() { NavPoint* p_tmp_node; //if this node has no children, perform any internal cleanup and return - if (mpFirstChild == NULL) - { - return; - } + if (mpFirstChild == NULL) return; //else, this node has one or more children else @@ -58,7 +49,6 @@ { p_tmp_node = getChild(mNumChildren-1); delete p_tmp_node; - //each time a child is deleted, decrement the number of children mNumChildren--; } @@ -84,13 +74,9 @@ //we are leaving this branch so reset the child count this->resetChildCount(); if (mpParent != NULL) - { return mpParent->next(); - } else - { return NULL; - } } } @@ -102,12 +88,7 @@ return NULL; } -//-------------------------------------------------- //return the immediate sibling -/*! - delete all children recursively -*/ -//-------------------------------------------------- amis::dtb::nav::NavPoint* amis::dtb::nav::NavPoint::getFirstSibling() { return mpSibling; @@ -115,7 +96,6 @@ amis::dtb::nav::NavPoint* amis::dtb::nav::NavPoint::getChild(int index) { - //local variables NavPoint* p_tmp_node; //check the bounds of the requested index @@ -146,14 +126,13 @@ } -//-------------------------------------------------- //return the number of children that this node has -//-------------------------------------------------- int amis::dtb::nav::NavPoint::getNumChildren() { return mNumChildren; } +//return the level in the hierarchy (0 is outermost, 1 is indented once, etc) int amis::dtb::nav::NavPoint::getLevel() { return mLevel; @@ -168,22 +147,20 @@ //-------------------------------------------------- void amis::dtb::nav::NavPoint::addSibling(NavPoint* pNode) { - //if-else block to see if this node's sibling pointer is null if (mpSibling == NULL) { //add the new node pointer as its sibling - mpSibling = pNode; - + mpSibling = pNode; //set the new node's parent to be the same as this node's parent mpSibling->setParent(this->getParent()); + //register this node with the play order list + mpNavModel->addToPlayOrderList(pNode); } else { //recursive call to try and add the new node to the sibling of this node mpSibling->addSibling(pNode); } - //end if-else block to see if this node's sibling pointer is null - } @@ -203,9 +180,10 @@ { //set new node pointer as first child mpFirstChild = pNode; - //set the new child's parent to be this node mpFirstChild->setParent(this); + //register this node with the play order list + mpNavModel->addToPlayOrderList(pNode); } //if exists, add new node pointer as a sibling @@ -243,14 +221,11 @@ { if (v->preVisit(this)) { - //read the children + //read the children first if (mpFirstChild != NULL) - { mpFirstChild->acceptDepthFirst(v); - } + //then look to the siblings if (mpSibling != NULL) - { mpSibling->acceptDepthFirst(v); - } } } Modified: branches/amis3/AmisCore/src/dtb/nav/PageList.cpp =================================================================== --- branches/amis3/AmisCore/src/dtb/nav/PageList.cpp 2008-02-24 04:58:39 UTC (rev 2341) +++ branches/amis3/AmisCore/src/dtb/nav/PageList.cpp 2008-02-26 05:25:21 UTC (rev 2342) @@ -45,6 +45,8 @@ { amis::dtb::nav::NavList::addNode(pNode); pNode->setNavContainer(this); + //register this node with the play order list + mpNavModel->addToPlayOrderList(pNode); } } Modified: branches/amis3/AmisCore/src/io/NavFileReader.cpp =================================================================== --- branches/amis3/AmisCore/src/io/NavFileReader.cpp 2008-02-24 04:58:39 UTC (rev 2341) +++ branches/amis3/AmisCore/src/io/NavFileReader.cpp 2008-02-26 05:25:21 UTC (rev 2342) @@ -65,7 +65,7 @@ } bool amis::io::NavFileReader::readFromFile(const ambulant::net::url* filepath) { - this->mPlayOrderCount = 0; + this->mPlayOrderCount = 1; this->mbFlag_GetChars = false; this->mpCurrentNavPoint = NULL; Modified: branches/amis3/AmisCore/src/io/NccFileReader.cpp =================================================================== --- branches/amis3/AmisCore/src/io/NccFileReader.cpp 2008-02-24 04:58:39 UTC (rev 2341) +++ branches/amis3/AmisCore/src/io/NccFileReader.cpp 2008-02-26 05:25:21 UTC (rev 2342) @@ -238,17 +238,11 @@ p_page->setId(id); if (classname.compare("front") == 0) - { p_page->setType(amis::dtb::nav::PageTarget::PAGE_FRONT); - } else if(classname.compare("normal") == 0) - { p_page->setType(amis::dtb::nav::PageTarget::PAGE_NORMAL); - } else if(classname.compare("special") == 0) - { p_page->setType(amis::dtb::nav::PageTarget::PAGE_SPECIAL); - } mPlayOrderCount++; @@ -259,8 +253,7 @@ p_page_list = mpNavModel->getPageList(); p_page_list->addNode(p_page); - mpCurrentPageTarget = p_page; - + mpCurrentPageTarget = p_page; addCustomTest("pagenumber", true, true, ""); } @@ -292,33 +285,22 @@ } p_nav_list->addNode(p_navt); - mpCurrentNavTarget = p_navt; //see if we should add a custom test to the list string custom_test; if (classname.compare("sidebar") == 0) - { custom_test = "sidebar"; - } else if (classname.compare("optional-prodnote") == 0) - { custom_test = "prodnote"; - } else if(classname.compare("noteref") == 0) - { custom_test = "footnote"; - } else - { custom_test = ""; - } if (custom_test.compare("") != 0) - { addCustomTest(custom_test, true, true, ""); - } } } @@ -344,7 +326,6 @@ int newidx = mpNavModel->addNavList(classname); p_nav_list = mpNavModel->getNavList(newidx); } - p_nav_list->addNode(p_navt); mpCurrentNavTarget = p_navt; } Modified: branches/amis3/AmisCore/src/io/NcxFileReader.cpp =================================================================== --- branches/amis3/AmisCore/src/io/NcxFileReader.cpp 2008-02-24 04:58:39 UTC (rev 2341) +++ branches/amis3/AmisCore/src/io/NcxFileReader.cpp 2008-02-26 05:25:21 UTC (rev 2342) @@ -209,7 +209,7 @@ play_order.assign(SimpleAttrs::get("playOrder", pAttrs)); int i_play_order = atoi(play_order.c_str()); mpCurrentNavPoint->setPlayOrder(i_play_order); - + //get the last item from the open nodes list and set it as the parent for this node int len = mOpenNodes.size(); amis::dtb::nav::NavPoint* p_parent = mOpenNodes[len-1]; @@ -292,9 +292,8 @@ play_order.assign(SimpleAttrs::get("playOrder", pAttrs)); int i_play_order = atoi(play_order.c_str()); mpCurrentNavTarget->setPlayOrder(i_play_order); - + amis::dtb::nav::NavList* p_nav_list = NULL; - int num = mpNavModel->getNumberOfNavLists(); p_nav_list = mpNavModel->getNavList(num-1); @@ -323,7 +322,6 @@ play_order.assign(SimpleAttrs::get("playOrder", pAttrs)); int i_play_order = atoi(play_order.c_str()); p_page->setPlayOrder(i_play_order); - p_page_list->addNode(p_page); mpCurrentPageTarget = p_page; Modified: branches/amis3/AmisCore/src/io/XercesSaxParseBase.cpp =================================================================== --- branches/amis3/AmisCore/src/io/XercesSaxParseBase.cpp 2008-02-24 04:58:39 UTC (rev 2341) +++ branches/amis3/AmisCore/src/io/XercesSaxParseBase.cpp 2008-02-26 05:25:21 UTC (rev 2342) @@ -24,6 +24,7 @@ #include "util/FilePathTools.h" #include "io/UrlInputSource.h" #include <iostream> +#include "util/Log.h" //XERCES INCLUDES #include <xercesc/util/XMLString.hpp> @@ -55,7 +56,7 @@ { SAX2XMLReader* parser; mFilepath = *filepath; - + amis::util::Log::Instance()->writeMessage("Parsing file: ", filepath, "XercesSaxParseBase::parseFile", "AmisCore"); //try-catch block for Xerces platform utilities try { @@ -70,6 +71,7 @@ str.assign(msg); mError.setMessage(str); XMLString::release(&msg); + amis::util::Log::Instance()->writeError(mError, "XercesSaxParseBase::parseFile", "AmisCore"); return false; } @@ -89,6 +91,7 @@ mError.setMessage(str); delete parser; XMLPlatformUtils::Terminate(); + amis::util::Log::Instance()->writeError(mError, "XercesSaxParseBase::parseFile", "AmisCore"); return false; } //try-catch block for Xerces parsing @@ -111,6 +114,7 @@ XMLString::release(&msg); delete parser; XMLPlatformUtils::Terminate(); + amis::util::Log::Instance()->writeError(mError, "XercesSaxParseBase::parseFile", "AmisCore"); return false; } @@ -130,7 +134,9 @@ } if (mError.getCode() != amis::OK) return false; - else return true; + + amis::util::Log::Instance()->writeMessage("Done parsing.", "XercesSaxParseBase::parseFile", "AmisCore"); + return true; } amis::Error amis::io::XercesSaxParseBase::getError() @@ -140,12 +146,20 @@ void amis::io::XercesSaxParseBase::warning(const SAXParseException& e) { - //ignore this, it's non-fatal + char* xerces_msg = XMLString::transcode(e.getMessage()); + string msg = "While processing *" + mFilepath.get_url() + + "* Xerces said: \"" + xerces_msg + "\""; + amis::util::Log::Instance()->writeWarning(msg, "XercesSaxParseBase::warning", "AmisCore"); + XMLString::release(&xerces_msg); } void amis::io::XercesSaxParseBase::error(const SAXParseException& e) { - //ignore this, it's non-fatal + char* xerces_msg = XMLString::transcode(e.getMessage()); + string msg = "While processing *" + mFilepath.get_url() + + "* Xerces said: \"" + xerces_msg + "\""; + amis::util::Log::Instance()->writeError(msg, "XercesSaxParseBase::error", "AmisCore"); + XMLString::release(&xerces_msg); } void amis::io::XercesSaxParseBase::fatalError(const SAXParseException& e) @@ -153,8 +167,8 @@ char* xerces_msg = XMLString::transcode(e.getMessage()); mError.setCode (amis::PARSE_ERROR); string msg = "While processing *" + mFilepath.get_url() + - "* Xerces signalled: \"" + xerces_msg + "\""; + "* Xerces said: \"" + xerces_msg + "\""; mError.setMessage(msg); - + amis::util::Log::Instance()->writeError(mError, "XercesSaxParseBase::fatalError", "AmisCore"); XMLString::release(&xerces_msg); } Added: branches/amis3/AmisCore/src/util/Log.cpp =================================================================== --- branches/amis3/AmisCore/src/util/Log.cpp (rev 0) +++ branches/amis3/AmisCore/src/util/Log.cpp 2008-02-26 05:25:21 UTC (rev 2342) @@ -0,0 +1,123 @@ +/* +AMIS: Adaptive Multimedia Information System +Software for playing DAISY books +Homepage: http://amis.sf.net + +Copyright (C) 2004-2007 DAISY for All Project + +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; either +version 2.1 of the License, or (at your option) any later version. + +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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +#include "util/Log.h" +#ifdef AMIS_PLATFORM_WINDOWS +#include "time.h" +#else +//TODO: timestamp for other platforms +#endif +using namespace std; + +amis::util::Log* amis::util::Log::pinstance = 0; + +amis::util::Log* amis::util::Log::Instance() +{ + if (pinstance == 0) pinstance = new amis::util::Log(); + return pinstance; +} + +amis::util::Log::Log() +{ + mbIsFileOpen = false; +} +amis::util::Log::~Log() +{ +} + +void amis::util::Log::startLog(string filename) +{ + mFile.open(filename.c_str(), ios::out); + mbIsFileOpen = true; + mFile<<"AMIS Log"<<endl; +#ifdef AMIS_PLATFORM_WINDOWS + char datestr[10]; + char timestr[10]; + _strdate(datestr); + _strtime(timestr); + mFile<<datestr<<"\n"<<timestr<<endl; +#else + //TODO: timestamp for other platforms +#endif + mFile<<"-------------------------------------"<<endl; +} + +void amis::util::Log::endLog() +{ + mFile.close(); + mbIsFileOpen = false; +} +void amis::util::Log::writeError(amis::Error error, string origin, string library) +{ + writeError(error.getMessage(), origin, library); +} +void amis::util::Log::writeError(string msg, string origin, string library) +{ + writeData("ERROR", msg, origin, library); +} +void amis::util::Log::writeWarning(string msg, string origin, string library) +{ + writeData("WARNING", msg, origin, library); +} +void amis::util::Log::writeMessage(string msg, string origin, string library) +{ + writeData("", msg, origin, library); +} +void amis::util::Log::writeMessage(string msg, const ambulant::net::url* file, string origin, string library) +{ + string log_msg = msg; + if (file != NULL) log_msg += file->get_url(); + else log_msg += "*NULL file name*"; + writeMessage(log_msg, origin, library); +} +void amis::util::Log::writeWarning(string msg, const ambulant::net::url* file, string origin, string library) +{ + string log_msg = msg; + if (file != NULL) log_msg += file->get_url(); + else log_msg += "*NULL file name*"; + writeWarning(log_msg, origin, library); +} +void amis::util::Log::writeError(string msg, const ambulant::net::url* file, string origin, string library) +{ + string log_msg = msg; + if (file != NULL) log_msg += file->get_url(); + else log_msg += "*NULL file name*"; + writeError(log_msg, origin, library); +} +void amis::util::Log::writeMessage(string msg) +{ + writeData("", msg, "", ""); +} +void amis::util::Log::writeMessage(string msg, const ambulant::net::url* file) +{ + writeMessage("", file, "", ""); +} +void amis::util::Log::writeData(string type, string msg, string origin, string library) +{ + if (!mbIsFileOpen) return; + + if (type != "") mFile<<type<<": "; + mFile<<msg; + if (origin != "") mFile<<" ["<<origin; + if (library != "") mFile<<" {"<<library<<") "; + if (origin != "") mFile<<"]"; + mFile<<endl; +} \ No newline at end of file Modified: branches/amis3/AmisCore/testAmisCoreWin32/testAmisCore.cpp =================================================================== --- branches/amis3/AmisCore/testAmisCoreWin32/testAmisCore.cpp 2008-02-24 04:58:39 UTC (rev 2341) +++ branches/amis3/AmisCore/testAmisCoreWin32/testAmisCore.cpp 2008-02-26 05:25:21 UTC (rev 2342) @@ -12,6 +12,7 @@ #include "dtb/nav/NavList.h" #include "dtb/nav/NavMap.h" #include "util/FilePathTools.h" +#include "util/Log.h" #include <tchar.h> #include <iostream> Modified: branches/amis3/AmisGuiMFC2/include/Preferences.h =================================================================== --- branches/amis3/AmisGuiMFC2/include/Preferences.h 2008-02-24 04:58:39 UTC (rev 2341) +++ branches/amis3/AmisGuiMFC2/include/Preferences.h 2008-02-26 05:25:21 UTC (rev 2342) @@ -52,7 +52,8 @@ ~Preferences(); //the preferences IO class should call this function after reading in the XML file void scanAll(); - + void logAllPreferences(); + void logUserControllablePreferences(); //ACCESSORS void setUiLangId(string); string getUiLangId(); Modified: branches/amis3/AmisGuiMFC2/src/DtbWithHooks.cpp =================================================================== --- branches/amis3/AmisGuiMFC2/src/DtbWithHooks.cpp 2008-02-24 04:58:39 UTC (rev 2341) +++ branches/amis3/AmisGuiMFC2/src/DtbWithHooks.cpp 2008-02-26 05:25:21 UTC (rev 2342) @@ -30,8 +30,8 @@ #include "gui/TextRenderBrain.h" #include "ambulant/net/url.h" #include "ambulant/smil2/test_attrs.h" +#include "util/Log.h" - using namespace amis::dtb; DtbWithHooks* DtbWithHooks::pinstance = 0; @@ -345,7 +345,7 @@ p_mark = p_bmks->getItem(index); if (!p_mark) return; - + amis::util::Log::Instance()->writeMessage("Loading bookmark", "DtbWitHooks::loadBookmark", "AmisGuiMFC2"); loadSmilFromUrl(&p_mark->mpStart->mUri); } @@ -358,8 +358,10 @@ //set the spine at this file. this also makes sure that we're going to a file that is in the book. if (getSpine()->goToFile(&full_path)) { - - LPCTSTR str_ = A2T(full_path.get_url().c_str()); //(LPSTR) + LPCTSTR str_ = A2T(full_path.get_url().c_str()); + string log_msg = "Loading SMIL from URL: " + full_path.get_url(); + amis::util::Log::Instance()->writeMessage("Loading SMIL from URL", &full_path, + "DtbWithHooks::loadSmilFromUrl", "AmisGuiMFC2"); amis::gui::MainWndParts::Instance()->mpMmDoc->OnOpenDocument(str_); } //DanToDo: Is this the best place to set the PLAY/PAUSE status ? (is the book actually playing at this stage...probably not) Modified: branches/amis3/AmisGuiMFC2/src/Preferences.cpp =================================================================== --- branches/amis3/AmisGuiMFC2/src/Preferences.cpp 2008-02-24 04:58:39 UTC (rev 2341) +++ branches/amis3/AmisGuiMFC2/src/Preferences.cpp 2008-02-26 05:25:21 UTC (rev 2342) @@ -26,7 +26,7 @@ #include "util/SearchForFilesMFC.h" #include "util/FilePathTools.h" #include "io/ModuleDescReader.h" - +#include "util/Log.h" using namespace amis; Preferences* Preferences::pinstance = 0; @@ -98,14 +98,23 @@ { mFontsizeCssFiles = *searcher.getSearchResults(); } - else TRACE(_T("No fontsize css files found\n"));//TODO Log this message instead + else + { + TRACE(_T("No fontsize css files found\n")); + amis::util::Log::Instance()->writeWarning("No fontsize css files found in directory", + &mFontsizeCssDir, "Preferences::scanDirectoriesForCssFiles", "AmisGuiMFC2"); + } searcher.clearSearchResults(); if (searcher.startSearch(mContrastCssDir.get_file()) > 0) { mContrastCssFiles = *searcher.getSearchResults(); } - else TRACE(_T("No contrast css files found\n"));//TODO Log this message instead + else + { + TRACE(_T("No contrast css files found\n")); + string log_msg = "No contrast css files found in " + mContrastCssDir.get_url(); + } } //search for "moduleDesc.xml" files that inside the root language pack directory @@ -129,8 +138,10 @@ amis::ModuleDescData* p_data = reader.getModuleDescData(); if (p_data == NULL) { - //TODO: log error - no data available for language pack TRACE(_T("No data available for language pack\n")); + string log_msg = "No data available for language pack " + list[i].get_url(); + amis::util::Log::Instance()->writeError("No data available for language pack", + &list[i], "Preferences::scanDirectoriesForLanguagePackFiles", "AmisGuiMFC2"); } else { @@ -138,17 +149,26 @@ { string id = p_data->getId(); mInstalledLanguages[id] = p_data; + string log_msg = "Added language pack for " + id; + amis::util::Log::Instance()->writeMessage(log_msg, + "Preferences::scanDirectoriesForLanguagePackFile", "AmisGuiMFC2"); } } } else { - //TODO: log error - could not read language pack file TRACE(_T("Could not read language pack file\n")); + amis::util::Log::Instance()->writeError("Could not read language pack file: ", &list[i], + "Preferences::scanDirectoriesForLanguagePackFiles", "AmisGuiMFC2"); } } } - else TRACE(_T("No language pack files found\n"));//TODO Log this message instead + else + { + TRACE(_T("No language pack files found\n")); + amis::util::Log::Instance()->writeError("No language pack files found", + "Preferences::scanDirectoriesForLanguagePackFiles", "AmisGuiMFC2"); + } } Preferences::~Preferences() @@ -347,4 +367,123 @@ { amis::ModuleDescData* p_data = mInstalledLanguages[mUiLangId]; return p_data; +} + +void Preferences::logAllPreferences() +{ + amis::util::Log* p_log = amis::util::Log::Instance(); + p_log->writeMessage("__Preferences (all)__"); + + p_log->writeMessage("\tPreferences XML File: ", getSourceUrl()); + + string log_msg = "\tLanguage pack = " + getUiLangId(); + p_log->writeMessage(log_msg); + + log_msg = "\tStartup view = "; + if (getStartInBasicView()) log_msg += "Basic"; + else log_msg += "Default"; + p_log->writeMessage(log_msg); + + log_msg = "\tWill load last book on startup? "; + if (getLoadLastBook()) log_msg += "Yes"; + else log_msg += "No"; + p_log->writeMessage(log_msg); + + log_msg = "\tWill pause when AMIS loses application focus? "; + if (getPauseOnLostFocus()) log_msg += "Yes"; + else log_msg += "No"; + p_log->writeMessage(log_msg); + + log_msg = "\tIs self-voicing? "; + if (getIsSelfVoicing()) log_msg += "Yes"; + else log_msg += "No"; + p_log->writeMessage(log_msg); + + //TODO: log tts voice index as something meaningful + + log_msg = "\tUsing TTS or pre-recorded audio? "; + if (getUseTTSNotAudio()) log_msg += "TTS"; + else log_msg += "Audio"; + p_log->writeMessage(log_msg); + + log_msg = "\tDid AMIS exit cleanly last time? "; + if (getWasExitClean()) log_msg += "Yes"; + else log_msg += "No"; + p_log->writeMessage(log_msg); + + log_msg = "\tHighlight text? "; + if (getHighlightText()) log_msg += "Yes"; + else log_msg += "No"; + p_log->writeMessage(log_msg); + + log_msg = "\tDisable screensaver? "; + if (getDisableScreensaver()) log_msg += "Yes"; + else log_msg += "No"; + p_log->writeMessage(log_msg); + + p_log->writeMessage("\tBookmark dir = ", &mUserBmkDir); + p_log->writeMessage("\tLangpacks dir = ", &mLangpacksDir); + p_log->writeMessage("\tFontsize css dir = ", &mFontsizeCssDir); + p_log->writeMessage("\tContrast css dir = ", &mContrastCssDir); + p_log->writeMessage("\tUser css file = ", &mUserCssFile); + p_log->writeMessage("\tZed2005 css file = ", &mZed2005CssFile); + + p_log->writeMessage("\tInstalled language packs:"); + amis::StringModuleMap::iterator it; + it = mInstalledLanguages.begin(); + while (it != mInstalledLanguages.end()) + { + string lang_id = it->first; + log_msg = "\t\t" + lang_id; + p_log->writeMessage(log_msg); + it++; + } + + p_log->writeMessage("\tFontsize CSS files:"); + for (int i = 0; i<mFontsizeCssFiles.size(); i++) + p_log->writeMessage("\t\t", &mFontsizeCssFiles[i]); + + + p_log->writeMessage("\tContrast CSS files:"); + for (i = 0; i<mContrastCssFiles.size(); i++) + p_log->writeMessage("\t\t", &mContrastCssFiles[i]); +} + +void Preferences::logUserControllablePreferences() +{ + amis::util::Log* p_log = amis::util::Log::Instance(); + p_log->writeMessage("__Preferences (user-controllable only)__"); + + string log_msg = "\tLanguage pack = " + getUiLangId(); + p_log->writeMessage(log_msg); + + log_msg = "\tStartup view = "; + if (getStartInBasicView()) log_msg += "Basic"; + else log_msg += "Default"; + p_log->writeMessage(log_msg); + + log_msg = "\tWill load last book on startup? "; + if (getLoadLastBook()) log_msg += "Yes"; + else log_msg += "No"; + p_log->writeMessage(log_msg); + + log_msg = "\tWill pause when AMIS loses application focus? "; + if (getPauseOnLostFocus()) log_msg += "Yes"; + else log_msg += "No"; + p_log->writeMessage(log_msg); + + log_msg = "\tIs self-voicing? "; + if (getIsSelfVoicing()) log_msg += "Yes"; + else log_msg += "No"; + p_log->writeMessage(log_msg); + + log_msg = "\tHighlight text? "; + if (getHighlightText()) log_msg += "Yes"; + else log_msg += "No"; + p_log->writeMessage(log_msg); + + log_msg = "\tDisable screensaver? "; + if (getDisableScreensaver()) log_msg += "Yes"; + else log_msg += "No"; + p_log->writeMessage(log_msg); } \ No newline at end of file Modified: branches/amis3/AmisGuiMFC2/src/gui/AmisApp.cpp =================================================================== --- branches/amis3/AmisGuiMFC2/src/gui/AmisApp.cpp 2008-02-24 04:58:39 UTC (rev 2341) +++ branches/amis3/AmisGuiMFC2/src/gui/AmisApp.cpp 2008-02-26 05:25:21 UTC (rev 2342) @@ -28,7 +28,7 @@ #include "io/RecentBooksFileIO.h" #include "io/PreferencesFileIO.h" #include "util/SearchForFilesMFC.h" - +#include "util/Log.h" #include "pdtb.h" #include "dtb/nav/NavModel.h" #include "DtbWithHooks.h" @@ -128,7 +128,11 @@ mbBookIsOpen = false; mAppPath = ""; + //first read the preferences initializePathsAndFiles(); + //then start logging! this is in case we decide to turn logging on/off via the preferences + amis::util::Log::Instance()->startLog(this->getAppPath() + "amisLog.txt"); + Preferences::Instance()->logAllPreferences(); initializeSelfVoicing(); AfxEnableControlContainer(); @@ -156,7 +160,12 @@ // object and then sets it as the application's main window object CMDIFrameWnd* pFrame = new CMainFrame; - if (!pFrame->LoadFrame(IDR_AMISTYPE)) return FALSE; + if (!pFrame->LoadFrame(IDR_AMISTYPE)) + { + amis::util::Log::Instance()->writeError("Could not load MFC frame IDR_AMISTYPE", "CMainFrame::InitInstance", + "AmisGuiMFC2"); + return FALSE; + } m_pMainWnd = pFrame; @@ -167,7 +176,12 @@ // Dispatch commands specified on the command line //it turns out that this step is rather important even if you're not really interested in //the command line because mfc processes dynamic view creation somewhere in here. - if (!ProcessShellCommand(cmdInfo)) return FALSE; + if (!ProcessShellCommand(cmdInfo)) + { + amis::util::Log::Instance()->writeError("Error processing shell command info", "CAmisApp::InitInstance", + "AmisGuiMFC2"); + return FALSE; + } // try to load shared MDI menus and accelerator table HINSTANCE hInst = AfxGetResourceHandle(); @@ -194,6 +208,7 @@ int CAmisApp::ExitInstance() { + amis::util::Log::Instance()->writeMessage("Exiting", "CAmisApp::ExitInstance", "AmisGuiMFC2"); if (m_hMDIMenu != NULL) FreeResource(m_hMDIMenu); if (m_hMDIAccel != NULL)FreeResource(m_hMDIAccel); @@ -213,6 +228,7 @@ if (mpRecentBooks) delete mpRecentBooks; + amis::util::Log::Instance()->endLog(); return CWinApp::ExitInstance(); } @@ -357,9 +373,14 @@ ********************************/ void CAmisApp::OnFileOpen() { + amis::util::Log::Instance()->writeMessage("Showing file open dialog", "CAmisApp::OnFileOpen", "AmisGuiMFC2"); amis::gui::dialogs::AmisFileDialog* p_dlg = new amis::gui::dialogs::AmisFileDialog(amis::gui::dialogs::AmisFileDialog::getFileOpenFilter()); string filename = p_dlg->showOpen(); - if (filename == "") return; + if (filename == "") + { + amis::util::Log::Instance()->writeMessage("Dialog cancelled", "CAmisApp::OnFileOpen", "AmisGuiMFC2"); + return; + } //the user is able to open UAK files through AMIS if (isUserKeyFile(filename)) @@ -376,35 +397,39 @@ void CAmisApp::OnPlayPause() { - if (MainWndParts::Instance()->mpMainFrame->mbWasPlayingWhenLostFocus) { + if (MainWndParts::Instance()->mpMainFrame->mbWasPlayingWhenLostFocus) MainWndParts::Instance()->mpMainFrame->mbWasPlayingWhenLostFocus = false; - } MmView *view = MainWndParts::Instance()->mpMmView; assert(view); // XXXJack: or what to do if view == NULL? Skip? if (view->isPlaying() == true) { + amis::util::Log::Instance()->writeMessage("Pausing", "CAmisApp::OnPlayPause", "AmisGuiMFC2"); view->OnFilePause(); } else { + amis::util::Log::Instance()->writeMessage("Playing", "CAmisApp::OnPlayPause", "AmisGuiMFC2"); view->OnFilePlay(); } } void CAmisApp::OnNavPrevPhrase() { + amis::util::Log::Instance()->writeMessage("Previous phrase", "CAmisApp::OnNavPrevPhrase", "AmisGuiMFC2"); amis::dtb::DtbWithHooks::Instance()->previousPhrase(); } void CAmisApp::OnNavNextPhrase() { + amis::util::Log::Instance()->writeMessage("Next phrase", "CAmisApp::OnNavNextPhrase", "AmisGuiMFC2"); amis::dtb::DtbWithHooks::Instance()->nextPhrase(); } void CAmisApp::OnFileExit() { + amis::util::Log::Instance()->writeMessage("Exiting", "CAmisApp::OnFileExit", "AmisGuiMFC2"); CWnd * ptr = AfxGetMainWnd(); ptr->SendMessage(WM_CLOSE); } @@ -419,38 +444,46 @@ amis::RecentBookEntry* p_book = NULL; p_book = mpRecentBooks->getEntry(selection); - + string log_msg = "Loading recent book " + p_book->mPath.get_url(); + amis::util::Log::Instance()->writeMessage("Loading recent book", &p_book->mPath, "CAmisApp::OnFileRecentBook", "AmisGuiMFC2"); openBook(&p_book->mPath); } void CAmisApp::OnNavNextSection() { + amis::util::Log::Instance()->writeMessage("Next section", "CAmisApp::OnNavNextSection", "AmisGuiMFC2"); amis::gui::MainWndParts::Instance()->mpSidebar->m_wndDlg.nextSection(); } void CAmisApp::OnNavPreviousSection() { + amis::util::Log::Instance()->writeMessage("Previous section", "CAmisApp::OnNavPreviousSection", "AmisGuiMFC2"); amis::gui::MainWndParts::Instance()->mpSidebar->m_wndDlg.previousSection(); } void CAmisApp::OnNavShowSectionDepth(UINT id) { int level = id - SECTION_DEPTH_BASE_ID; + string log_msg = "Setting section depth to " + level; + amis::util::Log::Instance()->writeMessage(log_msg, "CAmisApp::OnNavShowSectionDepth", "AmisGuiMFC2"); amis::gui::MainWndParts::Instance()->mpSidebar->m_wndDlg.expandSections(level); } void CAmisApp::OnNavNextPage() { + amis::util::Log::Instance()->writeMessage("Next page", "CAmisApp::OnNavNextPage", "AmisGuiMFC2"); amis::gui::MainWndParts::Instance()->mpSidebar->m_wndDlg.nextPage(); } void CAmisApp::OnNavPrevPage() { + amis::util::Log::Instance()->writeMessage("Previous page", "CAmisApp::OnNavPrevPage", "AmisGuiMFC2"); amis::gui::MainWndParts::Instance()->mpSidebar->m_wndDlg.previousPage(); } //TODO need to fix this...how do I stop ambulant? void CAmisApp::OnFileClose() { + amis::util::Log::Instance()->writeMessage("Closing book", "CAmisApp::OnFileClose", "AmisGuiMFC2"); if (mbBookIsOpen) { //the order matters here @@ -464,6 +497,7 @@ void CAmisApp::OnVolumeUp() { + amis::util::Log::Instance()->writeMessage("Volume increase", "CAmisApp::OnVolumeUp", "AmisGuiMFC2"); //amis::audio::AmisAudio::Instance()->adjustVolume(1.2); REMOVED because it makes more sense to allow book volume control than the whole application: otherwise users would use their OS-level volume control. ambulant::gui::dx::change_global_level(1.2); //amis::gui::spoken::AudioSequencePlayer::Instance()->playPromptFromUiId(ID_MENU_PLAY_VOLUP, true, NULL); @@ -471,6 +505,7 @@ void CAmisApp::OnVolumeDown() { + amis::util::Log::Instance()->writeMessage("Volume decrease", "CAmisApp::OnVolumeDown", "AmisGuiMFC2"); //amis::audio::AmisAudio::Instance()->adjustVolume(1.0/1.2); REMOVED because it makes more sense to allow book volume control than the whole application: otherwise users would use their OS-level volume control. ambulant::gui::dx::change_global_level(1.0/1.2); //amis::gui::spoken::AudioSequencePlayer::Instance()->playPromptFromUiId(ID_MENU_PLAY_VOLDOWN, true, NULL); @@ -478,6 +513,7 @@ void CAmisApp::OnSpeedUp() { + amis::util::Log::Instance()->writeMessage("Speed increase", "CAmisApp::OnSpeedUp", "AmisGuiMFC2"); amis::audio::AmisAudio::Instance()->adjustRate(1.12); long currentRate = amis::tts::TTSPlayer::Instance()->GetSpeechRate(); @@ -491,6 +527,7 @@ void CAmisApp::OnSpeedDown() { + amis::util::Log::Instance()->writeMessage("Speed decrease", "CAmisApp::OnSpeedDown", "AmisGuiMFC2"); amis::audio::AmisAudio::Instance()->adjustRate(-1.12); long currentRate = amis::tts::TTSPlayer::Instance()->GetSpeechRate(); @@ -504,6 +541,7 @@ void CAmisApp::OnSpeedNormal() { + amis::util::Log::Instance()->writeMessage("Speed reset to normal", "CAmisApp::OnSpeedNormal", "AmisGuiMFC2"); amis::audio::AmisAudio::Instance()->setRate(1.0); amis::tts::TTSPlayer::Instance()->SetSpeechRate(0); @@ -517,17 +555,20 @@ void CAmisApp::OnAbout() { + amis::util::Log::Instance()->writeMessage("Showing about box", "CAmisApp::OnAbout", "AmisGuiMFC2"); amis::gui::dialogs::AboutDialog about; about.do_modal(); } void CAmisApp::OnViewSidebarOnoff() { + amis::util::Log::Instance()->writeMessage("Toggle sidebar", "CAmisApp::OnViewSidebarOnOff", "AmisGuiMFC2"); MainWndParts::Instance()->toggleSidebar(); } void CAmisApp::OnPlayEscape() { + amis::util::Log::Instance()->writeMessage("Escape", "CAmisApp::OnPlayEscape","AmisGuiMFC2"); MmView *view = MainWndParts::Instance()->mpMmView; assert(view); view->escapeCurrent(); @@ -537,6 +578,7 @@ { USES_CONVERSION; + amis::util::Log::Instance()->writeMessage("Showing open from URL dialog", "CAmisApp::OnFileOpenFromUrl", "AmisGuiMFC2"); amis::gui::dialogs::OpenUrlDialog dlg; string str_url = ""; @@ -546,10 +588,13 @@ ambulant::net::url book_url = ambulant::net::url::from_url(str_url); openBook(&book_url); } + else + amis::util::Log::Instance()->writeMessage("Dialog cancelled", "CAmisApp::OnFileOpenFromUrl", "AmisGuiMFC2"); } void CAmisApp::OnSkipInfo() { + amis::util::Log::Instance()->writeMessage("Showing reading options dialog (skippability)", "CAmisApp::OnSkipInfo", "AmisGuiMFC2"); amis::gui::dialogs::SkipDialog skip_dialog; skip_dialog.initializeData(amis::dtb::DtbWithHooks::Instance()->getCustomTestSet()); skip_dialog.do_modal(); @@ -558,6 +603,7 @@ void CAmisApp::OnAddBookmark() { + amis::util::Log::Instance()->writeMessage("Adding bookmark", "CAmisApp::OnAddBookmark", "AmisGuiMFC2"); amis::dtb::Bookmark* p_bmk = NULL; p_bmk = amis::dtb::DtbWithHooks::Instance()->addBookmark(); if (p_bmk) MenuManip::Instance()->addBookmark(p_bmk); @@ -567,13 +613,14 @@ { int idx; idx = id - BOOKMARKS_BASE_ID; - + amis::util::Log::Instance()->writeMessage("Loading bookmark", "CAmisApp::OnSelectBookmark", "AmisGuiMFC2"); amis::dtb::DtbWithHooks::Instance()->loadBookmark(idx); } void CAmisApp::OnGoToPage() { amis::gui::dialogs::GoToPageDialog dialog; + amis::util::Log::Instance()->writeMessage("Showing go to page dialog", "CAmisApp::OnGoToPage", "AmisGuiMFC2"); if (dialog.do_modal() == IDOK) { wstring page_number = dialog.getPageNumber(); @@ -586,32 +633,41 @@ if (p_page) amis::dtb::DtbWithHooks::Instance()->loadNavNode(p_page); } } + else + amis::util::Log::Instance()->writeMessage("Dialog cancelled", "CAmisApp::OnGoToPage", "AmisGuiMFC2"); } void CAmisApp::OnToggleContrast() { + amis::util::Log::Instance()->writeMessage("Toggle contrast", "CAmisApp::OnToggleContrast", "AmisGuiMFC2"); bool is_contrast_on = amis::gui::TextRenderBrain::Instance()->toggleContrast(); MenuManip::Instance()->setViewItemCheckmark(is_contrast_on, ID_MENU_VIEW_CONTRAST); } void CAmisApp::OnIncreaseFontSize() { + amis::util::Log::Instance()->writeMessage("Increase font size", "CAmisApp::OnIncreaseFontSize", "AmisGuiMFC2"); TextRenderBrain::Instance()->increaseFontSize(); } void CAmisApp::OnResetFontSize() { + amis::util::Log::Instance()->writeMessage("Reset font size", "CAmisApp::OnResetFontSize", "AmisGuiMFC2"); TextRenderBrain::Instance()->resetFontSize(); } void CAmisApp::OnSearchForBooks() { + amis::util::Log::Instance()->writeMessage("Showing search for books dialog", "CAmisApp::OnSearchForBooks", "AmisGuiMFC2"); dialogs::SearchForBooksDialog search; if (search.do_modal() == IDOK) { ambulant::net::url book_url = search.getBookToLoad(); this->openBook(&book_url); } + else + amis::util::Log::Instance()->writeMessage("Dialog cancelled", "CAmisApp::OnSearchForBooks", "AmisGuiMFC2"); } void CAmisApp::OnLoadCd() { + amis::util::Log::Instance()->writeMessage("Loading from CD", "CAmisApp::OnLoadCd", "AmisGuiMFC2"); amis::util::SearchForFilesMFC searcher; //prepare the search tool searcher.clearAll(); @@ -627,20 +683,24 @@ if (num_books == 0) { generalBookErrorMsgBox(_T("No files found on this CD-ROM")); + amis::util::Log::Instance()->writeWarning("No DAISY books on CD-ROM", "CAmisApp::OnLoadCd", "AmisGuiMFC2"); } else { amis::UrlList* p_results = searcher.getSearchResults(); if (p_results->size() > 1) { + amis::util::Log::Instance()->writeMessage("Multiple books found on CD-ROM", "CAmisApp::OnLoadCd", "AmisGuiMFC2"); dialogs::MultipleBooksOnVolumeDialog dlg(NULL, p_results); + amis::util::Log::Instance()->writeMessage("Showing multiple books on volume dialog", "CAmisApp::OnLoadCd", "AmisGuiMFC2"); if (dlg.do_modal() == IDOK) - { openBook(&dlg.getBookToLoad()); - } + else + amis::util::Log::Instance()->writeMessage("Dialog cancelled", "CAmisApp::OnLoadCd", "AmisGuiMFC2"); } else { + amis::util::Log::Instance()->writeMessage("Found one book on CD; opening it", "CAmisApp::OnLoadCd", "AmisGuiMFC2"); //open the first and only URL found openBook(&(*p_results)[0]); } @@ -650,6 +710,7 @@ void CAmisApp::OnPreferences() { dialogs::PreferencesDialog prefs; + amis::util::Log::Instance()->writeMessage("Showing preferences dialog", "CAmisApp::OnPreferences", "AmisGuiMFC2"); if (prefs.do_modal() == IDOK) { Preferences::Instance()->setIsSelfVoicing(prefs.mbIsSelfVoicing); @@ -671,12 +732,16 @@ amis::io::PreferencesFileIO prefs_io; prefs_io.writeToFile(Preferences::Instance()->getSourceUrl()->get_file(), Preferences::Instance()); + Preferences::Instance()->logUserControllablePreferences(); } + else + amis::util::Log::Instance()->writeMessage("Dialog cancelled", "CAmisApp::OnPreferences", "AmisGuiMFC2"); } void CAmisApp::OnPublicationSummary() { dialogs::PublicationSummaryDialog summary; + amis::util::Log::Instance()->writeMessage("Showing publication summary dialog", "CAmisApp::OnPublicationSummary", "AmisGuiMFC2"); summary.setBook(amis::dtb::DtbWithHooks::Instance()); summary.DoModal(); } @@ -709,7 +774,8 @@ MainWndParts::Instance()->updateTitlePlayState(!pauseState); } -bool CAmisApp::beforeModalBox() { +bool CAmisApp::beforeModalBox() +{ if (amis::Preferences::Instance()->getIsSelfVoicing() == true) { @@ -726,12 +792,11 @@ return b_was_playing; } -void CAmisApp::afterModalBox(bool b_was_playing) { - +void CAmisApp::afterModalBox(bool b_was_playing) +{ if (amis::Preferences::Instance()->getIsSelfVoicing() == true) { AudioSequencePlayer::Instance()->Stop(); - AudioSequencePlayer::playPromptFromStringId("dialogClosed"); AudioSequencePlayer::Instance()->waitForSequenceEnd(); } @@ -739,7 +804,7 @@ //resume playback if (b_was_playing == true) { - MmView *view = MainWndParts::Instance()->mpMmView; + MmView *view = MainWndParts::Instance()->mpMmView; view->OnFilePlay(); } } @@ -748,9 +813,9 @@ { bool b = beforeModalBox(); - AudioSequencePlayer::Instance()->Stop(); - AudioSequencePlayer::playPromptFromStringId("generalBookError"); - AfxMessageBox(str); + AudioSequencePlayer::Instance()->Stop(); + AudioSequencePlayer::playPromptFromStringId("generalBookError"); + AfxMessageBox(str); afterModalBox(b); } Modified: branches/amis3/AmisGuiMFC2/src/gui/ChildFrm.cpp =================================================================== --- branches/amis3/AmisGuiMFC2/src/gui/ChildFrm.cpp 2008-02-24 04:58:39 UTC (rev 2341) +++ branches/amis3/AmisGuiMFC2/src/gui/ChildFrm.cpp 2008-02-26 05:25:21 UTC (rev 2342) @@ -33,9 +33,6 @@ using namespace amis::gui; -///////////////////////////////////////////////////////////////////////////// -// CChildFrame - IMPLEMENT_DYNCREATE(CChildFrame, CMDIChildWnd) BEGIN_MESSAGE_MAP(CChildFrame, CMDIChildWnd) @@ -45,13 +42,8 @@ //}}AFX_MSG_MAP END_MESSAGE_MAP() -///////////////////////////////////////////////////////////////////////////// -// CChildFrame construction/destruction - CChildFrame::CChildFrame() { - // add member initialization code here - } CChildFrame::~CChildFrame() @@ -60,20 +52,11 @@ BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs) { - // Modify the Window class or styles here by modifying - // the CREATESTRUCT cs - - if( !CMDIChildWnd::PreCreateWindow(cs) ) - return FALSE; - + // Modify the Window class or styles here by modifying the CREATESTRUCT cs + if(!CMDIChildWnd::PreCreateWindow(cs)) return FALSE; return TRUE; } - - -///////////////////////////////////////////////////////////////////////////// -// CChildFrame diagnostics - #ifdef _DEBUG void CChildFrame::AssertValid() const { @@ -87,24 +70,15 @@ #endif //_DEBUG -///////////////////////////////////////////////////////////////////////////// -// CChildFrame message handlers - int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { - if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1) - return -1; - + if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1) return -1; this->ShowWindow(SW_SHOWMAXIMIZED); - return 0; } void CChildFrame::OnClose() { - - this->ShowWindow(SW_MINIMIZE); - -// CMDIChildWnd::OnClose(); + // CMDIChildWnd::OnClose(); } Modified: branches/amis3/AmisGuiMFC2/src/gui/HtmlDoc.cpp =================================================================== --- branches/amis3/AmisGuiMFC2/src/gui/HtmlDoc.cpp 2008-02-24 04:58:39 UTC (r... [truncated message content] |