notepad-plus-plus-legacy/PowerEditor/src/lesDlgs.h

130 lines
3.4 KiB
C
Raw Normal View History

//this file is part of notepad++
//Copyright (C)2003 Don HO < donho@altern.org >
//
//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.
//
//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.
#ifndef SIZE_DLG_H
#define SIZE_DLG_H
#include "StaticDialog.h"
const int DEFAULT_NB_NUMBER = 2;
class ValueDlg : public StaticDialog
{
public :
ValueDlg() : StaticDialog(), _nbNumber(DEFAULT_NB_NUMBER) {};
void init(HINSTANCE hInst, HWND parent, int valueToSet, const TCHAR *text) {
Window::init(hInst, parent);
_defaultValue = valueToSet;
lstrcpy(_name, text);
};
int doDialog(POINT p, bool isRTL = false) {
_p = p;
if (isRTL)
{
DLGTEMPLATE *pMyDlgTemplate = NULL;
HGLOBAL hMyDlgTemplate = makeRTLResource(IDD_VALUE_DLG, &pMyDlgTemplate);
int result = ::DialogBoxIndirectParam(_hInst, pMyDlgTemplate, _hParent, (DLGPROC)dlgProc, (LPARAM)this);
::GlobalFree(hMyDlgTemplate);
return result;
}
return ::DialogBoxParam(_hInst, MAKEINTRESOURCE(IDD_VALUE_DLG), _hParent, (DLGPROC)dlgProc, (LPARAM)this);
};
void setNBNumber(int nbNumber) {
if (nbNumber > 0)
_nbNumber = nbNumber;
};
int reSizeValueBox()
{
if (_nbNumber == DEFAULT_NB_NUMBER) return 0;
RECT rect;
POINT p;
HWND hEdit = ::GetDlgItem(_hSelf, IDC_VALUE_EDIT);
//get screen coordonnees (x,y)
::GetWindowRect(hEdit, &rect);
int w = rect.right - rect.left;
int h = rect.bottom - rect.top;
p.x = rect.left;
p.y = rect.top;
// convert screen coordonnees to client coordonnees
::ScreenToClient(_hSelf, &p);
int unit = w / (DEFAULT_NB_NUMBER + 2);
int extraSize = (_nbNumber-DEFAULT_NB_NUMBER)*unit;
::MoveWindow(hEdit, p.x, p.y, w + extraSize, h, FALSE);
return extraSize;
};
virtual void destroy() {};
protected :
BOOL CALLBACK run_dlgProc(UINT Message, WPARAM wParam, LPARAM) {
switch (Message)
{
case WM_INITDIALOG :
{
::SetDlgItemText(_hSelf, IDC_VALUE_STATIC, _name);
::SetDlgItemInt(_hSelf, IDC_VALUE_EDIT, _defaultValue, FALSE);
RECT rc;
::GetClientRect(_hSelf, &rc);
int size = reSizeValueBox();
::MoveWindow(_hSelf, _p.x, _p.y, rc.right - rc.left + size, rc.bottom - rc.top + 30, TRUE);
return TRUE;
}
case WM_COMMAND :
{
switch (wParam)
{
case IDOK :
{
int i = ::GetDlgItemInt(_hSelf, IDC_VALUE_EDIT, NULL, FALSE);
::EndDialog(_hSelf, i);
return TRUE;
}
case IDCANCEL :
::EndDialog(_hSelf, -1);
return TRUE;
default:
return FALSE;
}
}
default :
return FALSE;
}
};
private :
int _nbNumber;
int _defaultValue;
TCHAR _name[32];
POINT _p;
};
#endif //TABSIZE_DLG_H