summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKohei Yoshida <kyoshida@novell.com>2009-12-29 12:32:37 -0500
committerKohei Yoshida <kyoshida@novell.com>2009-12-29 12:32:37 -0500
commit2605839fcb9701ebf3b9f1b773ad91cb3b669f78 (patch)
tree43c6f2e47b5fdf89437a2b1facb877d92672508b
parentcfcb5a25dec927279a739d53884058b9221bcb49 (diff)
Load each xls document into frame.
-rw-r--r--inc/global.hxx16
-rw-r--r--setenv.sh.in3
-rw-r--r--source/global.cxx25
-rw-r--r--source/main.cxx25
4 files changed, 62 insertions, 7 deletions
diff --git a/inc/global.hxx b/inc/global.hxx
index fbb780f..db9cf96 100644
--- a/inc/global.hxx
+++ b/inc/global.hxx
@@ -2,15 +2,29 @@
#ifndef __GLOBAL_HXX__
#define __GLOBAL_HXX__
-#include <com/sun/star/frame/XDesktop.hpp>
+#include "cppuhelper/implementationentry.hxx"
#include <string>
+namespace com { namespace sun { namespace star {
+ namespace frame {
+ class XDesktop;
+ }
+
+ namespace sheet {
+ class XSpreadsheetDocument;
+ }
+}}}
+
namespace test {
::com::sun::star::uno::Reference< ::com::sun::star::frame::XDesktop >
bootstrap();
+::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSpreadsheetDocument >
+ loadComponent(const ::com::sun::star::uno::Reference<
+ ::com::sun::star::frame::XDesktop>& xDesktop, const ::rtl::OUString& rPath);
+
void info(const ::std::string& msg);
void error(const ::std::string& msg);
diff --git a/setenv.sh.in b/setenv.sh.in
index 0602456..4943192 100644
--- a/setenv.sh.in
+++ b/setenv.sh.in
@@ -1,3 +1,4 @@
CTRL_XLS_IN_DIR=@ROOTDIR@/control-import
+CTRL_XLS_OUT_DIR=@ROOTDIR@/control-export
-export CTRL_XLS_IN_DIR
+export CTRL_XLS_IN_DIR CTRL_XSL_OUT_DIR
diff --git a/source/global.cxx b/source/global.cxx
index 4a9f1e2..39e63a0 100644
--- a/source/global.cxx
+++ b/source/global.cxx
@@ -4,18 +4,25 @@
#include "rtl/ustring.hxx"
#include "rtl/textenc.h"
+#include <com/sun/star/frame/XDesktop.hpp>
#include <com/sun/star/sheet/XSpreadsheetDocument.hpp>
#include <com/sun/star/lang/XMultiComponentFactory.hpp>
+#include <com/sun/star/frame/XComponentLoader.hpp>
+#include <com/sun/star/beans/PropertyValue.hpp>
#include <cstring>
#include <iostream>
+using ::com::sun::star::beans::PropertyValue;
using ::com::sun::star::frame::XDesktop;
+using ::com::sun::star::frame::XComponentLoader;
using ::com::sun::star::sheet::XSpreadsheetDocument;
using ::com::sun::star::uno::XComponentContext;
using ::com::sun::star::lang::XMultiComponentFactory;;
+using ::com::sun::star::lang::XComponent;;
using ::com::sun::star::uno::UNO_QUERY_THROW;
using ::com::sun::star::uno::Reference;
+using ::com::sun::star::uno::Sequence;
using ::rtl::OUString;
using namespace ::std;
@@ -39,6 +46,24 @@ Reference<XDesktop> bootstrap()
return xDesktop;
}
+Reference<XSpreadsheetDocument> loadComponent(const Reference<XDesktop>& xDesktop, const OUString& rPath)
+{
+ Reference<XSpreadsheetDocument> xSpDoc;
+ Reference<XComponentLoader> xLoader(xDesktop, UNO_QUERY_THROW);
+ Sequence<PropertyValue> args;
+ Reference<XComponent> xComponent = xLoader->loadComponentFromURL(
+ rPath, ascii("_default"), 0, args);
+
+ if (!xComponent.is())
+ {
+ error("component failed to load");
+ return xSpDoc;
+ }
+
+ xSpDoc.set(xComponent, UNO_QUERY_THROW);
+ return xSpDoc;
+}
+
void info(const string& msg)
{
cout << "info: " << msg << endl;
diff --git a/source/main.cxx b/source/main.cxx
index 771d77a..9e4cd8c 100644
--- a/source/main.cxx
+++ b/source/main.cxx
@@ -10,6 +10,7 @@
#include <sys/stat.h>
#include <com/sun/star/lang/DisposedException.hpp>
+#include <com/sun/star/frame/XDesktop.hpp>
using ::com::sun::star::uno::Reference;
using ::com::sun::star::frame::XDesktop;
@@ -34,8 +35,6 @@ bool getImportDocuments(const string& inpath, vector<OUString>& rFilePaths)
return false;
}
- cout << "control xls inport directory: " << inpath << endl;
-
DIR* dp;
struct dirent* dirp;
if ((dp = opendir(inpath.c_str())) == NULL)
@@ -51,7 +50,7 @@ bool getImportDocuments(const string& inpath, vector<OUString>& rFilePaths)
if (aFileName == "." || aFileName == "..")
continue;
- string aFilePath = inpath + "/" + aFileName;
+ string aFilePath = "file://" + inpath + "/" + aFileName;
OUString aOUPath(aFilePath.c_str(), aFilePath.size(), RTL_TEXTENCODING_UTF8);
aFilePaths.push_back(aOUPath);
}
@@ -70,6 +69,21 @@ struct PrintFilePath : public ::std::unary_function<void, OUString>
}
};
+class LoadFile : public ::std::unary_function<void, OUString>
+{
+public:
+ explicit LoadFile(const Reference<XDesktop>& xDesktop) :
+ mxDesktop(xDesktop) {}
+
+ void operator() (const OUString& r) const
+ {
+ loadComponent(mxDesktop, r);
+ }
+
+private:
+ Reference<XDesktop> mxDesktop;
+};
+
}
int main()
@@ -84,11 +98,12 @@ int main()
if (!getImportDocuments(aXclImportPath, aFilePaths))
return EXIT_FAILURE;
+ cout << "control xls inport directory: " << aXclImportPath << endl;
for_each(aFilePaths.begin(), aFilePaths.end(), PrintFilePath());
- return EXIT_SUCCESS;
+ Reference<XDesktop> xDesktop = bootstrap();
+ for_each(aFilePaths.begin(), aFilePaths.end(), LoadFile(xDesktop));
- Reference<XDesktop> xDesktop = ::test::bootstrap();
try
{
xDesktop->terminate();