You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
318 lines
9.0 KiB
318 lines
9.0 KiB
/*
|
|
Copyright (C) 2000, S.R.Haque <shaheedhaque@hotmail.com>.
|
|
This file is part of the KDE project
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Library General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2 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
|
|
Library General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Library General Public License
|
|
along with this library; see the file COPYING.LIB. If not, write to
|
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
Boston, MA 02110-1301, USA.
|
|
|
|
DESCRIPTION
|
|
*/
|
|
|
|
#include <pptdoc.h>
|
|
#include <pptxml.h>
|
|
#include <tqobject.h>
|
|
#include <KoGlobal.h>
|
|
|
|
const int PptXml::s_area = 30512;
|
|
|
|
PptXml::PptXml(
|
|
const myFile &mainStream,
|
|
const myFile ¤tUser,
|
|
const myFile &pictures):
|
|
PptDoc(
|
|
mainStream,
|
|
currentUser,
|
|
pictures)
|
|
{
|
|
m_isConverted = false;
|
|
m_success = false;
|
|
m_half = false;
|
|
m_y = 0;
|
|
}
|
|
|
|
PptXml::~PptXml()
|
|
{
|
|
}
|
|
|
|
bool PptXml::convert()
|
|
{
|
|
if (!m_isConverted)
|
|
{
|
|
// m_y = 30;
|
|
m_success = parse();
|
|
m_isConverted = true;
|
|
}
|
|
return m_success;
|
|
}
|
|
|
|
void PptXml::encode(TQString &text)
|
|
{
|
|
// When encoding the stored form of text to its run-time form,
|
|
// be sure to do the conversion for "&" to "&" first to avoid
|
|
// accidentally converting user text into one of the other escape
|
|
// sequences.
|
|
|
|
text.replace('&', "&");
|
|
text.replace('<', "<");
|
|
text.replace('>', ">"); // Needed to avoid ]]>
|
|
|
|
// Strictly, there is no need to encode " or ', but we do so to allow
|
|
// them to co-exist!
|
|
|
|
text.replace('"', """);
|
|
text.replace('\'', "'");
|
|
}
|
|
|
|
const TQString PptXml::getXml() const
|
|
{
|
|
TQString body = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE DOC>\n"
|
|
"<DOC mime=\"application/x-kpresenter\" email=\"reggie@kde.org\" syntaxVersion=\"2\" author=\"Reginald Stadlbauer\" editor=\"Powerpoint import filter\">\n"
|
|
" <PAPER ptWidth=\"680\" unit=\"0\" format=\"5\" orientation=\"0\" ptHeight=\"510\">\n"
|
|
" <PAPERBORDERS ptRight=\"0\" ptBottom=\"0\" ptLeft=\"0\" ptTop=\"0\"/>\n"
|
|
" </PAPER>\n"
|
|
" <BACKGROUND rastX=\"10\" rastY=\"10\" color=\"#ffffff\">\n";
|
|
body += m_pages;
|
|
body += " </BACKGROUND>\n"
|
|
" <HEADER show=\"0\">\n"
|
|
" <ORIG x=\"0\" y=\"0\"/>\n"
|
|
" <SIZE width=\"680\" height=\"20\"/>\n"
|
|
" <PEN width=\"1\" style=\"0\" color=\"#000000\"/>\n"
|
|
" <TEXTOBJ>\n"
|
|
" <P/>\n"
|
|
" </TEXTOBJ>\n"
|
|
" </HEADER>\n"
|
|
" <FOOTER show=\"0\">\n"
|
|
" <ORIG x=\"0\" y=\"430\"/>\n"
|
|
" <SIZE width=\"680\" height=\"20\"/>\n"
|
|
" <PEN width=\"1\" style=\"0\" color=\"#000000\"/>\n"
|
|
" <TEXTOBJ>\n"
|
|
" <P/>\n"
|
|
" </TEXTOBJ>\n"
|
|
" </FOOTER>\n"
|
|
" <PAGETITLES>\n";
|
|
body += m_titles;
|
|
body += " </PAGETITLES>\n"
|
|
" <PAGENOTES>\n";
|
|
body += m_notes;
|
|
body += " </PAGENOTES>\n"
|
|
" <OBJECTS>\n";
|
|
body += m_text;
|
|
body += " </OBJECTS>\n"
|
|
" <INFINITLOOP value=\"0\"/>\n"
|
|
" <MANUALSWITCH value=\"1\"/>\n"
|
|
" <PRESSPEED value=\"1\"/>\n"
|
|
" <PRESSLIDES value=\"0\"/>\n"
|
|
" <SELSLIDES>\n"
|
|
" <SLIDE nr=\"0\" show=\"1\"/>\n"
|
|
" </SELSLIDES>\n"
|
|
" <PIXMAPS>\n"
|
|
" </PIXMAPS>\n"
|
|
" <CLIPARTS>\n"
|
|
" </CLIPARTS>\n";
|
|
body += m_embedded;
|
|
body += "</DOC>\n";
|
|
//kdDebug(s_area) << body << endl;
|
|
return body;
|
|
}
|
|
|
|
void PptXml::gotDrawing(
|
|
unsigned id,
|
|
TQString type,
|
|
unsigned length,
|
|
const char *data)
|
|
{
|
|
TQString ourKey;
|
|
TQString uid;
|
|
TQString mimeType;
|
|
TQString filterArgs;
|
|
|
|
// Send the picture to the outside world and get back the UID.
|
|
|
|
ourKey = "vectorGraphic" + TQString::number(id) + "." + type;
|
|
if (type == "msod")
|
|
{
|
|
filterArgs = "shape-id=";
|
|
filterArgs += TQString::number(id);
|
|
filterArgs += ";delay-stream=";
|
|
filterArgs += TQString::number(0);
|
|
}
|
|
emit signalSavePart(
|
|
ourKey,
|
|
uid,
|
|
mimeType,
|
|
type,
|
|
length,
|
|
data);
|
|
|
|
// Add an entry to the list of embedded objects too. TBD: fix
|
|
// RECT and FRAME settings.
|
|
if (mimeType != "application/x-kontour")
|
|
{
|
|
m_embedded += " <EMBEDDED>\n"
|
|
"<OBJECT url=\"" +
|
|
uid +
|
|
"\" mime=\"" +
|
|
mimeType +
|
|
"\">\n<RECT x=\"30\" y=\"190\" w=\"120\" h=\"80\"/>\n"
|
|
"</OBJECT>\n"
|
|
"<SETTINGS>\n"
|
|
"<EFFECTS effect=\"0\" effect2=\"0\"/>\n"
|
|
"<PEN red=\"0\" green=\"0\" blue=\"0\" width=\"1\" style=\"0\"/>\n"
|
|
"<BRUSH red=\"0\" green=\"0\" blue=\"0\" style=\"0\"/>\n"
|
|
"<PRESNUM value=\"0\"/>\n"
|
|
"<ANGLE value=\"0\"/>\n"
|
|
"<FILLTYPE value=\"0\"/>\n"
|
|
"<GRADIENT red1=\"255\" green1=\"0\" blue1=\"0\" red2=\"0\" green2=\"255\" blue2=\"0\" type=\"1\" unbalanced=\"0\" xfactor=\"100\" yfactor=\"100\"/>\n"
|
|
"<DISAPPEAR effect=\"0\" doit=\"0\" num=\"1\"/>\n"
|
|
"</SETTINGS>\n"
|
|
" </EMBEDDED>\n";
|
|
}
|
|
}
|
|
|
|
void PptXml::gotSlide(PptSlide &slide)
|
|
{
|
|
static const unsigned pageHeight = 510;
|
|
TQ_UINT16 numbOfPholders = 0;
|
|
m_pages += " <PAGE/>\n";
|
|
numbOfPholders = slide.getNumberOfPholders();
|
|
for(TQ_UINT16 i = 0; i < numbOfPholders; i++)
|
|
{
|
|
slide.gotoPlaceholder(i);
|
|
setPlaceholder(slide);
|
|
}
|
|
m_y += pageHeight;
|
|
}
|
|
|
|
void PptXml::setPlaceholder(PptSlide &slide)
|
|
{
|
|
TQString xml_friendly;
|
|
unsigned i = 0;
|
|
bool bulletedList = false; //is this a bulleted list?
|
|
TQ_UINT16 type; //type of text
|
|
TQString x; //x of placeholder
|
|
TQString align; //align of text
|
|
TQString height ; //height of placeholder
|
|
TQString width ; //width of placeholder
|
|
TQString pointSize; //font size
|
|
|
|
xml_friendly = *slide.getPlaceholderText().at(i);
|
|
encode(xml_friendly);
|
|
|
|
type = slide.getPlaceholderType();
|
|
TQ_UINT16 y = 0;
|
|
|
|
switch (type)
|
|
{
|
|
case TITLE_TEXT:
|
|
y = 30;
|
|
height = TQString::number(55);
|
|
x = TQString::number(30);
|
|
width = TQString::number(610);
|
|
align = TQString::number(ALIGN_CENTER);
|
|
pointSize = TQString::number(44);
|
|
bulletedList = false;
|
|
m_titles += " <Title title=\"" + xml_friendly + "\" />\n";
|
|
break;
|
|
case CENTER_TITLE_TEXT:
|
|
y = 130;
|
|
x = TQString::number(45);
|
|
height = TQString::number(55);
|
|
width = TQString::number(610);
|
|
align = TQString::number(ALIGN_CENTER);
|
|
pointSize = TQString::number(44);
|
|
bulletedList = false;
|
|
m_titles += " <Title title=\"" + xml_friendly + "\" />\n";
|
|
break;
|
|
case CENTER_BODY_TEXT:
|
|
y = 200;
|
|
x = TQString::number(35);
|
|
height = TQString::number(37);
|
|
width = TQString::number(610);
|
|
align = TQString::number(ALIGN_CENTER);
|
|
pointSize = TQString::number(32);
|
|
bulletedList = false;
|
|
break;
|
|
case NOTES_TEXT:
|
|
m_notes += " <Note note=\"\" />\n";
|
|
break;
|
|
case BODY_TEXT:
|
|
y = 130;
|
|
x = TQString::number(35);
|
|
height = TQString::number(268);
|
|
width = TQString::number(610);
|
|
align = TQString::number(ALIGN_LEFT);
|
|
pointSize = TQString::number(28);
|
|
bulletedList = true;
|
|
break;
|
|
case OTHER_TEXT:
|
|
case HALF_BODY_TEXT:
|
|
case QUARTER_BODY_TEXT:
|
|
y = 130;
|
|
if(m_half)
|
|
{
|
|
x = TQString::number(335);
|
|
width = TQString::number(300);
|
|
m_half = false;
|
|
}
|
|
else
|
|
{
|
|
x = TQString::number(30);
|
|
width = TQString::number(300);
|
|
m_half = true;
|
|
}
|
|
height = TQString::number(268);
|
|
align = TQString::number(ALIGN_LEFT);
|
|
pointSize = TQString::number(28);
|
|
bulletedList = true;
|
|
break;
|
|
default:
|
|
return;
|
|
break;
|
|
}
|
|
|
|
m_text += "<OBJECT type=\"4\">\n"
|
|
" <ORIG x=\""+x+"\" y=\""+TQString::number(y + m_y)+"\"/>\n"
|
|
" <SIZE width=\""+width+"\" height=\""+ height +"\"/>\n"
|
|
" <PEN width=\"1\" style=\"0\" color=\"#000000\"/>\n"
|
|
" <TEXTOBJ>\n"
|
|
" <P align=\""+align+"\">\n";
|
|
if(bulletedList)
|
|
m_text += " <COUNTER numberingtype=\"0\" type=\"10\" depth=\"0\" />\n";
|
|
m_text += " <TEXT family=\"utopia\" pointSize=\""+pointSize+"\" color=\"#000000\">";
|
|
|
|
for (i = 0; i < slide.getPlaceholderText().count(); i++)
|
|
{
|
|
xml_friendly = *slide.getPlaceholderText().at(i);
|
|
encode(xml_friendly);
|
|
m_text += xml_friendly;
|
|
if (i < slide.getPlaceholderText().count() - 1)
|
|
{
|
|
m_text += "</TEXT>\n"
|
|
" </P>\n"
|
|
" <P align=\"1\">\n";
|
|
if(bulletedList)
|
|
m_text += " <COUNTER numberingtype=\"0\" type=\"10\" depth=\"0\" />\n";
|
|
m_text += " <TEXT family=\"utopia\" pointSize=\""+pointSize+"\" color=\"#000000\">";
|
|
}
|
|
}
|
|
m_text += "</TEXT>\n"
|
|
" </P>\n"
|
|
" </TEXTOBJ>\n"
|
|
"</OBJECT>";
|
|
|
|
}
|
|
|
|
#include "pptxml.moc"
|