00001
00002
00003
00004
00005
00006 #include "stdafx.h"
00007 #include "FdmApp.h"
00008 #include "HFE_Address.h"
00009 #include "HFEWnd.h"
00010 #include "plugincmds.h"
00011
00012 #ifdef _DEBUG
00013 #define new DEBUG_NEW
00014 #undef THIS_FILE
00015 static char THIS_FILE[] = __FILE__;
00016 #endif
00017
00018 extern CHFEWnd* _pwndHFE;
00019
00020 CHFE_Address::CHFE_Address()
00021 {
00022 }
00023
00024 CHFE_Address::~CHFE_Address()
00025 {
00026 }
00027
00028 BEGIN_MESSAGE_MAP(CHFE_Address, CWnd)
00029
00030 ON_WM_CREATE()
00031 ON_WM_SIZE()
00032 ON_WM_PAINT()
00033 ON_COMMAND (ID_HFE_GO, OnHfeGo)
00034 ON_COMMAND (ID_HFE_BACK, OnHfeBack)
00035
00036
00037 END_MESSAGE_MAP()
00038
00039 BOOL CHFE_Address::Create(CWnd *pParent)
00040 {
00041 CRect rc (0, 0, 50, 50);
00042
00043 if (FALSE == CWnd::Create (AfxRegisterWndClass (0, LoadCursor (NULL, IDC_ARROW),
00044 CreateSolidBrush (GetSysColor (COLOR_3DFACE)), NULL), NULL, WS_CHILD | WS_VISIBLE, rc, pParent, 0x13121))
00045 return FALSE;
00046
00047 return TRUE;
00048 }
00049
00050 int CHFE_Address::OnCreate(LPCREATESTRUCT lpCreateStruct)
00051 {
00052 if (CWnd::OnCreate(lpCreateStruct) == -1)
00053 return -1;
00054
00055 if (!m_wndUrl.Create (this))
00056 return -1;
00057
00058
00059 for (int i = 0; i < _LastUrlPaths.GetRecordCount (); i++)
00060 m_wndUrl.AddString (_LastUrlPaths.GetRecord (i));
00061
00062 m_wndUrl.SetWindowText (_LastUrlPaths.GetRecordCount () ? _LastUrlPaths.GetRecord (0) : "ftp://");
00063 m_wndUrl.SetReturnID (ID_HFE_GO);
00064
00065 m_font.CreateFont (15, 0, 0, 0, FW_NORMAL, 0, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 0, "MS Sans Serif");
00066
00067 CreateBars ();
00068
00069 return 0;
00070 }
00071
00072 void CHFE_Address::OnSize(UINT , int cx, int )
00073 {
00074 m_wndUrl.MoveWindow (60, 6, cx - 60 - 50 - 40, 20);
00075 m_barGo.MoveWindow (cx - 49, 5, 50, 26);
00076 m_barBack.MoveWindow (cx - 49 - 35, 5, 35, 23);
00077 m_rcUrl = CRect (60, 6, cx - 50, 8+16+2);
00078 }
00079
00080 void CHFE_Address::OnPaint()
00081 {
00082 CPaintDC dc(this);
00083
00084 CRect rc;
00085 GetClientRect (&rc);
00086 rc.right = m_rcUrl.left - 1;
00087 rc.left = 5; rc.top = m_rcUrl.top + 4;
00088
00089 dc.SetBkMode (TRANSPARENT);
00090 CFont *oldfont = dc.SelectObject (&m_font);
00091 dc.SetTextColor (GetSysColor (COLOR_WINDOWTEXT));
00092 dc.DrawText (LS (L_ADDRESS), -1, &rc, DT_LEFT | DT_TOP | DT_SINGLELINE);
00093 dc.SelectObject (oldfont);
00094
00095 DrawUrlFrame (&dc);
00096 }
00097
00098 void CHFE_Address::DrawUrlFrame(CDC *dc)
00099 {
00100 CPen light (PS_SOLID, 1, GetSysColor (COLOR_3DHILIGHT));
00101 CPen dark (PS_SOLID, 1, GetSysColor (COLOR_3DSHADOW));
00102 CPen* oldpen = dc->SelectObject (&dark);
00103
00104 CRect rc;
00105
00106 GetClientRect (&rc);
00107 dc->SelectObject (&dark);
00108 dc->MoveTo (0, rc.bottom - 2);
00109 dc->LineTo (rc.right, rc.bottom - 2);
00110
00111 dc->SelectObject (&light);
00112 dc->MoveTo (0, rc.bottom - 1);
00113 dc->LineTo (rc.right, rc.bottom - 1);
00114
00115 dc->SelectObject (oldpen);
00116 }
00117
00118 void CHFE_Address::OnHfeGo()
00119 {
00120 HfeGo ();
00121 }
00122
00123 LPCSTR CHFE_Address::GetUrl()
00124 {
00125 m_wndUrl.GetWindowText (m_strUrl);
00126
00127
00128 if (strnicmp (m_strUrl, "ftp.", 4) == 0)
00129 {
00130 CString str = "ftp://";
00131 str += m_strUrl;
00132 m_strUrl = str;
00133 }
00134 else if (strnicmp (m_strUrl, "www.", 3) == 0)
00135 {
00136
00137 CString str = "http://";
00138 str += m_strUrl;
00139 m_strUrl = str;
00140 }
00141
00142 m_wndUrl.SetWindowText (m_strUrl);
00143
00144 return m_strUrl;
00145 }
00146
00147 void CHFE_Address::ApplyLanguage()
00148 {
00149 Invalidate ();
00150 }
00151
00152 void CHFE_Address::UpdateUrl()
00153 {
00154 m_wndUrl.GetWindowText (m_strUrl);
00155 fsURL url;
00156 BOOL bIncUser = FALSE, bIncPass = FALSE;
00157
00158 if (IR_SUCCESS == url.Crack (m_strUrl))
00159 {
00160
00161 bIncUser = *url.GetUserName () != 0;
00162 bIncPass = *url.GetPassword () != 0;
00163 }
00164
00165 char szUrl [10000];
00166 *szUrl = 0;
00167 _pwndHFE->GetMgr ()->GetCurrentUrl (szUrl, sizeof (szUrl), bIncUser, bIncPass);
00168 if (*szUrl)
00169 {
00170 m_strUrl = szUrl;
00171 m_wndUrl.SetWindowText (szUrl);
00172 }
00173 }
00174
00175 void CHFE_Address::CreateBars()
00176 {
00177 CRect rcBar (0, 0, 0, 0);
00178
00179 m_barGo.SetSizes (CSize (50, 23), CSize (16, 16));
00180 m_barGo.CreateEx (this, TBSTYLE_FLAT|TBSTYLE_TRANSPARENT|TBSTYLE_LIST,
00181 WS_CHILD | WS_VISIBLE | CCS_NORESIZE | CCS_TOP | CCS_NODIVIDER | CBRS_TOOLTIPS,
00182 rcBar, 0x111a);
00183
00184 m_imgsBarGo.Create (16, 16, ILC_COLOR24 | ILC_MASK, 1, 1);
00185 CBitmap bmp;
00186 bmp.Attach (SBMP (IDB_GO));
00187 m_imgsBarGo.Add (&bmp, RGB (255, 0, 255));
00188 m_barGo.GetToolBarCtrl ().SetImageList (&m_imgsBarGo);
00189
00190 UINT uID = ID_HFE_GO;
00191 m_barGo.SetButtons (&uID, 1);
00192
00193 m_barGo.SetButtonText (0, "Go");
00194
00195 m_barBack.SetSizes (CSize (35, 23), CSize (28, 16));
00196 m_barBack.CreateEx (this, TBSTYLE_FLAT|TBSTYLE_TRANSPARENT,
00197 WS_CHILD | WS_VISIBLE | CCS_NORESIZE | CCS_TOP | CCS_NODIVIDER | CBRS_TOOLTIPS,
00198 rcBar, 0x112a);
00199
00200 m_imgsBarBack.Create (28, 16, ILC_COLOR24 | ILC_MASK, 1, 1);
00201 CBitmap bmp1;
00202 bmp1.Attach (SBMP (IDB_BACK));
00203 m_imgsBarBack.Add (&bmp1, RGB (255, 0, 255));
00204 m_barBack.GetToolBarCtrl ().SetImageList (&m_imgsBarBack);
00205
00206 m_imgsBarBack_D.Create (28, 16, ILC_COLOR24 | ILC_MASK, 1, 1);
00207 CBitmap bmp2;
00208 bmp2.Attach (SBMP (IDB_BACK_D));
00209 m_imgsBarBack_D.Add (&bmp2, RGB (255, 0, 255));
00210 m_barBack.GetToolBarCtrl ().SetDisabledImageList (&m_imgsBarBack_D);
00211
00212 uID = ID_HFE_BACK;
00213 m_barBack.SetButtons (&uID, 1);
00214 m_barBack.GetToolBarCtrl ().EnableButton (ID_HFE_BACK, FALSE);
00215 }
00216
00217 void CHFE_Address::PushUrl(LPCSTR pszUrl)
00218 {
00219 if (m_vAddrs.size ())
00220 if (m_vAddrs [m_vAddrs.size () - 1] == pszUrl)
00221 return;
00222
00223 fsURL url;
00224 url.Crack (m_strUrl);
00225
00226 BOOL bUser = *url.GetUserName ();
00227 BOOL bPassword = bUser && *url.GetPassword ();
00228
00229 url.Crack (pszUrl);
00230
00231 char szUrl [10000];
00232 DWORD dw = sizeof (szUrl);
00233 fsURL url1;
00234
00235 url1.Create (url.GetInternetScheme (), url.GetHostName (), url.GetPort (),
00236 bUser ? url.GetUserName () : NULL, bPassword ? url.GetPassword () : NULL,
00237 url.GetPath (), szUrl, &dw);
00238
00239 m_vAddrs.add (szUrl);
00240 }
00241
00242 void CHFE_Address::OnHfeBack()
00243 {
00244 CString strUrl = PopUrl ();
00245 if (strUrl != "")
00246 {
00247 m_wndUrl.SetWindowText (strUrl);
00248 HfeGo (FALSE);
00249 }
00250 }
00251
00252 CString CHFE_Address::PopUrl()
00253 {
00254 if (m_vAddrs.size () < 2)
00255 return "";
00256
00257 CString strUrl = m_vAddrs [m_vAddrs.size () - 2];
00258 m_vAddrs.del (m_vAddrs.size () - 1);
00259 return strUrl;
00260 }
00261
00262 void CHFE_Address::HfeGo(BOOL bPushUrl)
00263 {
00264 _LastUrlPaths.AddRecord (GetUrl ());
00265
00266 m_wndUrl.ResetContent ();
00267 for (int i = 0; i < _LastUrlPaths.GetRecordCount (); i++)
00268 m_wndUrl.AddString (_LastUrlPaths.GetRecord (i));
00269 m_wndUrl.SetWindowText (m_strUrl);
00270
00271 if (bPushUrl)
00272 PushUrl (m_strUrl);
00273
00274 _pwndHFE->OnGo ();
00275 }
00276
00277 BOOL CHFE_Address::OnNotify(WPARAM , LPARAM lParam, LRESULT *pResult)
00278 {
00279 LPNMHDR nm = (LPNMHDR) lParam;
00280
00281 int nID = nm->hwndFrom == m_barGo.m_hWnd ? ID_HFE_GO : ID_HFE_BACK;
00282
00283 switch (nm->code)
00284 {
00285 case TBN_GETINFOTIPA:
00286 {
00287 LPNMTBGETINFOTIPA inf = (LPNMTBGETINFOTIPA) nm;
00288 if (nID == ID_HFE_BACK)
00289 strcpy (inf->pszText, LS (L_BACK));
00290 else
00291 strcpy (inf->pszText, LS (L_GO));
00292 }
00293 break;
00294 }
00295
00296 *pResult = TRUE;
00297
00298 return TRUE;
00299 }
00300
00301 void CHFE_Address::ClearHistory()
00302 {
00303 m_wndUrl.ResetContent ();
00304 }