99#define LINENUMEDIT_IMPL
1010#include " LineNumEdit.hpp"
1111#include " MChooseLangDlg.hpp"
12+ #include " MGoToLineDlg.hpp"
1213#include " ToolbarRes.hpp"
1314#include " Utils.h"
1415#include < thread>
@@ -2192,26 +2193,17 @@ void MMainWnd::OnPlay(HWND hwnd)
21922193
21932194void MMainWnd::OnSelChange (HWND hwnd, INT iSelected)
21942195{
2195- if (iSelected != m_tab.GetCurSel ())
2196- {
2197- // update tab control selection
2198- m_tab.SetCurSel (iSelected);
2199- }
2200-
2201- // update g_settings.bShowBinEdit
2196+ // update show
22022197 switch (iSelected)
22032198 {
22042199 case 0 :
2205- g_settings. bShowBinEdit = FALSE ;
2200+ SetShowMode (m_nShowMode, FALSE ) ;
22062201 break ;
22072202 case 1 :
2208- g_settings. bShowBinEdit = TRUE ;
2203+ SetShowMode (m_nShowMode, TRUE ) ;
22092204 break ;
22102205 }
22112206
2212- // update show
2213- SetShowMode (m_nShowMode);
2214-
22152207 // relayout
22162208 PostMessage (hwnd, WM_SIZE, 0 , 0 );
22172209}
@@ -2803,11 +2795,14 @@ void MMainWnd::OnDebugTreeNode(HWND hwnd)
28032795 MsgBoxDx (sz, MB_ICONINFORMATION);
28042796}
28052797
2806- void MMainWnd::SetShowMode (SHOW_MODE mode)
2798+ void MMainWnd::SetShowMode (SHOW_MODE mode, BOOL bShowBinary )
28072799{
2800+ m_bShowBinEdit = bShowBinary;
28082801 m_nShowMode = mode;
2809- if (g_settings. bShowBinEdit )
2802+ if (m_bShowBinEdit )
28102803 {
2804+ if (m_tab.GetCurSel () != 1 )
2805+ m_tab.SetCurSel (1 );
28112806 ShowWindow (m_hCodeEditor, SW_HIDE);
28122807 ShowWindow (m_hBmpView, SW_HIDE);
28132808 ShowWindow (m_hHexViewer, SW_SHOWNOACTIVATE);
@@ -2816,6 +2811,8 @@ void MMainWnd::SetShowMode(SHOW_MODE mode)
28162811 }
28172812 else
28182813 {
2814+ if (m_tab.GetCurSel () != 0 )
2815+ m_tab.SetCurSel (0 );
28192816 switch (mode)
28202817 {
28212818 case SHOW_MOVIE:
@@ -3024,7 +3021,7 @@ void MMainWnd::OnInitMenu(HWND hwnd, HMENU hMenu)
30243021 else
30253022 CheckMenuItem (hMenu, ID_STATUSBAR, MF_UNCHECKED);
30263023
3027- if (g_settings. bShowBinEdit )
3024+ if (m_bShowBinEdit )
30283025 CheckMenuItem (hMenu, ID_BINARYPANE, MF_CHECKED);
30293026 else
30303027 CheckMenuItem (hMenu, ID_BINARYPANE, MF_UNCHECKED);
@@ -3579,7 +3576,7 @@ void MMainWnd::SelectTV(EntryBase *entry, BOOL bDoubleClick, STV stv)
35793576 bEditable = FALSE ;
35803577
35813578 // update show mode
3582- SetShowMode (SHOW_CODEONLY);
3579+ SetShowMode (SHOW_CODEONLY, m_bShowBinEdit );
35833580 }
35843581
35853582 if (stv == STV_DONTRESET || stv == STV_RESETTEXT)
@@ -3621,7 +3618,7 @@ void MMainWnd::SelectTV(EntryBase *entry, BOOL bDoubleClick, STV stv)
36213618 }
36223619
36233620 // update show
3624- SetShowMode (m_nShowMode);
3621+ SetShowMode (m_nShowMode, m_bShowBinEdit );
36253622
36263623 // recalculate the splitter
36273624 PostMessageDx (WM_SIZE);
@@ -8933,6 +8930,23 @@ void MMainWnd::OnRefreshAll(HWND hwnd)
89338930 PostUpdateLangArrow (hwnd);
89348931}
89358932
8933+ // ID_GOTOLINE
8934+ void MMainWnd::OnGoToLine (HWND hwnd) {
8935+ MGoToLineDlg dialog;
8936+ if (dialog.DialogBoxDx (hwnd) == IDOK) {
8937+ SetShowMode (SHOW_CODEONLY, FALSE );
8938+ INT line = dialog.m_line ;
8939+ INT ich = Edit_LineIndex (m_hCodeEditor, (line <= 0 ) ? 0 : (line - 1 ));
8940+ INT cch = Edit_GetTextLength (m_hCodeEditor);
8941+ if (ich == -1 )
8942+ Edit_SetSel (m_hCodeEditor, cch, cch);
8943+ else
8944+ Edit_SetSel (m_hCodeEditor, ich, ich);
8945+ Edit_ScrollCaret (m_hCodeEditor);
8946+ SetFocus (m_hCodeEditor);
8947+ }
8948+ }
8949+
89368950// WM_COMMAND
89378951void MMainWnd::OnCommand (HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
89388952{
@@ -9098,10 +9112,10 @@ void MMainWnd::OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
90989112 break ;
90999113 case ID_BINARYPANE:
91009114 // toggle the flag
9101- g_settings. bShowBinEdit = !g_settings. bShowBinEdit ;
9115+ m_bShowBinEdit = !m_bShowBinEdit ;
91029116 // show/hide the binary
9103- m_tab.SetCurSel (!!g_settings. bShowBinEdit );
9104- OnSelChange (hwnd, !!g_settings. bShowBinEdit );
9117+ m_tab.SetCurSel (!!m_bShowBinEdit );
9118+ OnSelChange (hwnd, !!m_bShowBinEdit );
91059119 break ;
91069120 case ID_ALWAYSCONTROL:
91079121 {
@@ -9459,6 +9473,9 @@ void MMainWnd::OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
94599473 case ID_INTERNALTEST:
94609474 OnInternalTest (hwnd);
94619475 break ;
9476+ case ID_GOTOLINE:
9477+ OnGoToLine (hwnd);
9478+ break ;
94629479 default :
94639480 bUpdateStatus = FALSE ;
94649481 break ;
0 commit comments