00001
00002
00003
00004
00005
00006 #include "stdafx.h"
00007 #include "FdmApp.h"
00008 #include "PluginFrame2.h"
00009 #include "PlugToolBar.h"
00010 #include "MainFrm.h"
00011 #include "DownloadsWnd.h"
00012
00013 extern CDownloadsWnd* _pwndDownloads;
00014
00015 #ifdef _DEBUG
00016 #define new DEBUG_NEW
00017 #undef THIS_FILE
00018 static char THIS_FILE[] = __FILE__;
00019 #endif
00020
00021 extern fsPluginMgr _PluginMgr;
00022
00023 CPluginFrame2::CPluginFrame2()
00024 {
00025 m_iActivePlugin = -1;
00026 }
00027
00028 CPluginFrame2::~CPluginFrame2()
00029 {
00030 _App.ActivePlugin (m_iActivePlugin);
00031 }
00032
00033 BEGIN_MESSAGE_MAP(CPluginFrame2, CWnd)
00034
00035 ON_WM_SIZE()
00036 ON_WM_SETFOCUS()
00037 ON_WM_ERASEBKGND()
00038
00039 END_MESSAGE_MAP()
00040
00041 void CPluginFrame2::SendPluginCommand(UINT uCmd)
00042 {
00043 ::SendMessage (_PluginMgr.Plugin (m_iActivePlugin).hWnd, WM_COMMAND, uCmd, 0);
00044 }
00045
00046 BOOL CPluginFrame2::Create(CWnd *pParent)
00047 {
00048 CRect rc (50, 50, 275, 70);
00049
00050 if (FALSE == CWnd::Create (AfxRegisterWndClass (0, NULL,
00051 (HBRUSH) (COLOR_BTNFACE+1), NULL), NULL, WS_CHILD | WS_VISIBLE, rc, pParent, 0x111))
00052 return FALSE;
00053
00054 if (FALSE == m_wndTabs.Create (this))
00055 return FALSE;
00056
00057 if (FALSE == Initialize ())
00058 return FALSE;
00059
00060 ShowWindow (SW_SHOW);
00061
00062 return TRUE;
00063 }
00064
00065 void CPluginFrame2::SetActivePlugin(int iPlugin)
00066 {
00067 if (m_iActivePlugin == iPlugin)
00068 return;
00069
00070 if (iPlugin == _PluginMgr.GetPluginCount ())
00071 {
00072 _App.View_MoreTabs (m_bMoreTabs = FALSE);
00073 int cur = m_iActivePlugin;
00074 if (cur > 2)
00075 cur = 0;
00076 m_wndTabs.DeleteAllItems ();
00077 for (int i = 0; i < 3; i++)
00078 m_wndTabs.InsertItem (i, _PluginMgr.Plugin (i).strName);
00079 m_wndTabs.InsertItem (i, ">>");
00080 m_wndTabs.SetCurSel (cur);
00081 SetActivePlugin (cur);
00082 return;
00083 }
00084
00085 if (m_bMoreTabs == FALSE && iPlugin >= 3)
00086 {
00087 _App.View_MoreTabs (m_bMoreTabs = TRUE);
00088 m_wndTabs.DeleteItem (3);
00089 for (int i = 3; i < _PluginMgr.GetPluginCount (); i++)
00090 m_wndTabs.InsertItem (i, _PluginMgr.Plugin (i).strName);
00091 m_wndTabs.InsertItem (i, "<<");
00092 m_wndTabs.SetCurSel (m_iActivePlugin);
00093 return;
00094 }
00095
00096 if (m_iActivePlugin != -1)
00097 {
00098 ::ShowWindow (_PluginMgr.Plugin (m_iActivePlugin).hWnd, SW_HIDE);
00099 m_pMainFrame->RemovePluginMenu ();
00100 m_pMainFrame->RemovePluginMenuView ();
00101 _TBMgr.HideGroup (m_iActivePlugin + 1);
00102 }
00103
00104 m_iActivePlugin = iPlugin;
00105
00106 fsPluginInfo &plug = _PluginMgr.Plugin (iPlugin);
00107 m_pMainFrame->AddPluginMenu (plug.hMenuMain, plug.pMenuMainImages, plug.cMenuMainImages);
00108 m_pMainFrame->AddPluginMenuView (plug.hMenuView, plug.pMenuViewImages, plug.cMenuViewImages, plug.pMenuViewItems, plug.cMenuViewItems);
00109 ::ShowWindow (plug.hWnd, SW_SHOW);
00110 ::SetFocus (plug.hWnd);
00111 _TBMgr.ShowGroup (m_iActivePlugin + 1, 0);
00112
00113 _PluginMgr.OnSetActivePlugin (iPlugin);
00114
00115 m_wndTabs.SetCurSel (m_iActivePlugin);
00116 }
00117
00118 int CPluginFrame2::GetActivePlugin()
00119 {
00120 return m_iActivePlugin;
00121 }
00122
00123 void CPluginFrame2::OnNewLng()
00124 {
00125 m_wndTabs.DeleteAllItems ();
00126
00127 for (int i = 0; i < _PluginMgr.GetPluginCount (); i++)
00128 {
00129 fsPluginInfo *plug = &_PluginMgr.Plugin (i);
00130 if (i < 3 || m_bMoreTabs)
00131 m_wndTabs.InsertItem (i, plug->strName);
00132 else if (i == 3)
00133 m_wndTabs.InsertItem (i, ">>");
00134
00135 if (i == m_iActivePlugin)
00136 {
00137 m_pMainFrame->AddPluginMenu (plug->hMenuMain, plug->pMenuMainImages, plug->cMenuMainImages);
00138 m_pMainFrame->AddPluginMenuView (plug->hMenuView, plug->pMenuViewImages, plug->cMenuViewImages, plug->pMenuViewItems, plug->cMenuViewItems);
00139 }
00140 }
00141
00142 if (m_bMoreTabs)
00143 m_wndTabs.InsertItem (i, "<<");
00144
00145 m_wndTabs.SetCurSel (m_iActivePlugin);
00146 }
00147
00148 BOOL CPluginFrame2::Initialize()
00149 {
00150 m_pMainFrame = (CMainFrame*) AfxGetApp ()->m_pMainWnd;
00151 m_bMoreTabs = _App.View_MoreTabs ();
00152
00153 LOG ("initializing core..." << nl);
00154
00155 if (FALSE == _PluginMgr.LoadPlugins (this))
00156 return FALSE;
00157
00158 int cMenuImages;
00159
00160 LOG ("building plugins' menu pictures...");
00161
00162 for (int i = 0; i < _PluginMgr.GetPluginCount (); i++)
00163 {
00164 fsPluginInfo &plug = _PluginMgr.Plugin (i);
00165 if (i < 3 || m_bMoreTabs)
00166 m_wndTabs.InsertItem (i, plug.strName);
00167 else if (i == 3)
00168 m_wndTabs.InsertItem (i, ">>");
00169
00170 ::ShowWindow (plug.hWnd, SW_HIDE);
00171
00172 if (plug.pbmpMenuImages)
00173 {
00174
00175 cMenuImages = m_pMainFrame->m_imgsTool.GetImageCount ();
00176 m_pMainFrame->m_imgsTool.Add (plug.pbmpMenuImages, RGB (255, 0, 255));
00177 m_pMainFrame->m_dimgsTool.Add (plug.pbmpMenuDImages, RGB (255, 0, 255));
00178 delete plug.pbmpMenuImages;
00179 delete plug.pbmpMenuDImages;
00180 plug.pbmpMenuImages = plug.pbmpMenuDImages = NULL;
00181
00182 for (int j = 0; j < plug.cMenuMainImages; j++)
00183 {
00184 plug.pMenuMainImages [j].iCheckImage += cMenuImages;
00185 plug.pMenuMainImages [j].iImage += cMenuImages;
00186 }
00187
00188 for (j = 0; j < plug.cMenuViewImages; j++)
00189 {
00190 plug.pMenuViewImages [j].iCheckImage += cMenuImages;
00191 plug.pMenuViewImages [j].iImage += cMenuImages;
00192 }
00193 }
00194 }
00195
00196 LOG ("ok." << nl);
00197 LOG ("core initialized." << nl);
00198
00199 int iPlug = _App.ActivePlugin ();
00200 if (iPlug >= _PluginMgr.GetPluginCount () || iPlug < 0)
00201 iPlug = 0;
00202 if (m_bMoreTabs == FALSE && iPlug > 2)
00203 iPlug = 0;
00204
00205 SetActivePlugin (iPlug);
00206
00207 return TRUE;
00208 }
00209
00210 void CPluginFrame2::OnSize(UINT nType, int cx, int cy)
00211 {
00212 CWnd::OnSize(nType, cx, cy);
00213
00214 if (cx && cy)
00215 {
00216 int tabcy = 23;
00217 if (IsWindow (m_wndTabs.m_hWnd))
00218 {
00219 CRect rc;
00220 m_wndTabs.GetItemRect (0, &rc);
00221 tabcy = rc.bottom - rc.top;
00222 tabcy += 3;
00223 m_wndTabs.MoveWindow (0, 0, cx+10, tabcy);
00224 }
00225
00226 for (int i = 0; i < _PluginMgr.GetPluginCount (); i++)
00227 ::MoveWindow (_PluginMgr.Plugin (i).hWnd, 0, tabcy, cx, cy - tabcy, TRUE);
00228 }
00229 }
00230
00231 void CPluginFrame2::OnSetFocus(CWnd* pOldWnd)
00232 {
00233 CWnd::OnSetFocus(pOldWnd);
00234
00235 if (m_iActivePlugin != -1)
00236 {
00237 fsPluginInfo &plug = _PluginMgr.Plugin (m_iActivePlugin);
00238 ::SetFocus (plug.hWnd);
00239 }
00240 }
00241
00242 BOOL CPluginFrame2::OnEraseBkgnd(CDC* pDC)
00243 {
00244 if (_pwndDownloads->m_wndDownloads.m_info.m_video.m_wndVideo.m_player.Get_State () != VFPS_CLOSED)
00245 {
00246 CRect rc;
00247
00248 _pwndDownloads->m_wndDownloads.m_info.m_video.GetWindowRect(&rc);
00249 ScreenToClient(&rc);
00250
00251 pDC->ExcludeClipRect(&rc);
00252 }
00253
00254 return CWnd::OnEraseBkgnd(pDC);
00255 }