00001
00002
00003
00004
00005
00006 #include "stdafx.h"
00007 #include "FdmApp.h"
00008 #include "fsPluginMgr.h"
00009 #include "DownloadsWnd.h"
00010 #include "UploadsWnd.h"
00011 #include "ShedulerWnd.h"
00012 #include "HFEWnd.h"
00013 #include "SitesWnd.h"
00014 #include "SpiderWnd.h"
00015 #include "mfchelp.h"
00016 #include "FlashVideoDownloadsWnd.h"
00017
00018 #ifdef _DEBUG
00019 #undef THIS_FILE
00020 static char THIS_FILE[]=__FILE__;
00021 #define new DEBUG_NEW
00022 #endif
00023
00024 fsPluginMgr::fsPluginMgr()
00025 {
00026 m_bWasExit = FALSE;
00027 }
00028
00029 fsPluginMgr::~fsPluginMgr()
00030 {
00031 for (int i = 0; i < m_vWndPlugs.size (); i++)
00032 {
00033 fsPluginInfo *plug = &m_vWndPlugs [i];
00034 SAFE_DELETE (plug->pbmpMenuImages);
00035 SAFE_DELETE (plug->pbmpMenuDImages);
00036 if (plug->hMenuMain) DestroyMenu (plug->hMenuMain);
00037 if (plug->hMenuView) DestroyMenu (plug->hMenuView);
00038 }
00039 }
00040
00041 BOOL fsPluginMgr::LoadPlugins(CWnd *pPluginsFrame)
00042 {
00043 m_pPluginsFrame = pPluginsFrame;
00044
00045 LOG ("loading plugins..." << nl);
00046
00047 if (FALSE == LoadBuiltIn ())
00048 return FALSE;
00049
00050 LOG ("plugins was loaded" << nl);
00051
00052 for (int i = m_vWndPlugs.size () - 1; i; i--)
00053 ShowWindow (m_vWndPlugs [i].hWnd, SW_HIDE);
00054
00055 return TRUE;
00056 }
00057
00058 BOOL fsPluginMgr::LoadBuiltIn()
00059 {
00060 fsPluginInfo plug;
00061
00062 plug.hLib = NULL;
00063
00064 LOG ("loading built-in plugins..." << nl);
00065
00066 m_images.Create (_TB_SIZE_X, _TB_SIZE_Y, ILC_COLOR32 | ILC_MASK, 5, 1);
00067
00068 fntGetMainMenu afnGMM [] = {
00069 CDownloadsWnd::Plugin_GetMainMenu,
00070 CFlashVideoDownloadsWnd::Plugin_GetMainMenu,
00071 CUploadsWnd::Plugin_GetMainMenu,
00072 CShedulerWnd::Plugin_GetMainMenu,
00073 CHFEWnd::Plugin_GetMainMenu,
00074 CSitesWnd::Plugin_GetMainMenu,
00075 CSpiderWnd::Plugin_GetMainMenu,
00076 };
00077 fntGetViewMenu afnGVM [] = {
00078 CDownloadsWnd::Plugin_GetViewMenu,
00079 CFlashVideoDownloadsWnd::Plugin_GetViewMenu,
00080 CUploadsWnd::Plugin_GetViewMenu,
00081 CShedulerWnd::Plugin_GetViewMenu,
00082 CHFEWnd::Plugin_GetViewMenu,
00083 CSitesWnd::Plugin_GetViewMenu,
00084 CSpiderWnd::Plugin_GetViewMenu,
00085 };
00086 const cPlugins = sizeof (afnGMM) / sizeof (fntGetMainMenu);
00087
00088
00089 fntCreateMainWindow afnCMW [] = {
00090 CDownloadsWnd::Plugin_CreateMainWindow,
00091 CFlashVideoDownloadsWnd::Plugin_CreateMainWindow,
00092 CUploadsWnd::Plugin_CreateMainWindow,
00093 CShedulerWnd::Plugin_CreateMainWindow, CHFEWnd::Plugin_CreateMainWindow,
00094 CSitesWnd::Plugin_CreateMainWindow, CSpiderWnd::Plugin_CreateMainWindow
00095 };
00096
00097 fntGetPluginNames afnGPN [] = {
00098 CDownloadsWnd::Plugin_GetPluginNames,
00099 CFlashVideoDownloadsWnd::Plugin_GetPluginNames,
00100 CUploadsWnd::Plugin_GetPluginNames,
00101 CShedulerWnd::Plugin_GetPluginNames,
00102 CHFEWnd::Plugin_GetPluginNames,
00103 CSitesWnd::Plugin_GetPluginNames,
00104 CSpiderWnd::Plugin_GetPluginNames
00105 };
00106
00107 fntSetLanguage afnSL [] = {
00108 CDownloadsWnd::Plugin_SetLanguage,
00109 CFlashVideoDownloadsWnd::Plugin_SetLanguage,
00110 CUploadsWnd::Plugin_SetLanguage,
00111 CShedulerWnd::Plugin_SetLanguage,
00112 CHFEWnd::Plugin_SetLanguage, CSitesWnd::Plugin_SetLanguage,
00113 CSpiderWnd::Plugin_SetLanguage
00114 };
00115
00116 UINT aIDBmps [] = {
00117 IDB_TOOL_DLDS, IDB_TOOL_DLDS, IDB_TOOL_DLDS,
00118 IDB_TOOL_SCHEDULE, IDB_TOOL_HFE,
00119 IDB_TOOL_SITES, IDB_TOOL_SPIDER
00120 };
00121 UINT aIDBmpsD [] = {
00122 IDB_TOOL_DLDS_D, IDB_TOOL_DLDS_D, IDB_TOOL_DLDS_D,
00123 IDB_TOOL_SCHEDULE_D, IDB_TOOL_HFE_D,
00124 IDB_TOOL_SITES_D, IDB_TOOL_SPIDER_D
00125 };
00126
00127 fntGetMenuImages afnGMI [] = {
00128 CDownloadsWnd::Plugin_GetMenuImages,
00129 CFlashVideoDownloadsWnd::Plugin_GetMenuImages,
00130 CUploadsWnd::Plugin_GetMenuImages,
00131 CShedulerWnd::Plugin_GetMenuImages, CHFEWnd::Plugin_GetMenuImages,
00132 CSitesWnd::Plugin_GetMenuImages, CSpiderWnd::Plugin_GetMenuImages
00133 };
00134
00135 fntGetTBInfo afnGTBI [] = {
00136 CDownloadsWnd::Plugin_GetToolBarInfo,
00137 CFlashVideoDownloadsWnd::Plugin_GetToolBarInfo,
00138 CUploadsWnd::Plugin_GetToolBarInfo,
00139 CShedulerWnd::Plugin_GetToolBarInfo, CHFEWnd::Plugin_GetToolBarInfo,
00140 CSitesWnd::Plugin_GetToolBarInfo, CSpiderWnd::Plugin_GetToolBarInfo
00141 };
00142
00143 fntGetMenuViewItems afnGMVI [] = {
00144 CDownloadsWnd::Plugin_GetMenuViewItems,
00145 CFlashVideoDownloadsWnd::Plugin_GetMenuViewItems,
00146 CUploadsWnd::Plugin_GetMenuViewItems,
00147 CShedulerWnd::Plugin_GetMenuViewItems, CHFEWnd::Plugin_GetMenuViewItems,
00148 CSitesWnd::Plugin_GetMenuViewItems, CSpiderWnd::Plugin_GetMenuViewItems
00149 };
00150
00151
00152 LOG (cPlugins << " built-in plugins found" << nl);
00153
00154 for (int i = 0; i < cPlugins; i++)
00155 {
00156 LPCSTR pszPlug, psz;
00157 afnGPN [i] (&psz, &pszPlug);
00158
00159 LOG ("loading plugin " << i << " (\"" << pszPlug << "\")..." << nl);
00160
00161 LOG ("loading plugin menus...");
00162
00163
00164 LOG ("creating plugin main window..." << nl);
00165
00166 plug.hWnd = afnCMW [i] (m_pPluginsFrame->m_hWnd);
00167 if (plug.hWnd == NULL)
00168 continue;
00169
00170 LOG ("plugin main window was created" << nl);
00171
00172
00173 plug.hMenuMain = afnGMM [i] ();
00174 plug.hMenuView = afnGVM [i] ();
00175
00176 LOG ("ok." << nl);
00177
00178 LOG ("loading menu images...");
00179
00180 fsnew1 (plug.pbmpMenuImages, CBitmap);
00181 plug.pbmpMenuImages->Attach (SBMP (aIDBmps [i]));
00182 fsnew1 (plug.pbmpMenuDImages, CBitmap);
00183 plug.pbmpMenuDImages->Attach (SBMP (aIDBmpsD [i]));
00184
00185 afnGMI [i] (&plug.pMenuMainImages, &plug.cMenuMainImages);
00186 plug.pMenuViewImages = NULL; plug.cMenuViewImages = 0;
00187
00188 LOG ("ok." << nl);
00189
00190 plug.pfnGPN = afnGPN [i];
00191 plug.pfnGTBI = afnGTBI [i];
00192 plug.pfnGMVI = afnGMVI [i];
00193 plug.pfnSetLanguage = afnSL [i];
00194 plug.pfnRTS = NULL;
00195 plug.pfnShutdown = NULL;
00196
00197 afnGMVI [i] (&plug.pMenuViewItems, &plug.cMenuViewItems);
00198
00199 m_vWndPlugs.add (plug);
00200
00201 LOG ("loading plugin toolbar...");
00202
00203 wgTButtonInfo* pButtons;
00204 int cButtons;
00205 afnGTBI [i] (&pButtons, &cButtons);
00206 CBitmap bmp1, bmp2;
00207
00208 bmp1.Attach (SBMP (aIDBmps [i]));
00209 bmp2.Attach (SBMP (aIDBmpsD [i]));
00210
00211 if (_TB_USE_ALPHA)
00212 {
00213 ConvertBmp32WithAlphaToBmp32WithoutAlpha (bmp1, GetSysColor (COLOR_3DFACE));
00214 ConvertBmp32WithAlphaToBmp32WithoutAlpha (bmp2, GetSysColor (COLOR_3DFACE));
00215 }
00216
00217 _TBMgr.InsertGroup (pButtons, &bmp1, &bmp2, cButtons);
00218
00219 LOG ("ok." << nl);
00220 }
00221
00222 LOG ("built-in plugins was loaded" << nl);
00223
00224 return TRUE;
00225 }
00226
00227 CImageList* fsPluginMgr::GetImages()
00228 {
00229 return &m_images;
00230 }
00231
00232 fsPluginInfo& fsPluginMgr::Plugin(int iPlugin)
00233 {
00234 return m_vWndPlugs [iPlugin];
00235 }
00236
00237 int fsPluginMgr::GetPluginCount()
00238 {
00239 return m_vWndPlugs.size ();
00240 }
00241
00242 BOOL fsPluginMgr::OnAppExit(BOOL bQueryForExit)
00243 {
00244 if (m_bWasExit)
00245 return TRUE;
00246
00247 if (bQueryForExit)
00248 {
00249 LOG ("quering exit..." << nl);
00250
00251 if (FALSE == QueryExit ())
00252 {
00253 LOG ("exit quired (but not permitted)" << nl);
00254 return FALSE;
00255 }
00256
00257 LOG ("exit quired" << nl);
00258 }
00259
00260 m_bWasExit = TRUE;
00261
00262 for (int i = 0; i < m_vWndPlugs.size (); i++)
00263 {
00264 LOG ("shutdowning plugin " << i << nl);
00265
00266 if (m_vWndPlugs [i].pfnShutdown)
00267 m_vWndPlugs [i].pfnShutdown ();
00268 else
00269 SendMessage (m_vWndPlugs [i].hWnd, WM_WGP_SHUTDOWN, 0, 0);
00270
00271 LOG ("plugin " << i << " shutted down" << nl);
00272 }
00273
00274 return TRUE;
00275 }
00276
00277 BOOL fsPluginMgr::IsWasExit()
00278 {
00279 return m_bWasExit;
00280 }
00281
00282 void fsPluginMgr::UpdateMenuMain(HMENU* phMenus)
00283 {
00284 SendMessage (m_vWndPlugs [m_iActivePlugin].hWnd, WM_WGP_UPDATE_MENUMAIN, 0, (LPARAM) phMenus);
00285 }
00286
00287 void fsPluginMgr::UpdateMenuView(HMENU* phMenus)
00288 {
00289 SendMessage (m_vWndPlugs [m_iActivePlugin].hWnd, WM_WGP_UPDATE_MENUVIEW, 0, (LPARAM) phMenus);
00290 }
00291
00292 void fsPluginMgr::OnSetActivePlugin(int iActive)
00293 {
00294 m_iActivePlugin = iActive;
00295 }
00296
00297 int fsPluginMgr::OnUpdateToolBar(UINT nID)
00298 {
00299 return SendMessage (m_vWndPlugs [m_iActivePlugin].hWnd, WM_WGP_UPDATE_CMDITEM, nID, (LPARAM)_TBMgr.m_hWnd);
00300 }
00301
00302 void fsPluginMgr::OnNewLng(LPCSTR )
00303 {
00304 for (int i = 0; i < m_vWndPlugs.size (); i++)
00305 {
00306 fsPluginInfo *plug = &m_vWndPlugs [i];
00307 LPCSTR pszLongName, pszShortName;
00308
00309 if (plug->pfnSetLanguage)
00310 plug->pfnSetLanguage (WGL_UNKNOWN, plug->hMenuMain, plug->hMenuView);
00311
00312 plug->pfnGPN (&pszLongName, &pszShortName);
00313 plug->pfnGMVI (&plug->pMenuViewItems, &plug->cMenuViewItems);
00314
00315 plug->strLongName = pszLongName;
00316 plug->strName = pszShortName;
00317
00318 wgTButtonInfo* pButtons;
00319 int cButtons;
00320 plug->pfnGTBI (&pButtons, &cButtons);
00321
00322 LPCSTR *ppszToolTips;
00323 fsnew (ppszToolTips, LPCSTR, cButtons);
00324 for (int j = 0; j < cButtons; j++)
00325 ppszToolTips [j] = pButtons [j].pszToolTip;
00326
00327 _TBMgr.UpdateGroupToolTips (i+1, ppszToolTips, cButtons);
00328
00329 delete [] ppszToolTips;
00330 }
00331 }
00332
00333 BOOL fsPluginMgr::QueryExit()
00334 {
00335 for (int i = 0; i < m_vWndPlugs.size (); i++)
00336 {
00337 if (m_vWndPlugs [i].pfnRTS)
00338 {
00339 if (m_vWndPlugs [i].pfnRTS () == FALSE)
00340 return FALSE;
00341 }
00342 else
00343 {
00344 if (0 != SendMessage (m_vWndPlugs [i].hWnd, WM_WGP_READYTOSHUTDOWN, 0, 0))
00345 return FALSE;
00346 }
00347 }
00348
00349 return TRUE;
00350 }