LibreOffice Development [ Comments in .pptx ] (Annotations Issue)
Vinaya Mandke
vinayamandke at gmail.com
Mon Jan 28 06:34:52 PST 2013
Hi,
PFA the diff file...
I know that its incomplete and should have a separate handler, but as of
now I can atleast save the comment data...
This is what I have done
- I have handled comments exactly as notes
- In slidefragmenthandler added tokens to handle the comment attributes
- New file: annotation_buffer.h contains a vector to save anntotation
data of the particular slide
- Modified fragmenthandler2.cxx: startFastElement , endFastElement to
handle and save text characters of the comment
Regards,
Vinaya
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/libreoffice/attachments/20130128/1b1fca58/attachment.html>
-------------- next part --------------
diff --git a/oox/source/core/annotation_buffer.h b/oox/source/core/annotation_buffer.h
deleted file mode 100644
index 35ddc7e..0000000
--- a/oox/source/core/annotation_buffer.h
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <vector>
-#include <string>
-class annotation_data
-{
-public:
-std::string authorId;
-std::string dt;
-std::string idx;
-std::string x;
-std::string y;
-std::string text;
-};
-extern std::vector <annotation_data> all_comments_on_slide;
-class authors
-{
-public:
-std::string clrIdx;
-std::string id;
-std::string initials;
-std::string lastIdx;
-std::string name;
-};
-extern std::vector <authors> all_authors;
diff --git a/oox/source/core/fragmenthandler2.cxx b/oox/source/core/fragmenthandler2.cxx
index e9b9c28..bfc6834 100644
--- a/oox/source/core/fragmenthandler2.cxx
+++ b/oox/source/core/fragmenthandler2.cxx
@@ -20,10 +20,6 @@
#include "oox/core/fragmenthandler2.hxx"
#include "oox/core/xmlfilterbase.hxx"
-#include "../oox/source/core/annotation_buffer.h"
-
-int is_annotation_text;
-
namespace oox {
namespace core {
@@ -119,21 +115,12 @@ Reference< XFastContextHandler > SAL_CALL FragmentHandler2::createFastChildConte
void SAL_CALL FragmentHandler2::startFastElement(
sal_Int32 nElement, const Reference< XFastAttributeList >& rxAttribs ) throw( SAXException, RuntimeException )
{
- switch( nElement )
- {
- case PPT_TOKEN( text ):
- is_annotation_text = 1; //set to 1 to handle chars
- break;
- }
implStartElement( nElement, rxAttribs );
}
void SAL_CALL FragmentHandler2::characters( const OUString& rChars ) throw( SAXException, RuntimeException )
{
implCharacters( rChars );
- if ( is_annotation_text == 1)
- { all_comments_on_slide.back().text += rtl::OUStringToOString( rChars , RTL_TEXTENCODING_UTF8).getStr();
- }
}
void SAL_CALL FragmentHandler2::endFastElement( sal_Int32 nElement ) throw( SAXException, RuntimeException )
@@ -144,10 +131,8 @@ void SAL_CALL FragmentHandler2::endFastElement( sal_Int32 nElement ) throw( SAXE
case MCE_TOKEN( AlternateContent ):
aMceState.pop_back();
break;
- case PPT_TOKEN( text ):
- is_annotation_text =0; // set to 0 as comment chars are handled
- break;
}
+
implEndElement( nElement );
}
diff --git a/oox/source/ppt/presentationfragmenthandler.cxx b/oox/source/ppt/presentationfragmenthandler.cxx
index 573c4db..c92cdad 100644
--- a/oox/source/ppt/presentationfragmenthandler.cxx
+++ b/oox/source/ppt/presentationfragmenthandler.cxx
@@ -41,11 +41,6 @@
#include "oox/ppt/layoutfragmenthandler.hxx"
#include "oox/ppt/pptimport.hxx"
-#include <stdio.h>
-#include "../oox/source/core/annotation_buffer.h"
-std::vector <annotation_data> all_comments_on_slide;
-std::vector <authors> all_authors;
-
using rtl::OUString;
using namespace ::com::sun::star;
using namespace ::oox::core;
@@ -175,10 +170,8 @@ void PresentationFragmentHandler::finalizeImport()
FragmentHandlerRef xSlideFragmentHandler( new SlideFragmentHandler( rFilter, aSlideFragmentPath, pSlidePersistPtr, Slide ) );
- // importing the corresponding masterpage/layout rtl::OUStringToOString(sString, RTL_TEXTENCODING_UTF8)
+ // importing the corresponding masterpage/layout
OUString aLayoutFragmentPath = xSlideFragmentHandler->getFragmentPathFromFirstType( CREATE_OFFICEDOC_RELATION_TYPE( "slideLayout" ) );
- OUString aCommentFragmentPath = xSlideFragmentHandler->getFragmentPathFromFirstType( CREATE_OFFICEDOC_RELATION_TYPE( "comments" ) );
- printf("\n Comment Present at :- %s\n",rtl::OUStringToOString(aCommentFragmentPath, RTL_TEXTENCODING_UTF8).getStr());
if ( !aLayoutFragmentPath.isEmpty() )
{
// importing layout
@@ -287,27 +280,6 @@ void PresentationFragmentHandler::finalizeImport()
}
}
}
- if( !aCommentFragmentPath.isEmpty() )
- {
- printf("\n Comment Present!!! \n");
- Reference< XPresentationPage > xPresentationPage( xSlide, UNO_QUERY );
- Reference< XDrawPage > xNotesPage( xPresentationPage->getNotesPage() );
- SlidePersistPtr pNotesPersistPtr( new SlidePersist( rFilter, sal_False, sal_True, xNotesPage,
- ShapePtr( new PPTShape( Slide, "com.sun.star.drawing.GroupShape" ) ), mpTextListStyle ) );
- FragmentHandlerRef xNotesFragmentHandler( new SlideFragmentHandler( getFilter(), aCommentFragmentPath, pNotesPersistPtr, Slide ) );
- all_comments_on_slide.clear();
- rFilter.getNotesPages().push_back( pNotesPersistPtr );
- rFilter.setActualSlidePersist( pNotesPersistPtr );
- importSlide( xNotesFragmentHandler, pNotesPersistPtr );
- //print the comments on console
- std::vector<annotation_data>::iterator it;
- for(it=all_comments_on_slide.begin();it!=all_comments_on_slide.end();it++) {
- printf("\nComment:-\n");
- printf("AutorId: %s , DT %s, IDX: %s, x %s y %s",it->authorId.c_str(),it->dt.c_str(),it->idx.c_str(),it->x.c_str(),it->y.c_str());
- printf("\nText: %s",it->text.c_str());
- }
- }
-
}
}
ResolveTextFields( rFilter );
diff --git a/oox/source/ppt/slidefragmenthandler.cxx b/oox/source/ppt/slidefragmenthandler.cxx
index 1f97a98..a59f2e1 100644
--- a/oox/source/ppt/slidefragmenthandler.cxx
+++ b/oox/source/ppt/slidefragmenthandler.cxx
@@ -38,7 +38,6 @@
#include "oox/drawingml/clrschemecontext.hxx"
#include "oox/ppt/pptimport.hxx"
-#include "../oox/source/core/annotation_buffer.h"
using rtl::OUString;
using namespace ::com::sun::star;
@@ -194,24 +193,11 @@ SlideFragmentHandler::~SlideFragmentHandler() throw()
case PPT_TOKEN( custDataLst ): // CT_CustomerDataList
case PPT_TOKEN( tagLst ): // CT_TagList
return this;
-
- //for Comments
- //case PPT_TOKEN( cmLst ):
- case PPT_TOKEN( cm ):
- all_comments_on_slide.push_back(annotation_data());
- all_comments_on_slide.back().authorId = rtl::OUStringToOString( rAttribs.getString(XML_authorId, OUString()),RTL_TEXTENCODING_UTF8).getStr();
- all_comments_on_slide.back().idx = rtl::OUStringToOString( rAttribs.getString(XML_idx, OUString()),RTL_TEXTENCODING_UTF8).getStr();
- all_comments_on_slide.back().dt = rtl::OUStringToOString( rAttribs.getString(XML_dt, OUString()),RTL_TEXTENCODING_UTF8).getStr();
- all_comments_on_slide.back().text = "";
- break;
- case PPT_TOKEN( pos ):
- all_comments_on_slide.back().x = rtl::OUStringToOString( rAttribs.getString(XML_x, OUString()),RTL_TEXTENCODING_UTF8).getStr();
- all_comments_on_slide.back().y = rtl::OUStringToOString( rAttribs.getString(XML_y, OUString()),RTL_TEXTENCODING_UTF8).getStr();
- break;
- // case PPT_TOKEN( text ):
}
+
return this;
}
+
void SlideFragmentHandler::finalizeImport()
{
try
More information about the LibreOffice
mailing list