Commit f5b3e1c0 authored by Elen.Subbotina's avatar Elen.Subbotina Committed by Alexander Trofimov

(1.0.1.164): ASCOfficeOdfFile

дополнены и расширены переходы между слайдами в презентациях
версия stable

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@53574 954022d7-b5bf-4e40-9824-e11837661b57
parent a79fde44
#pragma once
//1
//0
//0
//163
#define INTVER 1,0,0,163
#define STRVER "1,0,0,163\0"
//1
//164
#define INTVER 1,0,1,164
#define STRVER "1,0,1,164\0"
......@@ -481,6 +481,14 @@
RelativePath=".\src\odf\chartsymbol.h"
>
</File>
<File
RelativePath=".\src\odf\clockvalue.cpp"
>
</File>
<File
RelativePath=".\src\odf\clockvalue.h"
>
</File>
<File
RelativePath=".\src\odf\color.cpp"
>
......@@ -785,6 +793,14 @@
RelativePath=".\src\odf\shadowtype.h"
>
</File>
<File
RelativePath=".\src\odf\smil_transitiontype.cpp"
>
</File>
<File
RelativePath=".\src\odf\smil_transitiontype.h"
>
</File>
<File
RelativePath=".\src\odf\stylefamily.cpp"
>
......
......@@ -47,12 +47,6 @@ public:
void start_office_presentation();
void end_office_presentation();
//void start_paragraph(const std::wstring & styleName);
//void end_paragraph();
//void start_span(const std::wstring & styleName);
//void end_span();
bool start_page(const std::wstring & pageName,
const std::wstring & pageStyleName,
const std::wstring & pageLayoutName,
......@@ -89,21 +83,9 @@ public:
pptx_table_context & get_table_context(){return pptx_table_context_;}
// num_format_context & get_num_format_context() { return num_format_context_; }
// xlsx_defined_names & get_xlsx_defined_names() { return xlsx_defined_names_; }
// xlsx_table_metrics & get_table_metrics();
// xlsx_drawing_context & get_drawing_context();
// xlsx_drawing_context_handle & get_drawing_context_handle();
//
// xlsx_comments_context & get_comments_context();
//xlsx_comments_context_handle & get_comments_context_handle();
mediaitems & get_mediaitems() { return pptx_slide_context_.get_mediaitems(); }
//void start_hyperlink(const std::wstring & styleName);//
//void start_hyperlink(const std::wstring & styleName);
//void end_hyperlink(std::wstring const & href);
void process_master_pages();
......
......@@ -27,11 +27,14 @@ public:
struct _transition
{
bool Enabled;
std::wstring Speed;
int Time;
std::wstring Type;
std::wstring Direction;
bool Enabled;
std::wstring Type;
_CP_OPT(std::wstring) Speed;
_CP_OPT(int) Time;
_CP_OPT(std::wstring) Dir;
_CP_OPT(std::wstring) Param;
bool onClick;
};
Impl(const std::wstring & odfPacket) : mediaitems_(odfPacket),odfPacket_(odfPacket)
......@@ -93,7 +96,9 @@ public:
pptx_drawings_ = pptx_drawings::create();
memset(&transition_,0,sizeof(_transition));
transition_.Enabled = false;
transition_.Speed = boost::none;
transition_.onClick = true;
}
size_t next_rId()
......@@ -133,21 +138,31 @@ void pptx_slide_context::start_slide_animation()
impl_->transition_.Enabled = true;
//default
impl_->transition_.Speed = L"med";
impl_->transition_.Type = L"wipe";
impl_->transition_.Type = L"wipe";
impl_->transition_.Time = boost::none;
impl_->transition_.Dir = boost::none;
impl_->transition_.Param = boost::none;
//speed & onClick
}
void pptx_slide_context::set_transitionFilter(std::wstring & type,_CP_OPT(std::wstring) & dir,_CP_OPT(std::wstring) & dop,_CP_OPT(int) & time)
{
impl_->transition_.Type = type;
impl_->transition_.Time = time; // ( oo )
impl_->transition_.Dir = dir;
impl_->transition_.Param = dop;
}
// !!!!
void pptx_slide_context::set_animation_duration(int dur)
void pptx_slide_context::set_transitionAction(bool val)
{
impl_->transition_.Time = dur;
impl_->transition_.onClick = val;
}
//smil_direction_,smil_type_,smil_subtype_,smil_mode_,color);
void pptx_slide_context::set_transitionFilter( _CP_OPT(std::wstring) direction,
_CP_OPT(std::wstring) type,
_CP_OPT(std::wstring) subtype,
_CP_OPT(std::wstring) mode,
_CP_OPT(std::wstring) fade_color)
void pptx_slide_context::set_transitionSpeed(std::wstring val)
{
if (val == L"medium")impl_->transition_.Speed=L"med";
else impl_->transition_.Speed= val;//fast / slow
}
......@@ -542,22 +557,34 @@ void pptx_slide_context::serialize_animations(std::wostream & strm)
{
CP_XML_NODE(L"p:transition")
{
if (impl_->transition_.Time>0)
if (impl_->transition_.Speed)
{
CP_XML_ATTR(L"spd",impl_->transition_.Speed);
CP_XML_ATTR(L"spd",impl_->transition_.Speed.get());
}
if (impl_->transition_.Time >0)
if (impl_->transition_.Time)
{
CP_XML_ATTR(L"advTm",impl_->transition_.Time);
}
CP_XML_ATTR(L"advTm",impl_->transition_.Time.get());
}
CP_XML_ATTR(L"advClick", impl_->transition_.onClick);
CP_XML_NODE(std::wstring(L"p:" + impl_->transition_.Type))
{
if (!impl_->transition_.Direction.empty())
if (impl_->transition_.Dir)
{
CP_XML_ATTR(L"dir",impl_->transition_.Direction);
CP_XML_ATTR(L"dir",impl_->transition_.Dir.get());
}
}
if (impl_->transition_.Param)
{
if (impl_->transition_.Type == L"wheel")
CP_XML_ATTR(L"spokes",impl_->transition_.Param.get());
if (impl_->transition_.Type == L"fade")
CP_XML_ATTR(L"thruBlk",impl_->transition_.Param.get());
if (impl_->transition_.Type == L"split")
CP_XML_ATTR(L"orient",impl_->transition_.Param.get());
}
}
//p:sndAc
}
}
//CP_XML_NODE(L"p:timing")- p:par
......
......@@ -16,7 +16,7 @@ struct _oox_fill;
class pptx_slide_context
{
public:
pptx_slide_context(pptx_conversion_context & Context/*, pptx_text_context & textCotnext*/);
pptx_slide_context(pptx_conversion_context & Context);
void start_slide();
void end_slide(){}
......@@ -24,9 +24,9 @@ public:
void start_slide_animation();
void end_slide_animation(){}
void set_animation_duration(int dur);
void set_transitionFilter(_CP_OPT(std::wstring),_CP_OPT(std::wstring),_CP_OPT(std::wstring),_CP_OPT(std::wstring),_CP_OPT(std::wstring));
void set_transitionFilter(std::wstring & type,_CP_OPT(std::wstring) & dir, _CP_OPT(std::wstring) & dop, _CP_OPT(int) & time);
void set_transitionAction(bool val);
void set_transitionSpeed(std::wstring val);
///////////////////////////////////////////////////////////////////////////////////////////
void set_rect(double width_pt, double height_pt, double x_pt, double y_pt);
......
......@@ -90,6 +90,7 @@ void anim_transition_filter_attlist::add_attributes( const xml::attributes_wc_pt
CP_APPLY_ATTR(L"smil:type", smil_type_);
CP_APPLY_ATTR(L"smil:fadeColor", smil_fadeColor_);
CP_APPLY_ATTR(L"smil:mode", smil_mode_);
CP_APPLY_ATTR(L"smil:dur", smil_dur_);
}
......@@ -104,17 +105,189 @@ void anim_transitionFilter::add_attributes( const xml::attributes_wc_ptr & Attri
void anim_transitionFilter::pptx_convert(oox::pptx_conversion_context & Context)
{
if (common_anim_smil_attlist_.smil_dur_)
_CP_OPT(std::wstring) color;
_CP_OPT(std::wstring) dir;
_CP_OPT(int) time;
std::wstring type;
_CP_OPT(std::wstring) param;
if (anim_transition_filter_attlist_.smil_dur_)
{
time = anim_transition_filter_attlist_.smil_dur_->get_value();
}
if (anim_transition_filter_attlist_.smil_fadeColor_)
{
Context.get_slide_context().set_animation_duration(5000/*common_anim_smil_attlist_.smil_dur_*/);//*1000);
//need parsing ~ 3s
color =anim_transition_filter_attlist_.smil_fadeColor_->get_hex_value();
}
_CP_OPT(std::wstring) color;
if (smil_fadeColor_)
smil_transition_type::type transition_type;
if (anim_transition_filter_attlist_.smil_type_)
{
color = smil_fadeColor_->get_hex_value();
transition_type = anim_transition_filter_attlist_.smil_type_->get_type();
}
Context.get_slide_context().set_transitionFilter(smil_direction_,smil_type_,smil_subtype_,smil_mode_,color);
switch(transition_type)
{
case smil_transition_type::barnVeeWipe:
type = L"split";
break;
case smil_transition_type::irisWipe:
if ((anim_transition_filter_attlist_.smil_subtype_) && (anim_transition_filter_attlist_.smil_subtype_.get()==L"diamond"))
type = L"diamond";
else
type = L"zoom";
break;
case smil_transition_type::miscDiagonalWipe:
if ((anim_transition_filter_attlist_.smil_subtype_) && (anim_transition_filter_attlist_.smil_subtype_.get()==L"doubleDiamond"))
type = L"diamond";
else
type = L"zoom";
break;
case smil_transition_type::ellipseWipe:
case smil_transition_type::eyeWipe:
type = L"circle";
break;
case smil_transition_type::roundRectWipe:
type = L"zoom";
break;
case smil_transition_type::fourBoxWipe:
case smil_transition_type::triangleWipe:
case smil_transition_type::arrowHeadWipe:
case smil_transition_type::pentagonWipe:
case smil_transition_type::hexagonWipe:
case smil_transition_type::starWipe:
case smil_transition_type::miscShapeWipe:
type = L"plus";
break;
case smil_transition_type::pinWheelWipe:
param = L"2";
case smil_transition_type::clockWipe:
case smil_transition_type::singleSweepWipe: //
case smil_transition_type::doubleFanWipe: //
type = L"wheel";
if ((anim_transition_filter_attlist_.smil_subtype_) && (anim_transition_filter_attlist_.smil_subtype_.get()==L"oneBlade")) param = L"1";
if ((anim_transition_filter_attlist_.smil_subtype_) && (anim_transition_filter_attlist_.smil_subtype_.get()==L"threeBlade"))param = L"3";
if ((anim_transition_filter_attlist_.smil_subtype_) && (anim_transition_filter_attlist_.smil_subtype_.get()==L"fourBlade")) param = L"4";
if ((anim_transition_filter_attlist_.smil_subtype_) && (anim_transition_filter_attlist_.smil_subtype_.get()==L"eightBlade"))param = L"8";
break;
case smil_transition_type::fanWipe:
type = L"wedge";
break;
case smil_transition_type::fade:
type = L"fade";
param = L"1";
break;
case smil_transition_type::checkerBoardWipe:
type = L"checker";
if (anim_transition_filter_attlist_.smil_subtype_.get()==L"across") dir = L"horz";
if (anim_transition_filter_attlist_.smil_subtype_.get()==L"down") dir = L"vert";
break;
case smil_transition_type::blindsWipe:
type = L"blinds";
if (anim_transition_filter_attlist_.smil_subtype_.get()==L"vertical") dir = L"vert";
if (anim_transition_filter_attlist_.smil_subtype_.get()==L"horizontal") dir = L"horz";
break;
case smil_transition_type::diagonalWipe:
case smil_transition_type::waterfallWipe:
type = L"strips";
if (anim_transition_filter_attlist_.smil_subtype_)
{
if (anim_transition_filter_attlist_.smil_subtype_.get()==L"horizontalLeft") dir = L"rd";
else if(anim_transition_filter_attlist_.smil_subtype_.get()==L"horizontalRight")dir = L"lu";
else if(anim_transition_filter_attlist_.smil_subtype_.get()==L"verticalRight") dir = L"ld";
else dir = L"ru";
}
break;
case smil_transition_type::dissolve:
type = L"dissolve";
break;
case smil_transition_type::randomBarWipe:
type = L"randomBar";
if (anim_transition_filter_attlist_.smil_subtype_.get()==L"vertical") dir = L"vert";
if (anim_transition_filter_attlist_.smil_subtype_.get()==L"horizontal") dir = L"horz";
break;
case smil_transition_type::pushWipe:
type = L"push";
if (anim_transition_filter_attlist_.smil_subtype_.get()==L"combVertical") {type = L"comb"; dir = L"vert";};
if (anim_transition_filter_attlist_.smil_subtype_.get()==L"combHorizontal") {type = L"comb"; dir = L"horz";};
break;
case smil_transition_type::slideWipe:
type = L"pull";
break;
case smil_transition_type::boxWipe:
type = L"cover";
break;
case smil_transition_type::barnDoorWipe:
type = L"split";
if (anim_transition_filter_attlist_.smil_subtype_.get()==L"vertical") param = L"vert";
if (anim_transition_filter_attlist_.smil_subtype_.get()==L"horizontal") param = L"horz";
break;
case smil_transition_type::barWipe:
type = L"wipe";
if (anim_transition_filter_attlist_.smil_subtype_)
{
if (anim_transition_filter_attlist_.smil_subtype_.get()==L"fromTopLeft") {type = L"strips"; dir = L"rd";}
if (anim_transition_filter_attlist_.smil_subtype_.get()==L"fromBottomLeft") {type = L"strips"; dir = L"ru";}
if (anim_transition_filter_attlist_.smil_subtype_.get()==L"fromTopRight") {type = L"strips"; dir = L"ld";}
if (anim_transition_filter_attlist_.smil_subtype_.get()==L"fromBottomRight"){type = L"strips"; dir = L"lu";}
if (anim_transition_filter_attlist_.smil_subtype_.get()==L"fadeOverColor") {type = L"fade"; param = L"0";}
}
break;
///////////////////////////////////////////////////////
case smil_transition_type::bowTieWipe:
case smil_transition_type::veeWipe:
case smil_transition_type::zigZagWipe:
case smil_transition_type::barnZigZagWipe:
case smil_transition_type::doubleSweepWipe:
case smil_transition_type::saloonDoorWipe:
case smil_transition_type::windshieldWipe:
case smil_transition_type::snakeWipe:
case smil_transition_type::spiralWipe:
case smil_transition_type::parallelSnakesWipe:
case smil_transition_type::boxSnakesWipe:
break;
//////////////////////////////////////////////////////
}
if (anim_transition_filter_attlist_.smil_subtype_)
{
if (!dir)
{
if (anim_transition_filter_attlist_.smil_subtype_.get()==L"leftToRight")
{
if ((anim_transition_filter_attlist_.smil_direction_) && (anim_transition_filter_attlist_.smil_direction_.get()==L"reverse"))dir = L"l";
else dir = L"r";
}
if (anim_transition_filter_attlist_.smil_subtype_.get()==L"topToBottom")
{
if ((anim_transition_filter_attlist_.smil_direction_) && (anim_transition_filter_attlist_.smil_direction_.get()==L"reverse"))dir = L"u";
else dir = L"d";
}
if (anim_transition_filter_attlist_.smil_subtype_.get()==L"fromTop") dir = L"d";
if (anim_transition_filter_attlist_.smil_subtype_.get()==L"fromLeft") dir = L"r";
if (anim_transition_filter_attlist_.smil_subtype_.get()==L"fromRight") dir = L"l";
if (anim_transition_filter_attlist_.smil_subtype_.get()==L"fromBottom") dir = L"u";
if (anim_transition_filter_attlist_.smil_subtype_.get()==L"topRight") dir = L"ld";
if (anim_transition_filter_attlist_.smil_subtype_.get()==L"bottomLeft") dir = L"lu";
if (anim_transition_filter_attlist_.smil_subtype_.get()==L"bottomRight") dir = L"ru";
if (anim_transition_filter_attlist_.smil_subtype_.get()==L"topLeft") dir = L"rd";
if (anim_transition_filter_attlist_.smil_subtype_.get()==L"fromTopLeft") dir = L"rd";
if (anim_transition_filter_attlist_.smil_subtype_.get()==L"fromBottomLeft") dir = L"ru";
if (anim_transition_filter_attlist_.smil_subtype_.get()==L"fromTopRight") dir = L"ld";
if (anim_transition_filter_attlist_.smil_subtype_.get()==L"fromBottomRight")dir = L"lu";
}
if (!dir && (anim_transition_filter_attlist_.smil_direction_) && (anim_transition_filter_attlist_.smil_direction_.get()==L"reverse"))
dir = L"in";
}
Context.get_slide_context().set_transitionFilter(type , dir, param , time);
}
......
......@@ -7,6 +7,8 @@
#include "office_elements.h"
#include "office_elements_create.h"
#include "common_attlists.h"
#include "smil_transitiontype.h"
namespace cpdoccore {
namespace odf {
......@@ -72,11 +74,11 @@ public:
_CP_OPT(std::wstring) smil_direction_;
_CP_OPT(std::wstring) smil_subtype_;
_CP_OPT(std::wstring) smil_type_;
_CP_OPT(std::wstring) smil_dur_;
_CP_OPT(smil_transition_type) smil_type_;
_CP_OPT(std::wstring) smil_mode_;
_CP_OPT(color) smil_fadeColor;
}
_CP_OPT(color) smil_fadeColor_;
_CP_OPT(clockvalue) smil_dur_;
};
//anim:transitionFilter
class anim_transitionFilter : public office_element_impl<anim_transitionFilter>
......@@ -95,7 +97,8 @@ public:
private:
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
virtual void add_child_element( xml::sax * Reader, const ::std::wstring & Ns, const ::std::wstring & Name){}
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
};
......
#include "precompiled_cpodf.h"
#include "clockvalue.h"
#include <iostream>
#include <sstream>
#include <lexical_cast.h>
#include <cpdoccore/CPAssert.h>
namespace cpdoccore { namespace odf {
static bool parseTime(const std::wstring & Time, double & Hours, double & Minutes, double & Seconds, int & Ms)
{
try
{
boost::match_results<std::wstring::const_iterator> res;
//Full clock values:
// 02:30:03 = 2 hours, 30 minutes and 3 seconds
// 50:00:10.25 = 50 hours, 10 seconds and 250 milliseconds
boost::wregex r1 (L"([\\d]+):([\\d]+):([\\d+(\\.\\d{0,})?]+)");
if (boost::regex_match(Time, res, r1))
{
Hours = boost::lexical_cast<int>(res[1].str());
Minutes = boost::lexical_cast<int>(res[2].str());
Seconds = boost::lexical_cast<double>(res[3].str());
return true;
}
//Partial clock value:
// 02:33 = 2 minutes and 33 seconds
// 00:10.5 = 10.5 seconds = 10 seconds and 500 milliseconds
std::wstring Time2 = L"00:10.5";
boost::wregex r2 (L"([\\d]+):([\\d+(\\.\\d{0,})?]+)");
if (boost::regex_match(Time, res, r2))
{
Minutes = boost::lexical_cast<int>(res[1].str());
Seconds = boost::lexical_cast<double>(res[2].str());
return true;
}
//Timecount values:
// 3.2h = 3.2 hours = 3 hours and 12 minutes
// 45min = 45 minutes
// 30s = 30 seconds
// 5ms = 5 milliseconds
// 12.467 = 12 seconds and 467 milliseconds
boost::wregex r3 (L"([\\d+(\\.\\d{0,})?]+)([A-Za-z]{0,})");
if (boost::regex_match(Time, res, r3))
{
if (!res[2].str().empty())
{
std::wstring n = res[2].str();
std::transform(n.begin(), n.end(), n.begin(), ::tolower);
if (n == L"h")
{
Hours = boost::lexical_cast<double>(res[1].str());
}
else if (n == L"min")
{
Minutes = boost::lexical_cast<double>(res[1].str());
}
else if (n == L"s")
{
Seconds = boost::lexical_cast<double>(res[1].str());
}
else if (n == L"ms")
{
Ms = boost::lexical_cast<int>(res[1].str());
}
}
else
Seconds = boost::lexical_cast<double>(res[1].str());
return true;
}
}
catch(...)
{
}
return false;
}
clockvalue clockvalue::parse(const std::wstring & Str)
{
int v=0;
int ms=0;
double h=0,m=0,s =0;
bool res = parseTime(Str,h,m,s,ms);
v = (((h*60)+m)*60+s)*1000+ms;
return clockvalue(v);
}
} }
#pragma once
#include <iosfwd>
#include <string>
#include "odfattributes.h"
namespace cpdoccore { namespace odf {
class clockvalue
{
public:
public:
clockvalue(int ms = 0) : value_(ms)
{}
int get_value() const
{
return value_;
}
static clockvalue parse(const std::wstring & Str);
private:
int value_;//in ms
};
}
APPLY_PARSE_XML_ATTRIBUTES(odf::clockvalue);
}
#ifndef _CPDOCCORE_ODF_COLOR_H_
#define _CPDOCCORE_ODF_COLOR_H_
#pragma once
#include <iosfwd>
#include <string>
......@@ -35,5 +34,3 @@ std::wostream & operator << (std::wostream & _Wostream, const color & _Color);
APPLY_PARSE_XML_ATTRIBUTES(odf::color);
}
#endif
......@@ -482,7 +482,7 @@ void common_anim_smil_attlist::add_attributes( const xml::attributes_wc_ptr & At
//CP_APPLY_ATTR(L"smil:direction", smil_direction_);
// CP_APPLY_ATTR(L"smil:subtype", smil_subtype_);
// CP_APPLY_ATTR(L"smil:type", smil_type_);
CP_APPLY_ATTR(L"smil:dur", smil_dur_);
//CP_APPLY_ATTR(L"smil:dur", smil_dur_);
}
//
......
......@@ -23,6 +23,7 @@
#include "presentationclass.h"
#include "xlink.h"
#include "drawfill.h"
#include "clockvalue.h"
#define _CP_APPLY_PROP(A, B) \
if (B) \
......@@ -802,14 +803,14 @@ public:
//_CP_APPLY_PROP(smil_direction_, Other.smil_direction_);
//_CP_APPLY_PROP(smil_subtype_, Other.smil_subtype_);
//_CP_APPLY_PROP(smil_type_, Other.smil_type_);
_CP_APPLY_PROP(smil_dur_, Other.smil_dur_);
// _CP_APPLY_PROP(smil_dur_, Other.smil_dur_);
}
public:
//_CP_OPT(std::wstring) smil_direction_;
//_CP_OPT(std::wstring) smil_subtype_;
//_CP_OPT(std::wstring) smil_type_;
_CP_OPT(std::wstring) smil_dur_;
//_CP_OPT(std::wstring) smil_dur_;
//_CP_OPT(color) smil_fadeColor;
......
......@@ -117,6 +117,22 @@ void draw_page::pptx_convert(oox::pptx_conversion_context & Context)
oox::_oox_fill fill;
Compute_GraphicFill(properties->content().common_draw_fill_attlist_, Context.root()->odf_context().drawStyles() ,fill);
Context.get_slide_context().add_background(fill);
//÷àñòü ñâîéñòâ ïåðåõîäîâ ìåæäó ñëàéäàìè òóòà
if (properties->content().presentation_transition_type_)
{
if (properties->content().presentation_transition_type_.get() == L"automatic" ||
properties->content().presentation_transition_type_.get() == L"semi-automatic")
{
Context.get_slide_context().set_transitionAction(false);
}else
Context.get_slide_context().set_transitionAction(true);//manual (default)
}
if (properties->content().presentation_transition_speed_)
{
Context.get_slide_context().set_transitionSpeed(properties->content().presentation_transition_speed_.get());
}
}
}
}
......
#ifndef _CPDOCCORE_LENGTH_H_
#define _CPDOCCORE_LENGTH_H_
#ifdef _MSC_VER
#pragma once
#endif
#include <iosfwd>
#include <string>
......@@ -60,4 +55,3 @@ APPLY_PARSE_XML_ATTRIBUTES(odf::length);
}
#endif
......@@ -33,7 +33,6 @@
#include "paragraph_elements.h"
#include "text_elements.h"
#include "anim_elements.h"
#include "table_calculation_settings.h"
#include "number_style.h"
......
#include "precompiled_cpodf.h"
#include "smil_transitiontype.h"
#include <ostream>
namespace cpdoccore { namespace odf {
smil_transition_type smil_transition_type::parse(const std::wstring & Str)
{
std::wstring tmp = Str;
boost::algorithm::to_lower(tmp);
if(tmp == L"barwipe") return smil_transition_type( barWipe );
else if(tmp == L"boxwipe") return smil_transition_type( boxWipe );
else if(tmp == L"fourboxwipe") return smil_transition_type( fourBoxWipe );
else if(tmp == L"barndoorwipe") return smil_transition_type( barnDoorWipe );
else if(tmp == L"diagonalwipe") return smil_transition_type( diagonalWipe );
else if(tmp == L"bowtiewipe") return smil_transition_type( bowTieWipe );
else if(tmp == L"miscdiagonalwipe") return smil_transition_type( miscDiagonalWipe );
else if(tmp == L"veewipe") return smil_transition_type( veeWipe );
else if(tmp == L"barnveewipe") return smil_transition_type( barnVeeWipe );
else if(tmp == L"zigzagwipe") return smil_transition_type( zigZagWipe );
else if(tmp == L"barnzigzagwipe") return smil_transition_type( barnZigZagWipe );
else if(tmp == L"iriswipe") return smil_transition_type( irisWipe);
else if(tmp == L"trianglewipe") return smil_transition_type( triangleWipe);
else if(tmp == L"arrowheadwipe") return smil_transition_type( arrowHeadWipe );
else if(tmp == L"pentagonwipe") return smil_transition_type( pentagonWipe );
else if(tmp == L"hexagonwipe") return smil_transition_type( hexagonWipe );
else if(tmp == L"ellipsewipe") return smil_transition_type( ellipseWipe );
else if(tmp == L"eyewipe") return smil_transition_type( eyeWipe );
else if(tmp == L"roundrectwipe") return smil_transition_type( roundRectWipe );
else if(tmp == L"starwipe") return smil_transition_type( starWipe );
else if(tmp == L"miscshapewipe") return smil_transition_type( miscShapeWipe );
else if(tmp == L"clockwipe") return smil_transition_type( clockWipe );
else if(tmp == L"pinwheelwipe") return smil_transition_type( pinWheelWipe );
else if(tmp == L"singlesweepwipe") return smil_transition_type( singleSweepWipe);
else if(tmp == L"fanwipe") return smil_transition_type( fanWipe );
else if(tmp == L"doublefanwipe") return smil_transition_type( doubleFanWipe );
else if(tmp == L"doublesweepwipe") return smil_transition_type( doubleSweepWipe );
else if(tmp == L"saloondoorwipe") return smil_transition_type( saloonDoorWipe );
else if(tmp == L"windshieldwipe") return smil_transition_type( windshieldWipe );
else if(tmp == L"snakewipe") return smil_transition_type( snakeWipe );
else if(tmp == L"spiralwipe") return smil_transition_type( spiralWipe );
else if(tmp == L"parallelsnakeswipe")return smil_transition_type( parallelSnakesWipe );
else if(tmp == L"boxsnakeswipe") return smil_transition_type( boxSnakesWipe );
else if(tmp == L"waterfallwipe") return smil_transition_type( waterfallWipe );
else if(tmp == L"pushwipe") return smil_transition_type( pushWipe );
else if(tmp == L"slidewipe") return smil_transition_type( slideWipe );
else if(tmp == L"fade") return smil_transition_type( fade );
else if(tmp == L"checkerboardwipe") return smil_transition_type( checkerBoardWipe);
else if(tmp == L"blindswipe") return smil_transition_type( blindsWipe);
else if(tmp == L"dissolve") return smil_transition_type( dissolve);
else if(tmp == L"randombarwipe") return smil_transition_type( randomBarWipe);
else
{
return smil_transition_type( barWipe );
}
}
} }
#pragma once
#include <string>
#include "odfattributes.h"
namespace cpdoccore { namespace odf {
class smil_transition_type
{
public:
enum type
{
barWipe,
boxWipe,
fourBoxWipe,
barnDoorWipe,
diagonalWipe,
bowTieWipe,
miscDiagonalWipe,
veeWipe,
barnVeeWipe,
zigZagWipe,
barnZigZagWipe,
irisWipe,
triangleWipe,
arrowHeadWipe,
pentagonWipe,
hexagonWipe,
ellipseWipe,
eyeWipe,
roundRectWipe,
starWipe,
miscShapeWipe,
clockWipe,
pinWheelWipe,
singleSweepWipe,
fanWipe,
doubleFanWipe,
doubleSweepWipe,
saloonDoorWipe,
windshieldWipe,
snakeWipe,
spiralWipe,
parallelSnakesWipe,
boxSnakesWipe,
waterfallWipe,
pushWipe,
slideWipe,
fade,
checkerBoardWipe,
blindsWipe,
dissolve,
randomBarWipe
};
smil_transition_type() {}
smil_transition_type(type _Type) : type_(_Type)
{}
type get_type() const
{
return type_;
};
static smil_transition_type parse(const std::wstring & Str);
private:
type type_;
};
std::wostream & operator << (std::wostream & _Wostream, const smil_transition_type & _Val);
}
APPLY_PARSE_XML_ATTRIBUTES(odf::smil_transition_type);
}
......@@ -71,11 +71,16 @@ void style_drawing_page_properties::add_child_element( xml::sax * Reader, const
void drawing_page_properties::add_attributes( const xml::attributes_wc_ptr & Attributes )
{
common_draw_fill_attlist_.add_attributes(Attributes);
anim_transition_filter_attlist_.add_attributes(Attributes);
CP_APPLY_ATTR(L"draw:fill-image-height", draw_fill_image_height_);
CP_APPLY_ATTR(L"draw:fill-image-width", draw_fill_image_width_);
CP_APPLY_ATTR(L"draw:background-size", draw_background_size_);
CP_APPLY_ATTR(L"presentation:transition-type", presentation_transition_type_);
CP_APPLY_ATTR(L"presentation:transition-style", presentation_transition_style_);
CP_APPLY_ATTR(L"presentation:transition-speed", presentation_transition_speed_);
}
void drawing_page_properties::apply_from(const drawing_page_properties & Other)
{
......
......@@ -9,6 +9,8 @@
#include "office_elements_create.h"
#include "presentationclass.h"
#include "anim_elements.h"
#include "drawfill.h"
namespace cpdoccore {
......@@ -50,15 +52,17 @@ public:
void add_attributes( const xml::attributes_wc_ptr & Attributes );
void apply_from(const drawing_page_properties & Other);
common_draw_fill_attlist common_draw_fill_attlist_;
common_draw_fill_attlist common_draw_fill_attlist_;
anim_transition_filter_attlist anim_transition_filter_attlist_;
_CP_OPT(length) draw_fill_image_height_;
_CP_OPT(length) draw_fill_image_width_;
_CP_OPT(std::wstring) draw_background_size_;//"border" or "full"
//_CP_OPT(std::wstring) presentation_transition_type_;
//presentation:transition-style
//presentation:transition-speed
_CP_OPT(std::wstring)presentation_transition_type_;//manual, automatic, semi-automatic ( )
_CP_OPT(std::wstring)presentation_transition_style_;//none, fade, move, uncover,clockwise, .... smil
_CP_OPT(std::wstring)presentation_transition_speed_;//slow, medium, fast
//presentation:display-footer
//presentation:display-page-number
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment