00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00032 #include <libmb/mb.h>
00033
00034 #include <liberipc/eripc.h>
00035 #include <liberipc/eripctoolbar.h>
00036 #include <liberipc/eripcviewer.h>
00037 #include <liberipc/eripcicons.h>
00038
00039 #include "ScribbleUI.h"
00040 #include "ScribbleIPC.h"
00041 #include "ScribbleLog.h"
00042 #include "ScribbleUtils.h"
00043 #include "displayUpdate.h"
00044
00045
00046 typedef enum {
00047 ICONS_FLDALL=0,
00048 ICONLIST_UNFLDSIZE=1,
00049 ICONLIST_UNFLDCOLOR=2,
00050 }ICONLIST_MODE;
00051
00052 static erClientChannel_t toolbarChannel=NULL;
00053
00054
00055 static OPERATION_MODE s_OperationMode=MODE_DRAW;
00056 OPERATION_MODE getOperationMode()
00057 {
00058 return s_OperationMode;
00059 }
00060 void setOperationMode(OPERATION_MODE iOpMode)
00061 {
00062 s_OperationMode=iOpMode;
00063 }
00064
00065
00066 static HW_COLOR s_PenColor=COLOR_BLACK;
00067
00068 HW_COLOR getPenColor()
00069 {
00070 return s_PenColor;
00071 }
00072
00073 void setPenColor(HW_COLOR iHwColor)
00074 {
00075 s_PenColor=iHwColor;
00076 }
00077
00078
00079 static PEN_SIZE m_PenSize=SIZE_3PIX;
00080 PEN_SIZE getPenSize()
00081 {
00082 return m_PenSize;
00083 }
00084 void setPenSize(PEN_SIZE iPenSize)
00085 {
00086 m_PenSize=iPenSize;
00087 }
00088
00089
00090 static const int s_InitIcons[]=
00091 {
00092 iconID_eraseline,
00093 iconID_npage,
00094 iconID_trashcan,
00095 };
00096
00097
00098 #define LIST_INDEX_ICON (0)
00099 #define LIST_INDEX_ICONLOW (1)
00100 #define LIST_INDEX_SETTING (2)
00101
00102 static const int s_PenList[][4]=
00103 {
00104 {
00105 iconID_pen1pixel,
00106 iconID_pen3pixel,
00107 iconID_pen5pixel,
00108 iconID_pen7pixel
00109 },
00110 {
00111 iconID_pen1pixelLow,
00112 iconID_pen3pixelLow,
00113 iconID_pen5pixelLow,
00114 iconID_pen7pixelLow
00115 },
00116 {
00117 SIZE_1PIX,
00118 SIZE_3PIX,
00119 SIZE_5PIX,
00120 SIZE_7PIX
00121 }
00122 };
00123
00124 static const int s_ColorList[][4]=
00125 {
00126 {
00127 iconID_penwhite,
00128 iconID_penlightgrey,
00129 iconID_pendarkgrey,
00130 iconID_penblack
00131 },
00132 {
00133 iconID_penwhiteLow,
00134 iconID_penlightgreyLow,
00135 iconID_pendarkgreyLow,
00136 iconID_penblackLow
00137 },
00138 {
00139 COLOR_WHITE,
00140 COLOR_LIGHT_GRAY,
00141 COLOR_DARK_GRAY,
00142 COLOR_BLACK,
00143 }
00144 };
00145
00146 static int getIconfromPenSize(PEN_SIZE iPenSize, int iListIndex)
00147 {
00148 int i;
00149 for(i=0; i< ARRAYSIZE(s_PenList[LIST_INDEX_SETTING]); i++)
00150 {
00151 if( s_PenList[LIST_INDEX_SETTING][i] == iPenSize )
00152 {
00153 return s_PenList[iListIndex][i];
00154 }
00155 }
00156 return s_PenList[iListIndex][1];
00157 }
00158
00159 static PEN_SIZE getPenSizefromIcon(int iIconID)
00160 {
00161 int i;
00162 for(i=0; i< ARRAYSIZE(s_PenList[LIST_INDEX_SETTING]); i++)
00163 {
00164 if( s_PenList[LIST_INDEX_ICON ][i]==iIconID
00165 || s_PenList[LIST_INDEX_ICONLOW][i]==iIconID )
00166 {
00167 return s_PenList[LIST_INDEX_SETTING][i];
00168 }
00169 }
00170 return SIZE_3PIX;
00171 }
00172
00173 static int getIconfromPenColor(HW_COLOR iPenColor, int iListIndex)
00174 {
00175 int i;
00176 for( i=0; i< ARRAYSIZE(s_ColorList[LIST_INDEX_SETTING]); i++)
00177 {
00178 if( s_ColorList[LIST_INDEX_SETTING][i] == iPenColor )
00179 {
00180 return s_ColorList[iListIndex][i];
00181 }
00182 }
00183 return s_ColorList[iListIndex][3];
00184 }
00185
00186 static HW_COLOR getPenColorfromIcon(int iIconID)
00187 {
00188 int i;
00189 for( i=0; i< ARRAYSIZE(s_ColorList[LIST_INDEX_SETTING]); i++)
00190 {
00191 if( s_ColorList[LIST_INDEX_ICON ][i]==iIconID
00192 || s_ColorList[LIST_INDEX_ICONLOW][i]==iIconID )
00193 {
00194 return s_ColorList[LIST_INDEX_SETTING][i];
00195 }
00196 }
00197 return COLOR_BLACK;
00198 }
00199
00200
00201
00202 static void addIcons(const int *pIcons,unsigned int iSize)
00203 {
00204 unsigned int i;
00205 for( i=0;i<iSize;i++)
00206 {
00207 tbAppendPlatformIcon(toolbarChannel,ER_SCRIBBLE_UA_ID,
00208 pIcons[i],ccVwrToolbar);
00209 }
00210 }
00211
00212
00213 static void addIcon(const int iconID)
00214 {
00215 addIcons(&iconID,1);
00216 }
00217
00218
00219 gboolean toolbar_is_waitconfirmdel()
00220 {
00221 return ( MODE_DELPAGE==s_OperationMode );
00222 }
00223
00224 static gboolean ispagedel_confirmed=FALSE;
00225
00226 void toolbar_confirm_delpage()
00227 {
00228 ispagedel_confirmed=TRUE;
00229 }
00230
00231
00232 gboolean toolbar_is_erasing()
00233 {
00234 return (MODE_ERASE== s_OperationMode);
00235 }
00236
00237
00238 gboolean toolbar_is_drawing()
00239 {
00240 return( MODE_DRAW ==s_OperationMode
00241 || MODE_SELSIZE ==s_OperationMode
00242 || MODE_SELCOLOR ==s_OperationMode);
00243 }
00244
00245 void activeIcon( int iconID )
00246 {
00247 tbSetStatePlatformIcon(toolbarChannel, ER_SCRIBBLE_UA_ID,
00248 iconID,iconState_selected);
00249 }
00250
00251 void disableIcon( int iconID)
00252 {
00253 tbSetStatePlatformIcon(toolbarChannel, ER_SCRIBBLE_UA_ID,
00254 iconID,iconState_grey);
00255 }
00256
00257 void normalIcon( int iconID)
00258 {
00259 tbSetStatePlatformIcon(toolbarChannel, ER_SCRIBBLE_UA_ID,
00260 iconID,iconState_normal);
00261 }
00262
00263
00264 void addIconsByListMode(const ICONLIST_MODE iListMode)
00265 {
00266 addIcon( iconID_pen );
00267
00268
00269 if( ICONLIST_UNFLDSIZE==iListMode )
00270 {
00271 addIcons(s_PenList[LIST_INDEX_ICONLOW], ARRAYSIZE(s_PenList[LIST_INDEX_ICONLOW]));
00272 }
00273 else
00274 {
00275 addIcon( getIconfromPenSize(getPenSize(), LIST_INDEX_ICON) );
00276 }
00277
00278 if( ICONLIST_UNFLDCOLOR==iListMode )
00279 {
00280 addIcons(s_ColorList[LIST_INDEX_ICONLOW], ARRAYSIZE(s_ColorList[LIST_INDEX_ICONLOW]));
00281 }
00282 else
00283 {
00284 addIcon( getIconfromPenColor(getPenColor(), LIST_INDEX_ICON) );
00285 }
00286
00287 addIcons(s_InitIcons,ARRAYSIZE(s_InitIcons));
00288
00289 disableIcon(iconID_keyboard);
00290 disableIcon(iconID_tagging);
00291 }
00292
00293
00294 void drawIconsByMode(int iTotalPage)
00295 {
00296
00297 tbDisableUpdate(toolbarChannel, ER_SCRIBBLE_UA_ID);
00298
00299
00300 tbClearIconSet(toolbarChannel, ER_SCRIBBLE_UA_ID);
00301 switch ( getOperationMode() )
00302 {
00303 case MODE_INVALID:
00304 addIconsByListMode(ICONS_FLDALL);
00305 break;
00306 case MODE_DRAW:
00307 addIconsByListMode(ICONS_FLDALL);
00308 activeIcon( iconID_pen );
00309 break;
00310 case MODE_SELSIZE:
00311 addIconsByListMode(ICONLIST_UNFLDSIZE);
00312 activeIcon( getIconfromPenSize(getPenSize(), LIST_INDEX_ICONLOW) );
00313 activeIcon( iconID_pen );
00314 break;
00315 case MODE_SELCOLOR:
00316 addIconsByListMode(ICONLIST_UNFLDCOLOR);
00317 activeIcon( getIconfromPenColor(getPenColor(), LIST_INDEX_ICONLOW) );
00318 activeIcon( iconID_pen );
00319 break;
00320 case MODE_ERASE:
00321 addIconsByListMode(ICONS_FLDALL);
00322 activeIcon( iconID_eraseline );
00323 break;
00324 case MODE_DELPAGE:
00325 addIconsByListMode(ICONS_FLDALL);
00326 activeIcon( iconID_trashcan );
00327 break;
00328 default:
00329 SB_ERRORPRINTF("Error Mode[%d]\n", getOperationMode());
00330 return;
00331 }
00332 if( iTotalPage<=1 )
00333 {
00334 disableIcon(iconID_trashcan);
00335 }
00336
00337
00338 tbEnableUpdate(toolbarChannel, ER_SCRIBBLE_UA_ID);
00339 }
00340
00341
00342 void toolbar_clearall()
00343 {
00344 tbClearIconSet(toolbarChannel, ER_SCRIBBLE_UA_ID);
00345 }
00346
00347
00348 void toolbar_firstinit(int iTotalPage)
00349 {
00350 setOperationMode(MODE_DRAW);
00351 drawIconsByMode(iTotalPage);
00352 }
00353
00354
00355 void toolbar_reinit(int iTotalPage)
00356 {
00357
00358 if( MODE_DELPAGE==getOperationMode() )
00359 {
00360 setOperationMode(MODE_DRAW);
00361 }
00362 drawIconsByMode(iTotalPage);
00363 }
00364
00365 void toolbar_init()
00366 {
00367 int returnValue;
00368
00369 SB_IPCPRINTF("\n\n\nentry,ER_TOOLBAR_CHANNEL=%d\n\n",
00370 ER_TOOLBAR_CHANNEL);
00371 toolbarChannel=NULL;
00372
00373 returnValue = erIpcStartClient(ER_TOOLBAR_CHANNEL, &toolbarChannel);
00374 if (returnValue != 0)
00375 {
00376 SB_ERRORPRINTF("erIpcStartClient returned %d\n", returnValue);
00377 return;
00378 }
00379
00380 tbSelectIconSet(toolbarChannel, ER_SCRIBBLE_UA_ID);
00381 }
00382
00383 void toolbar_key_selected(int iconID, int iconState,PScribbleUICtx pScribbleUICtx)
00384 {
00385 if( iconState_grey==iconState )
00386 {
00387 return;
00388 }
00389
00390 SB_IPCPRINTF("\n====iconID=%d[mode=%d,pensize=%d,color=%d]\n",
00391 iconID,getOperationMode(),getPenSize(),getPenColor());
00392
00393 gboolean bNeedFlushWithFullQlt=FALSE;
00394
00395 if( getOperationMode()== MODE_ERASE)
00396 {
00397
00398
00399 bNeedFlushWithFullQlt=TRUE;
00400 }
00401
00402 switch (iconID)
00403 {
00404 case iconID_pen:
00405
00406 if( !toolbar_is_drawing() )
00407 {
00408 setOperationMode(MODE_DRAW);
00409 }
00410 else
00411 {
00412 setOperationMode(MODE_INVALID);
00413 }
00414 break;
00415 case iconID_pen1pixel:
00416 case iconID_pen3pixel:
00417 case iconID_pen5pixel:
00418 case iconID_pen7pixel:
00419
00420 setOperationMode(MODE_SELSIZE);
00421 break;
00422 case iconID_pen1pixelLow:
00423 case iconID_pen3pixelLow:
00424 case iconID_pen5pixelLow:
00425 case iconID_pen7pixelLow:
00426
00427 setPenSize(getPenSizefromIcon(iconID));
00428 setOperationMode(MODE_DRAW);
00429 break;
00430 case iconID_penwhite:
00431 case iconID_penlightgrey:
00432 case iconID_pendarkgrey:
00433 case iconID_penblack:
00434
00435 setOperationMode(MODE_SELCOLOR);
00436 break;
00437 case iconID_penwhiteLow:
00438 case iconID_penlightgreyLow:
00439 case iconID_pendarkgreyLow:
00440 case iconID_penblackLow:
00441
00442 setPenColor(getPenColorfromIcon(iconID));
00443 setOperationMode(MODE_DRAW);
00444 break;
00445 case iconID_eraseline:
00446 if( MODE_ERASE==getOperationMode())
00447 {
00448 setOperationMode(MODE_DRAW);
00449 }
00450 else
00451 {
00452 setOperationMode(MODE_ERASE);
00453 }
00454 break;
00455 case iconID_trashcan:
00456 if(MODE_DELPAGE==getOperationMode())
00457 {
00458 setOperationMode(MODE_DRAW);
00459 if(ispagedel_confirmed)
00460 {
00461
00462 delOnepage(pScribbleUICtx);
00463 ispagedel_confirmed=FALSE;
00464 return;
00465 }
00466 ispagedel_confirmed=FALSE;
00467 }
00468 else
00469 {
00470 SB_IPCPRINTF("enter MODE_DELPAGE\n");
00471 setOperationMode(MODE_DELPAGE);
00472 ispagedel_confirmed=FALSE;
00473 }
00474 break;
00475 case iconID_npage:
00476 addOnepage(pScribbleUICtx);
00477 return;
00478 default:
00479 SB_IPCPRINTF("Unknown iconID [%d]\n", iconID);
00480 return;
00481 }
00482
00483 drawIconsByMode(getTotalPage(&pScribbleUICtx->fileManager));
00484
00485
00486 if(bNeedFlushWithFullQlt)
00487 {
00488 display_update_request_screen_refresh
00489 (MAIN_WINDOW_EXPOSE_LEVEL,(gpointer)dmQFull);
00490 }
00491 else
00492 {
00493 display_update_request_screen_refresh
00494 (MAIN_WINDOW_EXPOSE_LEVEL,(gpointer)dmQTyping);
00495 }
00496 SB_IPCPRINTF("\n===end===[mode=%d,pensize=%d,color=%d]\n",
00497 getOperationMode(),getPenSize(),getPenColor());
00498 return;
00499 }