00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "channels.h"
00020 #include "liberipc/eripcviewer.h"
00021 #include "PDFViewerLog.h"
00022
00023 CChannels::CChannels()
00024 : doc(NULL)
00025 , tbUpdateType(dmQUndefined)
00026 {
00027 initialize();
00028 }
00029
00030 CChannels::~CChannels()
00031 {
00032 }
00033
00034 void CChannels::initialize()
00035 {
00036
00037 erIpcStartClient(ER_BUSYD_CHANNEL, &erbusyChannel);
00038
00039
00040 erIpcStartClient(ER_PAGEBAR_CHANNEL, &erpagebarChannel);
00041
00042
00043 erIpcStartClient(ER_TOOLBAR_CHANNEL, &ertoolbarChannel);
00044 tbSelectIconSet(ertoolbarChannel, ER_PDF_VIEWER_UA_ID);
00045
00046
00047 tbDisableUpdate(ertoolbarChannel, ER_PDF_VIEWER_UA_ID);
00048 tbClearIconSet(ertoolbarChannel, ER_PDF_VIEWER_UA_ID);
00049
00050
00051 tbAppendPlatformIcon( ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_trashcan, -1);
00052 tbSetStatePlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_trashcan, iconState_grey );
00053 tbAppendPlatformIcon( ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_keyboard, -1);
00054 tbSetStatePlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_keyboard, iconState_normal );
00055
00056
00057 tbAppendPlatformIcon( ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_portrait_landscape, ccVwrToolbar);
00058 tbSetStatePlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_portrait_landscape, iconState_normal );
00059
00060
00061 tbAppendPlatformIcon( ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_page_mode, ccVwrToolbar);
00062 tbSetStatePlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_page_mode, iconState_normal );
00063
00064
00065 tbAppendPlatformIcon( ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_zoomfit, ccVwrToolbar);
00066 tbSetStatePlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_zoomfit, iconState_normal );
00067
00068
00069 tbAppendPlatformIcon( ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_zoomin, ccVwrToolbar);
00070 tbSetStatePlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_zoomin, iconState_normal);
00071
00072
00073 tbAppendPlatformIcon( ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_zoomback, ccVwrToolbar);
00074 tbSetStatePlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_zoomback, iconState_grey);
00075
00076
00077
00078
00079 tbAppendPlatformIcon( ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_pan, ccVwrToolbar);
00080 tbSetStatePlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_pan, iconState_normal );
00081
00082
00083 tbAppendPlatformIcon( ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_back, ccVwrToolbar);
00084 tbSetStatePlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_back, iconState_grey );
00085
00086
00087 tbAppendPlatformIcon( ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_forward, ccVwrToolbar);
00088 tbSetStatePlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_forward, iconState_grey);
00089
00090
00091 tbEnableUpdate(ertoolbarChannel, ER_PDF_VIEWER_UA_ID);
00092
00093 nPanState = nZoominState = nZoomoutState = iconState_normal;
00094 nZoombackState = iconState_grey;
00095 nContinousState = iconState_normal;
00096 nRotateState = PortraitToLandscape;
00097 nBackwardState = nForwardState = iconState_grey;
00098
00099
00100 }
00101
00103
00104 void CChannels::updateScribbleIcons(ScbDocPtr pDoc)
00105 {
00106
00107 if (pDoc == 0)
00108 {
00109 tbAppendPlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_pen, ccVwrToolbar);
00110 tbSetStatePlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_pen, iconState_grey);
00111 return;
00112 }
00113
00114 int index = 0;
00115
00116 tbAppendPlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_pen, ccVwrToolbar);
00117 if (SCB_TBS_SCRIBBLE == pDoc->context.curState)
00118 {
00119 tbSetStatePlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_pen, iconState_selected);
00120 }
00121
00122
00123 if (SCB_TBS_SELECT_PEN_SIZE == pDoc->context.curState)
00124 {
00125 for(index = iconID_pen1pixelLow; index <= iconID_pen7pixelLow; ++index)
00126 {
00127 tbAppendPlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, index, ccVwrToolbar);
00128 }
00129 index = (int)iconID_pen1pixelLow + pDoc->context.curStrokeStyle.penSize/2;
00130 tbSetStatePlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, index, iconState_selected);
00131 }
00132 else
00133 {
00134
00135 index = (int)iconID_pen1pixel + doc->context.curStrokeStyle.penSize/2;
00136 tbAppendPlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, index, ccVwrToolbar);
00137 }
00138
00139
00140 if (SCB_TBS_SELECT_LINE_COLOR == pDoc->context.curState)
00141 {
00142 for(index = iconID_penwhiteLow ; index >=iconID_penblackLow; --index)
00143 {
00144 tbAppendPlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, index, ccVwrToolbar);
00145 }
00146 index = (int)iconID_penblackLow + (int)SCB_DEV_COLOR_BLACK - (int)doc->context.curStrokeStyle.color;
00147 tbSetStatePlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, index, iconState_selected);
00148 }
00149 else
00150 {
00151 index = (int)iconID_penblack + (int)SCB_DEV_COLOR_BLACK - (int)doc->context.curStrokeStyle.color;
00152 tbAppendPlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, index, ccVwrToolbar);
00153 }
00154
00155
00156 tbAppendPlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_eraseline, ccVwrToolbar);
00157 if (SCB_TBS_ERASE == pDoc->context.curState)
00158 {
00159 tbSetStatePlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_eraseline, iconState_selected);
00160 }
00161 }
00162
00163 void CChannels::initScribbleState(ScbDocPtr pDoc)
00164 {
00165 if (pDoc)
00166 {
00167 doc = pDoc;
00168 doc->context.curState = SCB_TBS_NONE;
00169 }
00170 tbDisableUpdate(ertoolbarChannel, ER_PDF_VIEWER_UA_ID);
00171 updateScribbleIcons(doc);
00172 tbEnableUpdate(ertoolbarChannel, ER_PDF_VIEWER_UA_ID);
00173 }
00174
00175 GBool CChannels::isScribbleIcon(const int id)
00176 {
00177 if ((iconID_pen == id) ||
00178 (iconID_eraseline == id) ||
00179 (iconID_pen1pixel <= id && iconID_pen7pixel >= id) ||
00180 (iconID_penblack <= id && iconID_penwhite >= id))
00181 {
00182 return gTrue;
00183 }
00184 return gFalse;
00185 }
00186
00188
00189 void CChannels::onScribbleIconsClicked(const int iconID, const int state)
00190 {
00191 if (doc == 0)
00192 {
00193 return;
00194 }
00195
00196
00197 if (iconState_selected == nZoominState)
00198 {
00199 setToolbarDirty();
00200 setZoomIn(iconState_normal);
00201 }
00202 if (iconState_selected == nZoomoutState)
00203 {
00204 setToolbarDirty();
00205 setZoomOut(iconState_normal);
00206 }
00207 if (iconState_selected == nPanState)
00208 {
00209 setToolbarDirty();
00210 setPanState(iconState_normal);
00211 }
00212
00213 if (iconID == iconID_pen)
00214 {
00215 if (SCB_TBS_SCRIBBLE == doc->context.curState)
00216 {
00217 doc->context.curState = SCB_TBS_NONE;
00218 }
00219 else
00220 {
00221 doc->context.curState = SCB_TBS_SCRIBBLE;
00222 }
00223 setToolbarDirty();
00224 }
00225 else if (iconID_pen1pixel <= iconID && (int)iconID_pen7pixel >= iconID)
00226 {
00227 if (SCB_TBS_SELECT_PEN_SIZE != doc->context.curState)
00228 {
00229 doc->context.curState = SCB_TBS_SELECT_PEN_SIZE;
00230 }
00231 setToolbarDirty();
00232 }
00233 else if (iconID_pen1pixelLow <= iconID && iconID_pen7pixelLow >= iconID)
00234 {
00235 doc->context.curState = SCB_TBS_SCRIBBLE;
00236 doc->context.curStrokeStyle.penSize = ((int)iconID - (int)iconID_pen1pixelLow) * 2 + 1;
00237 setToolbarDirty();
00238 }
00239 else if ((int)iconID_penblack <= iconID && (int)iconID_penwhite >= iconID)
00240 {
00241 if (SCB_TBS_SELECT_LINE_COLOR != doc->context.curState)
00242 {
00243 doc->context.curState = SCB_TBS_SELECT_LINE_COLOR;
00244 }
00245 setToolbarDirty();
00246 }
00247 else if (iconID_penblackLow <= iconID && iconID_penwhiteLow >= iconID)
00248 {
00249 doc->context.curState = SCB_TBS_SCRIBBLE;
00250 doc->context.curStrokeStyle.color = (ScbDevColor)((int)SCB_DEV_COLOR_BLACK - ((int)iconID - (int)iconID_penblackLow));
00251 setToolbarDirty();
00252 }
00253 else if (iconID_eraseline == iconID)
00254 {
00255 if (SCB_TBS_ERASE != doc->context.curState)
00256 {
00257 doc->context.curState = SCB_TBS_ERASE;
00258 }
00259 else
00260 {
00261 doc->context.curState = SCB_TBS_NONE;
00262 }
00263 setToolbarDirty();
00264 }
00265
00266 if (isToolbarDirty())
00267 {
00268 setToolbarUpdateType();
00269 }
00270 }
00271
00272
00274
00275 void CChannels::busy_blink()
00276 {
00277 busySetBusy(erbusyChannel, ccBusyState_Blink);
00278 }
00279
00280 void CChannels::busy_on()
00281 {
00282 busySetBusy(erbusyChannel, ccBusyState_On);
00283 }
00284
00285 void CChannels::busy_off()
00286 {
00287 busySetBusy(erbusyChannel, ccBusyState_Off);
00288 }
00289
00291
00292 void CChannels::pagebar_set_count(const int count)
00293 {
00294 pbReset(erpagebarChannel, ER_PDF_VIEWER_UA_ID);
00295 pbSetPageCount(erpagebarChannel, ER_PDF_VIEWER_UA_ID, count);
00296 pbRedraw(erpagebarChannel, ER_PDF_VIEWER_UA_ID);
00297
00298 }
00299
00300 void CChannels::pagebar_set_current_page(const int number)
00301 {
00302 pbSetCurrentPage(erpagebarChannel, ER_PDF_VIEWER_UA_ID, number);
00303 pbRedraw(erpagebarChannel, ER_PDF_VIEWER_UA_ID);
00304 pbSynchronise(erpagebarChannel, ER_PDF_VIEWER_UA_ID);
00305 }
00306
00307
00308 GBool CChannels::onReceiveToolbarMsg(const int iconID, const int state)
00309 {
00310 if (iconID == iconID_zoomin)
00311 {
00312 if (iconState_selected == nZoominState)
00313 {
00314 setToolbarDirty();
00315 setZoomIn(iconState_normal);
00316 }
00317 else if (iconState_normal == nZoominState)
00318 {
00319 setToolbarDirty();
00320 setZoomIn(iconState_selected);
00321 if (isZoomOutEnable())
00322 {
00323 setZoomOut(iconState_normal);
00324 }
00325 if (isPanEnable())
00326 {
00327 setPanState(iconState_normal);
00328 }
00329 setScribbleNone(doc);
00330 }
00331 PV_TBPRINTF("Zoomin %d\n", nZoominState);
00332 }
00333 else if (iconID == iconID_zoomout)
00334 {
00335 if (iconState_selected == nZoomoutState)
00336 {
00337 setToolbarDirty();
00338 setZoomOut(iconState_normal);
00339 }
00340 else if (iconState_normal == nZoomoutState)
00341 {
00342 setToolbarDirty();
00343 setZoomOut(iconState_selected);
00344 if (isZoomInEnable())
00345 {
00346 setZoomIn(iconState_normal);
00347 }
00348 if (isPanEnable())
00349 {
00350 setPanState(iconState_normal);
00351 }
00352 setScribbleNone(doc);
00353 }
00354 }
00355 else if (iconID == iconID_pan)
00356 {
00357 if (iconState_normal == nPanState)
00358 {
00359 setToolbarDirty();
00360 setPanState(iconState_selected);
00361 if (isZoomInEnable())
00362 {
00363 setZoomIn(iconState_normal);
00364 }
00365 if (isZoomOutEnable())
00366 {
00367 setZoomOut(iconState_normal);
00368 }
00369 setScribbleNone(doc);
00370 }
00371 else if (iconState_selected == nPanState)
00372 {
00373 setToolbarDirty();
00374 setPanState(iconState_normal);
00375 }
00376 PV_TBPRINTF("Pan %d\n", nPanState);
00377 }
00378 else if ((iconID == iconID_pen) ||
00379 (iconID >= iconID_pen1pixel && iconID <= iconID_pen7pixel) ||
00380 (iconID >= iconID_pen1pixelLow && iconID <= iconID_pen7pixelLow) ||
00381 (iconID >= iconID_penblackLow && iconID <= iconID_penwhiteLow) ||
00382 (iconID >= iconID_penblack && iconID <= iconID_penwhite) ||
00383 (iconID == iconID_eraseline))
00384 {
00385 onScribbleIconsClicked(iconID, state);
00386 }
00387 return isToolbarDirty();
00388 }
00389
00390 void CChannels::redrawToolbar(GBool bSync)
00391 {
00392 if (isToolbarDirty())
00393 {
00394
00395 tbDisableUpdate(ertoolbarChannel, ER_PDF_VIEWER_UA_ID);
00396 tbClearIconSet(ertoolbarChannel, ER_PDF_VIEWER_UA_ID);
00397
00398
00399 if (PortraitToLandscape == nRotateState)
00400 {
00401 tbAppendPlatformIcon( ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_portrait_landscape, ccVwrToolbar);
00402 tbSetStatePlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_portrait_landscape, iconState_normal);
00403 }
00404 else if (LandscapeToPortrait == nRotateState)
00405 {
00406 tbAppendPlatformIcon( ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_landscape_portrait, ccVwrToolbar);
00407 tbSetStatePlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_landscape_portrait, iconState_selected);
00408 }
00409
00410
00411 if (iconState_normal == nContinousState)
00412 {
00413 tbAppendPlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_page_mode, ccVwrToolbar);
00414 tbSetStatePlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_page_mode, iconState_normal);
00415 }
00416 else if (3 == nContinousState)
00417 {
00418 tbAppendPlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_continuous_mode, ccVwrToolbar);
00419 tbSetStatePlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_continuous_mode, iconState_selected);
00420 }
00421
00422
00423 tbAppendPlatformIcon( ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_zoomfit, ccVwrToolbar);
00424 tbSetStatePlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_zoomfit, iconState_normal );
00425
00426
00427 tbAppendPlatformIcon( ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_zoomin, ccVwrToolbar);
00428 tbSetStatePlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_zoomin, nZoominState);
00429
00430
00431 tbAppendPlatformIcon( ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_zoomback, ccVwrToolbar);
00432 tbSetStatePlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_zoomback, nZoombackState);
00433
00434
00435 tbAppendPlatformIcon( ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_pan, ccVwrToolbar);
00436 tbSetStatePlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_pan, nPanState );
00437
00438
00439 tbAppendPlatformIcon( ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_back, ccVwrToolbar);
00440 tbSetStatePlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_back, nBackwardState);
00441
00442
00443 tbAppendPlatformIcon( ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_forward, ccVwrToolbar);
00444 tbSetStatePlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_forward, nForwardState);
00445
00446
00447 updateScribbleIcons(doc);
00448
00449
00450 tbEnableUpdate(ertoolbarChannel, ER_PDF_VIEWER_UA_ID);
00451
00452 if (bSync)
00453 {
00454 tbSynchronise(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, ccVwrToolbarSync);
00455 }
00456 setToolbarDirty(gFalse);
00457 }
00458 }
00459
00460 void CChannels::setScribbleNone(ScbDocPtr pDoc)
00461 {
00462 if (pDoc)
00463 {
00464 pDoc->context.curState = SCB_TBS_NONE;
00465 }
00466 }
00467
00468 void CChannels::popupKeyboard(GBool bPopup)
00469 {
00470 if (bPopup)
00471 {
00472 tbSetStatePlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_keyboard, iconState_selected);
00473 }
00474 else
00475 {
00476 tbSetStatePlatformIcon(ertoolbarChannel, ER_PDF_VIEWER_UA_ID, iconID_keyboard, iconState_normal);
00477 }
00478 }
00479
00480
00481