00001
00002
00003
00004
00005 #include "Toolbar.h"
00006 #include "win_mem_alloc.h"
00007 #include "WindowList.h"
00008
00009 static BOOL DefaultShowToolBar=TRUE;
00010
00011 extern GW graphwin;
00012 extern BOOL IsWindowInterface(void);
00013 extern LPTW GetTextWinScilab(void);
00014
00015 #define ToolBarHeight 24
00016 #define ButtonToolBarWeight 24
00017
00018 void SetDefaultShowToolBar(BOOL valShowToolBar)
00019 {
00020 DefaultShowToolBar=valShowToolBar;
00021 }
00022
00023 void HideGraphToolBar(struct BCG * ScilabGC)
00024 {
00025 int i=0;
00026 ScilabGC->lpmw.ShowToolBar=FALSE;
00027
00028 for (i=0;i<ScilabGC->lpmw.nButton;i++)
00029 {
00030 ShowWindow(ScilabGC->lpmw.hButton[i],SW_HIDE);
00031 }
00032 }
00033
00034 void ShowGraphToolBar(struct BCG * ScilabGC)
00035 {
00036 int i=0;
00037
00038 ScilabGC->lpmw.ShowToolBar=TRUE;
00039 for (i=0;i<ScilabGC->lpmw.nButton;i++)
00040 {
00041 ShowWindow(ScilabGC->lpmw.hButton[i],SW_SHOWNORMAL);
00042 }
00043 }
00044
00045 void CreateGraphToolBar(struct BCG * ScilabGC)
00046 {
00047 ScilabGC->lpmw.nButton=0;
00048
00049 CreateButtonToolBar(ScilabGC,MSG_SCIMSG14,(HMENU)TOOLBAR_ZOOM,IDI_ZOOM,MSG_SCIMSG14,WS_CHILD|WS_VISIBLE|BS_ICON);
00050 CreateButtonToolBar(ScilabGC,MSG_SCIMSG15,(HMENU)TOOLBAR_UNZOOM,IDI_UNZOOM,MSG_SCIMSG15,WS_CHILD|WS_VISIBLE|BS_ICON);
00051 CreateButtonToolBar(ScilabGC,MSG_SCIMSG16,(HMENU)TOOLBAR_ROTATE3D,IDI_3DROT,MSG_SCIMSG16,WS_CHILD|WS_VISIBLE|BS_ICON);
00052 CreateButtonToolBar(ScilabGC,MSG_SCIMSG106,(HMENU)TOOLBAR_GED,IDI_GED,MSG_SCIMSG106,WS_CHILD|WS_VISIBLE|BS_ICON);
00053 CreateButtonToolBar(ScilabGC,MSG_SCIMSG113,(HMENU)TOOLBAR_PICKER,IDI_PICKER,MSG_SCIMSG113,WS_CHILD|WS_VISIBLE|BS_ICON|BS_AUTOCHECKBOX|BS_PUSHLIKE);
00054 CreateButtonToolBar(ScilabGC,MSG_SCIMSG107,(HMENU)TOOLBAR_LINE,IDI_LINE,MSG_SCIMSG107,WS_CHILD|WS_VISIBLE|BS_ICON);
00055 CreateButtonToolBar(ScilabGC,MSG_SCIMSG120,(HMENU)TOOLBAR_POLYLINE,IDI_POLYLINE,MSG_SCIMSG120,WS_CHILD|WS_VISIBLE|BS_ICON);
00056 CreateButtonToolBar(ScilabGC,MSG_SCIMSG108,(HMENU)TOOLBAR_ARROW,IDI_ARROW,MSG_SCIMSG108,WS_CHILD|WS_VISIBLE|BS_ICON);
00057
00058 CreateButtonToolBar(ScilabGC,MSG_SCIMSG110,(HMENU)TOOLBAR_TEXT,IDI_TEXT,MSG_SCIMSG110,WS_CHILD|WS_VISIBLE|BS_ICON);
00059 CreateButtonToolBar(ScilabGC,MSG_SCIMSG111,(HMENU)TOOLBAR_RECTANGLE,IDI_RECTANGLE,MSG_SCIMSG111,WS_CHILD|WS_VISIBLE|BS_ICON);
00060 CreateButtonToolBar(ScilabGC,MSG_SCIMSG112,(HMENU)TOOLBAR_CIRCLE,IDI_CIRCLE,MSG_SCIMSG112,WS_CHILD|WS_VISIBLE|BS_ICON);
00061
00062 ScilabGC->lpmw.LockToolBar=FALSE;
00063
00064 if (DefaultShowToolBar == FALSE) HideGraphToolBar(ScilabGC);
00065 else
00066 {
00067 ScilabGC->lpmw.ShowToolBar=TRUE;
00068 }
00069
00070 }
00071
00072 void RefreshGraphToolBar(struct BCG * ScilabGC)
00073 {
00074 int i=0;
00075
00076
00077 if (ScilabGC->lpmw.ShowToolBar)
00078 {
00079 for (i=3;i<ScilabGC->lpmw.nButton;i++)
00080 {
00081 ShowWindow(ScilabGC->lpmw.hButton[i],SW_SHOWNORMAL);
00082 }
00083 }
00084 for (i=0;i<ScilabGC->lpmw.nButton;i++)
00085 {
00086 InvalidateRect(ScilabGC->lpmw.hButton[i],NULL,TRUE);
00087 }
00088 }
00089
00090 void ShowToolBar(LPTW lptw)
00091 {
00092 int i=0;
00093 LPMW lpmw;
00094 RECT rect;
00095
00096 lpmw = lptw->lpmw;
00097
00098 GetClientRect (lptw->hWndParent, &rect);
00099 SetWindowPos (lptw->hWndText, (HWND) NULL, 0, lptw->ButtonHeight,
00100 rect.right, rect.bottom - lptw->ButtonHeight,SWP_NOZORDER | SWP_NOACTIVATE);
00101 for (i = 0; i < lpmw->nButton; i++)
00102 {
00103 ShowWindow( lpmw->hButton[i] , SW_SHOWNORMAL );
00104 }
00105
00106 InvalidateRect(lptw->hWndParent, (LPRECT) NULL, TRUE);
00107 InvalidateRect(lptw->hWndText, (LPRECT) NULL, TRUE);
00108 UpdateWindow (lptw->hWndText);
00109 }
00110
00111 void HideToolBar(LPTW lptw)
00112 {
00113 int i=0;
00114 LPMW lpmw;
00115 RECT rect;
00116 lpmw = lptw->lpmw;
00117
00118 GetClientRect (lptw->hWndParent, &rect);
00119 SetWindowPos (lptw->hWndText, (HWND) NULL,0,0,
00120 rect.right, rect.bottom,SWP_NOZORDER | SWP_NOACTIVATE);
00121 for (i = 0; i < lpmw->nButton; i++)
00122 {
00123 ShowWindow( lpmw->hButton[i] , SW_HIDE );
00124 }
00125 InvalidateRect(lptw->hWndParent, (LPRECT) NULL, TRUE);
00126 InvalidateRect(lptw->hWndText, (LPRECT) NULL, TRUE);
00127 UpdateWindow (lptw->hWndText);
00128
00129 }
00130
00131 void ToolBarOnOff(LPTW lptw)
00132 {
00133 BOOL ON=lptw->lpmw->ShowToolBar;
00134 if (ON)
00135 {
00136 ShowToolBar(lptw);
00137 }
00138 else
00139 {
00140 HideToolBar(lptw);
00141 }
00142 }
00143
00144 void CreateMyTooltip (HWND hwnd,char ToolTipString[30])
00145 {
00146 INITCOMMONCONTROLSEX iccex;
00147 HWND hwndTT;
00148
00149 TOOLINFO ti;
00150 unsigned int uid = 0;
00151
00152 LPTSTR lptstr = ToolTipString;
00153 RECT rect;
00154
00155
00156 iccex.dwICC = ICC_WIN95_CLASSES;
00157 iccex.dwSize = sizeof(INITCOMMONCONTROLSEX);
00158 InitCommonControlsEx(&iccex);
00159
00160
00161 hwndTT = CreateWindowEx(WS_EX_TOPMOST,
00162 TOOLTIPS_CLASS,
00163 NULL,
00164 WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
00165 CW_USEDEFAULT,
00166 CW_USEDEFAULT,
00167 CW_USEDEFAULT,
00168 CW_USEDEFAULT,
00169 hwnd,
00170 NULL,
00171 NULL,
00172 NULL
00173 );
00174
00175 SetWindowPos(hwndTT,
00176 HWND_TOPMOST,
00177 0,
00178 0,
00179 0,
00180 0,
00181 SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
00182
00183
00184 GetClientRect (hwnd, &rect);
00185
00186
00187 ti.cbSize = sizeof(TOOLINFO);
00188 ti.uFlags = TTF_SUBCLASS;
00189 ti.hwnd = hwnd;
00190 ti.hinst = NULL;
00191 ti.uId = uid;
00192 ti.lpszText = lptstr;
00193
00194 ti.rect.left = rect.left;
00195 ti.rect.top = rect.top;
00196 ti.rect.right = rect.right;
00197 ti.rect.bottom = rect.bottom;
00198
00199
00200 SendMessage(hwndTT, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti);
00201
00202 }
00203
00204 int HideToolBarWin32(int WinNum)
00205 {
00206 if (WinNum == -1)
00207 {
00208 if (IsWindowInterface())
00209 {
00210 LPTW lptw=GetTextWinScilab();
00211
00212 HideToolBar(lptw);
00213 lptw->lpmw->ShowToolBar=FALSE;
00214 lptw->lpmw->LockToolBar=TRUE;
00215 }
00216 else
00217 {
00218 sciprint(MSG_WARNING29 );
00219 }
00220 }
00221 else
00222 {
00223 struct BCG *ScilabGC=NULL;
00224 ScilabGC = getWindowXgcNumber (WinNum);
00225 if (ScilabGC != (struct BCG *) 0)
00226 {
00227 HideGraphToolBar(ScilabGC);
00228 ScilabGC->lpmw.LockToolBar=TRUE;
00229 }
00230 }
00231
00232 return 0;
00233 }
00234
00235 int ToolBarWin32(int WinNum,char *onoff)
00236 {
00237 int bON;
00238 if (WinNum == -1)
00239 {
00240 if (IsWindowInterface())
00241 {
00242 LPTW lptw=GetTextWinScilab();
00243
00244 if (strcmp(onoff,"off")==0)
00245 {
00246 if (!lptw->lpmw->LockToolBar)
00247 {
00248 lptw->lpmw->ShowToolBar=FALSE;
00249 ToolBarOnOff(lptw);
00250 }
00251 }
00252
00253 if (strcmp(onoff,"on")==0)
00254 {
00255 if (!lptw->lpmw->LockToolBar)
00256 {
00257 lptw->lpmw->ShowToolBar=TRUE;
00258 ToolBarOnOff(lptw);
00259 }
00260 }
00261
00262 bON=lptw->lpmw->ShowToolBar;
00263 }
00264 else
00265 {
00266 sciprint(MSG_WARNING29);
00267 bON=FALSE;
00268 }
00269 }
00270 else
00271 {
00272 struct BCG *ScilabGC=NULL;
00273 ScilabGC = getWindowXgcNumber (WinNum);
00274 if (ScilabGC != (struct BCG *) 0)
00275 {
00276 if (strcmp(onoff,"off")==0)
00277 {
00278 if (!ScilabGC->lpmw.LockToolBar)
00279 {
00280 HideGraphToolBar(ScilabGC);
00281 }
00282
00283 }
00284
00285 if (strcmp(onoff,"on")==0)
00286 {
00287 if (!ScilabGC->lpmw.LockToolBar)
00288 {
00289 ShowGraphToolBar(ScilabGC);
00290 }
00291 }
00292
00293 bON=(ScilabGC->lpmw.ShowToolBar);
00294 }
00295 else bON=FALSE;
00296 }
00297 return bON;
00298 }
00299
00300 int GetStateToolBarWin32(int WinNum)
00301 {
00302 int bAns;
00303 if (WinNum == -1)
00304 {
00305 if (IsWindowInterface())
00306 {
00307 LPTW lptw=GetTextWinScilab();
00308
00309 bAns=lptw->lpmw->ShowToolBar;
00310 }
00311 else
00312 {
00313 sciprint(MSG_WARNING29);
00314 bAns=FALSE;
00315 }
00316 }
00317 else
00318 {
00319 struct BCG *ScilabGC=NULL;
00320 ScilabGC = getWindowXgcNumber (WinNum);
00321 if (ScilabGC != (struct BCG *) 0)
00322 {
00323 bAns=(ScilabGC->lpmw.ShowToolBar);
00324 }
00325 else bAns=FALSE;
00326 }
00327
00328 return bAns;
00329 }
00330
00331 void EnableToolBar(LPTW lptw)
00332 {
00333 int i=0;
00334 if (lptw->lpmw->ShowToolBar)
00335 {
00336 for (i = 0; i < lptw->lpmw->nButton; i++)
00337 {
00338 ShowWindow( lptw->lpmw->hButton[i] , SW_SHOWNORMAL );
00339 }
00340 }
00341 }
00342
00343 void DisableToolBar(LPTW lptw)
00344 {
00345 int i=0;
00346 if (lptw->lpmw->ShowToolBar)
00347 {
00348 for (i = 0; i < lptw->lpmw->nButton; i++)
00349 {
00350 ShowWindow( lptw->lpmw->hButton[i] , SW_HIDE );
00351 }
00352 }
00353 }
00354
00355 void ModifyEntityPickerToolbar(struct BCG * ScilabGC,BOOL Pressed)
00356 {
00357 HWND hwndPicker=NULL;
00358 hwndPicker=GetDlgItem(ScilabGC->CWindow,TOOLBAR_PICKER);
00359
00360 if (Pressed)
00361 {
00362 SendMessage(hwndPicker,(UINT) BM_SETCHECK,BST_CHECKED,0);
00363 }
00364 else
00365 {
00366 SendMessage(hwndPicker,(UINT) BM_SETCHECK,BST_UNCHECKED,0);
00367 }
00368 }
00369
00370 void CreateButtonToolBar(struct BCG * ScilabGC,char *Name,HMENU CallbackID,int ID_ICON,char *ToolTipString,DWORD Style)
00371 {
00372 HICON IconButton;
00373 ScilabGC->lpmw.hButton[ScilabGC->lpmw.nButton]= CreateWindow("button",Name,Style,
00374 ButtonToolBarWeight*ScilabGC->lpmw.nButton, 0,
00375 ButtonToolBarWeight, ToolBarHeight,
00376 ScilabGC->CWindow,(HMENU) CallbackID,
00377 graphwin.hInstance, NULL);
00378
00379 IconButton=(HICON)LoadImage( GetModuleHandle(MSG_SCIMSG9), (LPCSTR)ID_ICON,IMAGE_ICON,ButtonToolBarWeight,ToolBarHeight,LR_DEFAULTCOLOR);
00380 SendMessage(ScilabGC->lpmw.hButton[ScilabGC->lpmw.nButton],BM_SETIMAGE, IMAGE_ICON, (LPARAM)IconButton);
00381
00382 CreateMyTooltip (ScilabGC->lpmw.hButton[ScilabGC->lpmw.nButton], ToolTipString);
00383
00384 ScilabGC->lpmw.nButton++;
00385 }
00386