00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "PDFApp.h"
00020 #include "poppler/Object.h"
00021 #include "config.h"
00022 #include "poppler/GlobalParams.h"
00023 #include "PDFViewerLog.h"
00024 #include "poppler/SecurityHandler.h"
00025
00026
00027 CPDFApp::CPDFApp(int * argc, char *argv[])
00028 {
00029 controller.app = this;
00030 setupX(argc, argv);
00031 initialize();
00032 }
00033
00034 CPDFApp::~CPDFApp(void)
00035 {
00036
00037 }
00038
00039 void CPDFApp::clear()
00040 {
00041 close();
00042 delete controller.core; controller.core = NULL;
00043 delete controller.view; controller.view = NULL;
00044 PV_LOGPRINTF("Going to remove globalParams %p", globalParams);
00045 delete globalParams; globalParams = NULL;
00046 }
00047
00048 void CPDFApp::initialize()
00049 {
00050 globalParams = new GlobalParams("");
00051
00052
00053 SplashColor white;
00054 white[0] = 255;
00055 white[1] = 255;
00056 white[2] = 255;
00057 controller.core = new CPDFCore(splashModeRGB8, 4, gFalse, white);
00058 controller.core->setController(&controller);
00059
00060
00061
00062
00063
00064
00065 controller.thread.start(&controller.param);
00066 }
00067
00068 void CPDFApp::run()
00069 {
00070 gtk_main();
00071 }
00072
00073
00074
00075 void CPDFApp::quit(GBool bNormal)
00076 {
00077
00078 clear();
00079
00080
00081 if (bNormal)
00082 {
00083 saveSettings();
00084 gtk_main_quit ();
00085 }
00086 else
00087 {
00088 delete this;
00089 _exit(0);
00090 }
00091 }
00092
00093 void CPDFApp::close()
00094 {
00095 controller.thread.stop();
00096 PV_LOGPRINTF("Stop Render Thread!");
00097 controller.core->close();
00098 PV_LOGPRINTF("Clear PDFCore!");
00099 controller.pageList.clear();
00100 PV_LOGPRINTF("Clear page list!");
00101 controller.todoList.clear();
00102 PV_LOGPRINTF("Clear todo list!");
00103 controller.view->onClose();
00104 }
00105
00106 void CPDFApp::setupX(int * argc, char *argv[])
00107 {
00108
00109 controller.gtkMgr.setupWindow();
00110
00111
00112 controller.view = new CPDFView(controller.gtkMgr.window, &controller);
00113 }
00114
00115
00116 void CPDFApp::loadSettings(GooString * fileName)
00117 {
00118
00119
00120 strncpy(path, fileName->getCString(), MAX_PATH);
00121 char * p = strrchr(path, '/');
00122 *p = 0;
00123 controller.settings.load(path);
00124 controller.validateSettings();
00125 }
00126
00127
00128 void CPDFApp::loadScribble(GooString * fileName, GBool bEnable)
00129 {
00130 #if (PV_PROFILE_ON)
00131 int t1 = controller.getHighTimeStamp();
00132 #endif
00133
00134 if (bEnable)
00135 {
00136 controller.scbMgr.open(fileName->getCString());
00137 controller.channels.initScribbleState(controller.scbMgr.getScbDoc());
00138 }
00139 else
00140 {
00141 PV_LOGPRINTF("Inhibit scribble by manifest!");
00142 controller.channels.initScribbleState(0);
00143 }
00144
00145 #if (PV_PROFILE_ON)
00146 int t2 = controller.getHighTimeStamp();
00147 PV_DUMP("CPDFApp::loadScribble uses %d\n", t2 - t1);
00148 #endif
00149 }
00150
00151 void CPDFApp::saveSettings()
00152 {
00153 controller.settings.save(path);
00154 }
00155
00156 GBool CPDFApp::open(GooString * fileName,
00157 GooString * ownerPassword,
00158 GooString * userPassword)
00159 {
00160 PV_LOGPRINTF("Open document %s", fileName->getCString());
00161 if (errNone == controller.core->open(fileName, ownerPassword, userPassword, controller.core))
00162 {
00163 PV_LOGPRINTF("Open document %s done!", fileName->getCString());
00164
00165
00166 PDFDoc * pdfdoc = controller.core->getPDFDoc();
00167 controller.pageList.reset(pdfdoc->getNumPages());
00168
00169
00170 loadSettings(fileName);
00171
00172
00173 loadScribble(fileName, controller.settings.isScribbleEnabled());
00174
00175
00176 controller.view->initializeViews();
00177
00178
00179 controller.view->displayPage(controller.settings.getCurrentPage(), ScrollToPosition);
00180
00181
00182 controller.channels.pagebar_set_count(pdfdoc->getNumPages());
00183 return gTrue;
00184 }
00185 PV_ERRORPRINTF("Could not open file!");
00186 return gFalse;
00187 }
00188
00189
00190 void * CPDFApp::getAuthData()
00191 {
00192 GooString * password = NULL;
00193 if (controller.view)
00194 {
00195 password = controller.view->getPassword();
00196 return password;
00197 }
00198 return NULL;
00199 }