COOPY » Guide  version 0.6.5
/home/paulfitz/cvs/coopy_scm/coopy/src/libsocialcalc/SocialCalcTextBook.cpp
Go to the documentation of this file.
00001 
00002 #include <coopy/FormatSniffer.h>
00003 #include <coopy/SocialCalcTextBook.h>
00004 #include <coopy/CsvRead.h>
00005 #include <coopy/JsWrap.h>
00006 #include <coopy/FileIO.h>
00007 #include <coopy/SocialCalcSheet.h>
00008 #include "jsapi.h"
00009 
00010 using namespace coopy::store;
00011 using namespace coopy::format;
00012 using namespace coopy::store::socialcalc;
00013 using namespace coopy::js;
00014 using namespace std;
00015 
00016 class SCCSV : public CsvSheetReader {
00017 public:
00018   CsvSheet *sheet;
00019   virtual CsvSheet *nextSheet(const char *name, bool named) {
00020     return sheet;
00021   }
00022 };
00023 
00024 bool SocialCalcTextBook::open(const Property& config) {
00025   if (!config.check("file")) return false;
00026   if (config.check("name")) {
00027     name = config.get("name").asString();
00028   }
00029 
00030   FormatSniffer f;
00031   if (!f.open(config.get("file").asString().c_str(),true)) return false;
00032   return sheet.fromSocialCalcString(f.read());
00033 }
00034 
00035 
00036 bool SocialCalcTextBook::write(TextBook *book, const Property& config) {
00037   if (!book) return false;
00038   SocialCalcTextBook *prev = dynamic_cast<SocialCalcTextBook *>(book);
00039   if (prev) {
00040     FileIO io;
00041     string txt = prev->sheet.toSocialCalcString(config);
00042     return io.openAndWrite(txt,config);
00043   }
00044   if (book->getNames().size()>1) {
00045     fprintf(stderr,"* socialcalc plugin cannot currently deal with multiple sheets\n");
00046     return false;
00047   }
00048   SocialCalcSheet sheet;
00049   if (!sheet.fromCsvString(book->readSheetByIndex(0).toString())) return false;
00050   FileIO io;
00051   return io.openAndWrite(sheet.toSocialCalcString(config),config);
00052 }
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines