00001
00002
00003
00004
00005 #include "WndGraphProc.h"
00006 #include "Actions.h"
00007
00008
00009 extern int GetEventKeyboardAndMouse( UINT message, WPARAM wParam, LPARAM lParam,struct BCG *ScilabGC);
00010 extern void SendGraphMacro (struct BCG *ScilabGC, UINT m);
00011 extern int StoreCommand ( char *command);
00012 extern void ShowGraphToolBar(struct BCG * ScilabGC);
00013 extern void HideGraphToolBar(struct BCG * ScilabGC);
00014 extern void ScilabPaint (HWND hwnd, struct BCG *ScilabGC);
00015 extern int sciGetScrollInfo(struct BCG *Scilabgc, int sb_ctl, SCROLLINFO *si);
00016 extern int sciSetScrollInfo(struct BCG *Scilabgc, int sb_ctl, SCROLLINFO *si, BOOLEAN bRedraw);
00017 extern int ScilabGResize (HWND hwnd, struct BCG *ScilabGC, WPARAM wParam);
00018 extern void DragFunc (LPTW lptw, HDROP hdrop);
00019 extern int C2F (deletewin) (integer * number);
00020 extern int PushClickQueue(int win,int x,int y,int ibut,int motion,int release) ;
00021 extern void set_wait_click(val);
00022 extern BOOL SendMacroEntityPicker(struct BCG * ScilabGC,int id);
00023
00024 BOOL ON_WND_GRAPH_WM_CLOSE(HWND hwnd);
00025 BOOL ON_WND_GRAPH_WM_DESTROY(HWND hwnd);
00026 BOOL ON_WND_GRAPH_WM_DROPFILES(HWND hwnd,HDROP hDrop);
00027 void ON_WND_GRAPH_WM_VSCROLL(HWND hwnd, HWND hwndCtl, UINT code, int pos);
00028 void ON_WND_GRAPH_WM_HSCROLL(HWND hwnd, HWND hwndCtl, UINT code, int pos);
00029 BOOL ON_WND_GRAPH_WM_SIZE(HWND hwnd,UINT state,int cx,int cy);
00030 BOOL ON_WND_GRAPH_WM_PAINT(HWND hwnd);
00031 BOOL ON_WND_GRAPH_WM_CREATE(HWND hwnd,LPCREATESTRUCT lpCreateStruct);
00032 void ON_WND_GRAPH_WM_KEY(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags);
00033 BOOL ON_WND_GRAPH_WM_COMMAND(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify);
00034
00035
00036 EXPORT LRESULT CALLBACK WndGraphProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
00037 {
00038 struct BCG *ScilabGC = (struct BCG *) NULL;
00039 ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00040 GetEventKeyboardAndMouse(message,wParam,lParam,ScilabGC);
00041
00042 switch (message)
00043 {
00044 HANDLE_MSG(hwnd,WM_COMMAND,ON_WND_GRAPH_WM_COMMAND);
00045 HANDLE_MSG(hwnd,WM_KEYDOWN,ON_WND_GRAPH_WM_KEY);
00046 HANDLE_MSG(hwnd,WM_CREATE,ON_WND_GRAPH_WM_CREATE);
00047 HANDLE_MSG(hwnd,WM_PAINT,ON_WND_GRAPH_WM_PAINT);
00048 HANDLE_MSG(hwnd,WM_SIZE,ON_WND_GRAPH_WM_SIZE);
00049 HANDLE_MSG(hwnd,WM_HSCROLL,ON_WND_GRAPH_WM_HSCROLL);
00050 HANDLE_MSG(hwnd,WM_VSCROLL,ON_WND_GRAPH_WM_VSCROLL);
00051 HANDLE_MSG(hwnd,WM_DROPFILES,ON_WND_GRAPH_WM_DROPFILES);
00052 HANDLE_MSG(hwnd,WM_DESTROY,ON_WND_GRAPH_WM_DESTROY);
00053 HANDLE_MSG(hwnd,WM_CLOSE,ON_WND_GRAPH_WM_CLOSE);
00054 }
00055 return DefWindowProc (hwnd, message, wParam, lParam);
00056 }
00057
00058 BOOL ON_WND_GRAPH_WM_CLOSE(HWND hwnd)
00059 {
00060 struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00061
00062 int curWindowNum = ScilabGC->CurWindow ;
00063
00064 PostQuitMessage (0);
00065 C2F (deletewin) (&(curWindowNum));
00066 SetWindowLong (hwnd, 0, (LONG) 0L);
00067
00068 PushClickQueue (curWindowNum,0,0,-100, 0, -1);
00069 set_wait_click(0);
00070
00071
00072
00073 TextMessage1 (0);
00074
00075 return TRUE;
00076 }
00077
00078 BOOL ON_WND_GRAPH_WM_DESTROY(HWND hwnd)
00079 {
00080 PostQuitMessage (0);
00081 DragAcceptFiles (hwnd, FALSE);
00082 return TRUE;
00083 }
00084
00085 BOOL ON_WND_GRAPH_WM_DROPFILES(HWND hwnd,HDROP hDrop)
00086 {
00087 struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00088 if (ScilabGC->lpgw->lptw) DragFunc (ScilabGC->lpgw->lptw, hDrop);
00089 return TRUE;
00090 }
00091
00092 void ON_WND_GRAPH_WM_VSCROLL(HWND hwnd, HWND hwndCtl, UINT code, int pos)
00093 {
00094 SCROLLINFO vertsi;
00095 int deltay = 0;
00096 struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00097
00098 sciGetScrollInfo (ScilabGC, SB_VERT, &vertsi);
00099 switch (code)
00100 {
00101
00102 case SB_PAGEUP:
00103 deltay = vertsi.nPos;
00104 vertsi.nPos = max (vertsi.nMin, vertsi.nPos - 50);
00105 deltay = deltay - vertsi.nPos;
00106 break;
00107 case SB_PAGEDOWN:
00108 deltay = vertsi.nPos;
00109 vertsi.nPos = min (vertsi.nMax - (int) vertsi.nPage, vertsi.nPos +50);
00110 deltay = deltay - vertsi.nPos;
00111 break;
00112 case SB_LINEUP:
00113 deltay = vertsi.nPos;
00114 vertsi.nPos = max (vertsi.nMin, vertsi.nPos - 5);
00115 deltay = deltay - vertsi.nPos;
00116 break;
00117 case SB_LINEDOWN:
00118 deltay = vertsi.nPos;
00119 vertsi.nPos = min (vertsi.nMax - (int) vertsi.nPage, vertsi.nPos +5);
00120 deltay = deltay - vertsi.nPos;
00121 break;
00122 case SB_THUMBTRACK:
00123 deltay = vertsi.nPos;
00124 vertsi.nPos = min (vertsi.nMax, max (vertsi.nMin, pos));
00125 deltay = deltay - vertsi.nPos;
00126 break;
00127 default:
00128 deltay = 0;
00129 break;
00130 }
00131 sciSetScrollInfo (ScilabGC, SB_VERT, &vertsi, TRUE);
00132 InvalidateRect (ScilabGC->CWindow, (LPRECT) NULL, FALSE);
00133
00134
00135 }
00136
00137 void ON_WND_GRAPH_WM_HSCROLL(HWND hwnd, HWND hwndCtl, UINT code, int pos)
00138 {
00139 SCROLLINFO horzsi;
00140 int deltax = 0;
00141
00142 struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00143
00144 sciGetScrollInfo (ScilabGC, SB_HORZ, &horzsi);
00145 switch (code)
00146 {
00147
00148 case SB_PAGEUP:
00149 deltax = horzsi.nPos;
00150 horzsi.nPos = max (horzsi.nMin, horzsi.nPos - 50);
00151 deltax = deltax - horzsi.nPos;
00152 break;
00153 case SB_PAGEDOWN:
00154 deltax = horzsi.nPos;
00155 horzsi.nPos = min (horzsi.nMax - (int)horzsi.nPage, horzsi.nPos + 50);
00156 deltax = deltax - horzsi.nPos;
00157 break;
00158 case SB_LINEUP:
00159 deltax = horzsi.nPos;
00160 horzsi.nPos = max (horzsi.nMin, horzsi.nPos - 5);
00161 deltax = deltax - horzsi.nPos;
00162 break;
00163 case SB_LINEDOWN:
00164 deltax = horzsi.nPos;
00165 horzsi.nPos = min (horzsi.nMax - (int) horzsi.nPage, horzsi.nPos + 5);
00166 deltax = deltax - horzsi.nPos;
00167 break;
00168 case SB_THUMBTRACK:
00169 deltax = horzsi.nPos;
00170 horzsi.nPos = max (horzsi.nMin, min (horzsi.nMax,pos));
00171 deltax = deltax - horzsi.nPos;
00172 break;
00173 default:
00174 deltax=0;
00175 break;
00176 }
00177 sciSetScrollInfo (ScilabGC, SB_HORZ, &horzsi, TRUE);
00178 InvalidateRect (ScilabGC->CWindow, (LPRECT) NULL, FALSE);
00179
00180 }
00181
00182 BOOL ON_WND_GRAPH_WM_SIZE(HWND hwnd,UINT state,int cx,int cy)
00183 {
00184 struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00185 int deltax = 0;
00186 int deltay = 0;
00187 SCROLLINFO vertsi;
00188 SCROLLINFO horzsi;
00189
00190
00191 sciGetScrollInfo (ScilabGC, SB_HORZ, &horzsi);
00192 sciGetScrollInfo (ScilabGC, SB_VERT, &vertsi);
00193
00194 if (ScilabGC->CurResizeStatus == 0)
00195 {
00196 horzsi.nPage = cx;
00197 vertsi.nPage = cy;
00198
00199
00200
00201
00202 horzsi.nPos = GetScrollPos (ScilabGC->CWindow, SB_HORZ);
00203 vertsi.nPos = GetScrollPos (ScilabGC->CWindow, SB_VERT);
00204 }
00205 else
00206 {
00207
00208 if ( ScilabGC->CurPixmapStatus == 1 )
00209 {
00210 ScilabGResize (hwnd, ScilabGC, state);
00211 }
00212 horzsi.nMax = cx;
00213 vertsi.nMax = cy;
00214 horzsi.nPage = horzsi.nMax;
00215 vertsi.nPage = vertsi.nMax;
00216 }
00217 sciSetScrollInfo (ScilabGC, SB_HORZ, &(horzsi), TRUE);
00218 sciSetScrollInfo (ScilabGC, SB_VERT, &(vertsi), TRUE);
00219
00220
00221 sciGetScrollInfo (ScilabGC, SB_HORZ, &horzsi);
00222 sciGetScrollInfo (ScilabGC, SB_VERT, &vertsi);
00223 InvalidateRect (ScilabGC->CWindow, (LPRECT) NULL,FALSE);
00224
00225 return TRUE;
00226 }
00227
00228 BOOL ON_WND_GRAPH_WM_PAINT(HWND hwnd)
00229 {
00230 struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00231 ScilabPaint (hwnd, ScilabGC);
00232 return TRUE;
00233 }
00234
00235 BOOL ON_WND_GRAPH_WM_CREATE(HWND hwnd,LPCREATESTRUCT lpCreateStruct)
00236 {
00237 struct BCG *ScilabGC = lpCreateStruct->lpCreateParams;
00238
00239 SetWindowLong (hwnd, 0, (LONG) ScilabGC);
00240 ScilabGC->CWindow = hwnd;
00241 if (ScilabGC->lpgw->lptw) DragAcceptFiles (hwnd, TRUE);
00242
00243 return TRUE;
00244 }
00245
00246 void ON_WND_GRAPH_WM_KEY(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags)
00247 {
00248 switch (vk)
00249 {
00250 case VK_F3:
00251 {
00252 struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00253 if (ScilabGC->lpmw.LockToolBar == FALSE)
00254 {
00255 if (ScilabGC->lpmw.ShowToolBar) HideGraphToolBar(ScilabGC);
00256 else ShowGraphToolBar(ScilabGC);
00257 }
00258
00259 }
00260 break;
00261
00262 default:
00263 break;
00264 }
00265 }
00266
00267 BOOL ON_WND_GRAPH_WM_COMMAND(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
00268 {
00269 struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00270
00271 if (id < NUMMENU)
00272 {
00273 if (!SendMacroEntityPicker(ScilabGC, id)) SendGraphMacro (ScilabGC, id);
00274 }
00275 else
00276 {
00277 switch (id)
00278 {
00279 case TOOLBAR_ROTATE3D:
00280 scig_3drot (ScilabGC->CurWindow);
00281 break;
00282
00283 case TOOLBAR_ZOOM:
00284 scig_2dzoom (ScilabGC->CurWindow);
00285 break;
00286
00287 case TOOLBAR_UNZOOM:
00288 scig_unzoom (ScilabGC->CurWindow);
00289 break;
00290
00291 case TOOLBAR_GED:
00292 {
00293
00294 char command[1024];
00295 wsprintf(command,"ged(8,%d);",ScilabGC->CurWindow);
00296 StoreCommand(command);
00297 }
00298 break;
00299
00300 case TOOLBAR_PICKER:
00301 {
00302 LRESULT lResult;
00303
00304 HWND hwndPicker=NULL;
00305 hwndPicker=GetDlgItem(ScilabGC->CWindow,TOOLBAR_PICKER);
00306
00307 lResult=SendMessage(hwndPicker,(UINT) BM_GETCHECK,0,0);
00308
00309 if (lResult == BST_CHECKED)
00310 {
00311 char command[1024];
00312 wsprintf(command,"ged(10,%d);",ScilabGC->CurWindow);
00313 StoreCommand(command);
00314
00315 }
00316 else
00317 {
00318 char command[1024];
00319 wsprintf(command,"ged(11,%d);",ScilabGC->CurWindow);
00320 StoreCommand(command);
00321 }
00322
00323 }
00324 break;
00325
00326 case TOOLBAR_LINE:
00327 {
00328
00329 char command[1024];
00330 wsprintf(command,"ged_insert(1,%d);",ScilabGC->CurWindow);
00331 StoreCommand(command);
00332 }
00333 break;
00334
00335 case TOOLBAR_POLYLINE:
00336 {
00337
00338 char command[1024];
00339 wsprintf(command,"ged_insert(2,%d);",ScilabGC->CurWindow);
00340 StoreCommand(command);
00341 }
00342 break;
00343
00344 case TOOLBAR_ARROW:
00345 {
00346 char command[1024];
00347 wsprintf(command,"ged_insert(3,%d);",ScilabGC->CurWindow);
00348 StoreCommand(command);
00349 }
00350 break;
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361
00362
00363 case TOOLBAR_TEXT:
00364 {
00365
00366 char command[1024];
00367 wsprintf(command,"ged_insert(4,%d);",ScilabGC->CurWindow);
00368 StoreCommand(command);
00369 }
00370 break;
00371
00372 case TOOLBAR_RECTANGLE:
00373 {
00374 char command[1024];
00375 wsprintf(command,"ged_insert(5,%d);",ScilabGC->CurWindow);
00376 StoreCommand(command);
00377 }
00378 break;
00379
00380 case TOOLBAR_CIRCLE:
00381 {
00382 char command[1024];
00383 wsprintf(command,"ged_insert(6,%d);",ScilabGC->CurWindow);
00384 StoreCommand(command);
00385 }
00386 break;
00387 }
00388 SetFocus(ScilabGC->CWindow);
00389 SetActiveWindow(ScilabGC->CWindow);
00390 }
00391
00392
00393 return TRUE;
00394 }
00395