text: // This file is part of Notepad++ project
  // Copyright (C)2003 Don HO <don.h@free.fr>
  //
  // This program is free software; you can redistribute it and/or
  // modify it under the terms of the GNU General Public License
  // as published by the Free Software Foundation; either
  // version 2 of the License, or (at your option) any later version.
  //
  // Note that the GPL places important restrictions on "derived works", yet
  // it does not provide a detailed definition of that term.  To avoid      
  // misunderstandings, we consider an application to constitute a          
  // "derivative work" for the purpose of this license if it does any of the
  // following:                                                             
  // 1. Integrates source code from Notepad++.
  // 2. Integrates/includes/aggregates Notepad++ into a proprietary executable
  //    installer, such as those produced by InstallShield.
  // 3. Links to a library or executes a program that does any of the above.
  //
  // This program is distributed in the hope that it will be useful,
  // but WITHOUT ANY WARRANTY; without even the implied warranty of
  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  // GNU General Public License for more details.
  //
  // You should have received a copy of the GNU General Public License
  // along with this program; if not, write to the Free Software
  // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  
  
  #pragma once
  #include "resource.h"
  #include "ScintillaEditView.h"
  
  class GoToLineDlg : public StaticDialog
  {
  public :
  	GoToLineDlg() : StaticDialog() {};
  
  	void init(HINSTANCE hInst, HWND hPere, ScintillaEditView **ppEditView) {
  		Window::init(hInst, hPere);
  		if (!ppEditView)
  			throw std::runtime_error("GoToLineDlg::init : ppEditView is null.");
  		_ppEditView = ppEditView;
  	};
  
  	virtual void create(int dialogID, bool isRTL = false) {
  		StaticDialog::create(dialogID, isRTL);
  	};
  
  	void doDialog(bool isRTL = false) {
  		if (!isCreated())
  			create(IDD_GOLINE, isRTL);
  		display();
  	};
  
      virtual void display(bool toShow = true) const {
          Window::display(toShow);
          if (toShow)
              ::SetFocus(::GetDlgItem(_hSelf, ID_GOLINE_EDIT));
      };
  
  protected :
  	enum mode {go2line, go2offsset};
  	mode _mode = go2line;
  	virtual INT_PTR CALLBACK run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam);
  
  private :
      ScintillaEditView **_ppEditView = nullptr;
  
      void updateLinesNumbers() const;
  
      void cleanLineEdit() const {
          ::SetDlgItemText(_hSelf, ID_GOLINE_EDIT, TEXT(""));
      };
  
      int getLine() const {
          BOOL isSuccessful;
          int line = ::GetDlgItemInt(_hSelf, ID_GOLINE_EDIT, &isSuccessful, FALSE);
          return (isSuccessful?line:-1);
      };
  
  };
  
  