[ENHANCEMENT]Improve toolbar performance.

Internals prepped for later extensions.

git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository@156 f5eea248-9336-0410-98b8-ebc06183d4e3
This commit is contained in:
donho 2008-03-28 01:49:51 +00:00
parent 3701d40a8f
commit 0d932b764b
10 changed files with 137 additions and 233 deletions

View File

@ -153,9 +153,6 @@ Notepad_plus::Notepad_plus(): Window(), _mainWindowStatus(0), _pDocTab(NULL), _p
_toolIcons = NULL; _toolIcons = NULL;
} }
// ATTENTION : the order of the destruction is very important // ATTENTION : the order of the destruction is very important
// because if the parent's window hadle is destroyed before // because if the parent's window hadle is destroyed before
// the destruction of its childrens' windows handle, // the destruction of its childrens' windows handle,
@ -341,6 +338,7 @@ bool Notepad_plus::saveGUIParams()
{ {
NppGUI & nppGUI = (NppGUI &)(NppParameters::getInstance())->getNppGUI(); NppGUI & nppGUI = (NppGUI &)(NppParameters::getInstance())->getNppGUI();
nppGUI._statusBarShow = _statusBar.isVisible(); nppGUI._statusBarShow = _statusBar.isVisible();
nppGUI._toolbarShow = _rebar.getIDVisible(REBAR_BAR_TOOLBAR);
nppGUI._toolBarStatus = _toolBar.getState(); nppGUI._toolBarStatus = _toolBar.getState();
nppGUI._tabStatus = (TabBarPlus::doDragNDropOrNot()?TAB_DRAWTOPBAR:0) | \ nppGUI._tabStatus = (TabBarPlus::doDragNDropOrNot()?TAB_DRAWTOPBAR:0) | \
@ -542,10 +540,10 @@ bool Notepad_plus::loadSession(Session & session)
allSessionFilesLoaded = false; allSessionFilesLoaded = false;
} }
} }
if (session._activeMainIndex < _mainDocTab.nbItem())//session.nbMainFiles()) if (session._activeMainIndex < (size_t)_mainDocTab.nbItem())//session.nbMainFiles())
_mainDocTab.activate(session._activeMainIndex); _mainDocTab.activate(session._activeMainIndex);
if (session._activeSubIndex < _subDocTab.nbItem())//session.nbSubFiles()) if (session._activeSubIndex < (size_t)_subDocTab.nbItem())//session.nbSubFiles())
_subDocTab.activate(session._activeSubIndex); _subDocTab.activate(session._activeSubIndex);
if ((session.nbSubFiles() > 0) && (session._activeView == MAIN_VIEW || session._activeView == SUB_VIEW)) if ((session.nbSubFiles() > 0) && (session._activeView == MAIN_VIEW || session._activeView == SUB_VIEW))
@ -2253,6 +2251,12 @@ BOOL Notepad_plus::notify(SCNotification *notification)
break; break;
} }
case RBN_HEIGHTCHANGE:
{
SendMessage(_hSelf, WM_SIZE, 0, 0);
break;
}
default : default :
break; break;
@ -3143,69 +3147,45 @@ void Notepad_plus::command(int id)
case IDM_VIEW_TOOLBAR_HIDE: case IDM_VIEW_TOOLBAR_HIDE:
{ {
int checkedID = getToolBarState(); bool toSet = !_rebar.getIDVisible(REBAR_BAR_TOOLBAR);
_rebar.setIDVisible(REBAR_BAR_TOOLBAR, toSet);
if (checkedID != IDM_VIEW_TOOLBAR_HIDE)
{
RECT rc;
getClientRect(rc);
_toolBar.display(false);
::SendMessage(_hSelf, WM_SIZE, SIZE_RESTORED, MAKELONG(rc.bottom, rc.right));
checkToolBarMenu(id);
}
} }
break; break;
case IDM_VIEW_TOOLBAR_REDUCE: case IDM_VIEW_TOOLBAR_REDUCE:
{ {
int checkedID = getToolBarState(); toolBarStatusType state = _toolBar.getState();
if (checkedID != IDM_VIEW_TOOLBAR_REDUCE) if (state != TB_SMALL)
{ {
RECT rc;
getClientRect(rc);
_toolBar.reduce(); _toolBar.reduce();
_toolBar.display();
_rebar.reNew(); _rebar.reNew();
_rebar.display(); changeToolBarIcons();
::SendMessage(_hSelf, WM_SIZE, SIZE_RESTORED, MAKELONG(rc.bottom, rc.right));
//changeToolBarIcons();
checkToolBarMenu(id);
} }
} }
break; break;
case IDM_VIEW_TOOLBAR_ENLARGE: case IDM_VIEW_TOOLBAR_ENLARGE:
{ {
int checkedID = getToolBarState(); toolBarStatusType state = _toolBar.getState();
if (checkedID != IDM_VIEW_TOOLBAR_ENLARGE)
if (state != TB_LARGE)
{ {
RECT rc;
getClientRect(rc);
_toolBar.enlarge(); _toolBar.enlarge();
_toolBar.display();
_rebar.reNew(); _rebar.reNew();
_rebar.display(); changeToolBarIcons();
::SendMessage(_hSelf, WM_SIZE, SIZE_RESTORED, MAKELONG(rc.bottom, rc.right));
changeToolBarIcons();
checkToolBarMenu(id);
} }
} }
break; break;
case IDM_VIEW_TOOLBAR_STANDARD: case IDM_VIEW_TOOLBAR_STANDARD:
{ {
int checkedID = getToolBarState(); toolBarStatusType state = _toolBar.getState();
if (checkedID != IDM_VIEW_TOOLBAR_STANDARD)
if (state != TB_STANDARD)
{ {
RECT rc;
getClientRect(rc);
_toolBar.setToUglyIcons(); _toolBar.setToUglyIcons();
_toolBar.display();
_rebar.reNew(); _rebar.reNew();
_rebar.display();
::SendMessage(_hSelf, WM_SIZE, SIZE_RESTORED, MAKELONG(rc.bottom, rc.right));
checkToolBarMenu(id);
} }
} }
break; break;
@ -3239,9 +3219,7 @@ void Notepad_plus::command(int id)
break; break;
} }
case IDM_VIEW_REFRESHTABAR : case IDM_VIEW_REFRESHTABAR :
{ {
RECT rc; RECT rc;
@ -4774,14 +4752,14 @@ void Notepad_plus::reload(const char *fileName)
void Notepad_plus::getMainClientRect(RECT &rc) const void Notepad_plus::getMainClientRect(RECT &rc) const
{ {
Window::getClientRect(rc); Window::getClientRect(rc);
rc.top += _toolBar.getHeight() + 2; rc.top += _rebar.getHeight();
rc.bottom -= _toolBar.getHeight() + 2 +_statusBar.getHeight(); rc.bottom -= _rebar.getHeight() +_statusBar.getHeight();
} }
void Notepad_plus::getToolBarClientRect(RECT &rc) const void Notepad_plus::getToolBarClientRect(RECT &rc) const
{ {
Window::getClientRect(rc); Window::getClientRect(rc);
rc.bottom = _toolBar.getHeight(); rc.bottom = _rebar.getHeight();//_toolBar.getHeight();
} }
void Notepad_plus::getStatusBarClientRect(RECT & rc) const void Notepad_plus::getStatusBarClientRect(RECT & rc) const
@ -6543,6 +6521,7 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa
//-- Tool Bar Section --// //-- Tool Bar Section --//
toolBarStatusType tbStatus = nppGUI._toolBarStatus; toolBarStatusType tbStatus = nppGUI._toolBarStatus;
willBeShown = nppGUI._toolbarShow;
// To notify plugins that toolbar icons can be registered // To notify plugins that toolbar icons can be registered
SCNotification scnN; SCNotification scnN;
@ -6551,34 +6530,12 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa
scnN.nmhdr.idFrom = 0; scnN.nmhdr.idFrom = 0;
_pluginsManager.notify(&scnN); _pluginsManager.notify(&scnN);
// TB_LARGE par default
int iconSize = 32;
int menuID = IDM_VIEW_TOOLBAR_ENLARGE;
if (tbStatus == TB_HIDE)
{
willBeShown = false;
menuID = IDM_VIEW_TOOLBAR_HIDE;
}
else if (tbStatus == TB_SMALL)
{
iconSize = 16;
menuID = IDM_VIEW_TOOLBAR_REDUCE;
}
else if (tbStatus == TB_STANDARD)
{
iconSize = 16;
menuID = IDM_VIEW_TOOLBAR_STANDARD;
}
_toolBar.init(_hInst, hwnd, tbStatus, toolBarIcons, sizeof(toolBarIcons)/sizeof(ToolBarButtonUnit)); _toolBar.init(_hInst, hwnd, tbStatus, toolBarIcons, sizeof(toolBarIcons)/sizeof(ToolBarButtonUnit));
_toolBar.display(willBeShown);
checkToolBarMenu(menuID);
changeToolBarIcons(); changeToolBarIcons();
_rebar.init(_hInst, hwnd, &_toolBar); _rebar.init(_hInst, hwnd, &_toolBar);
//_rebar.display(tbStatus != TB_HIDE); _rebar.setIDVisible(REBAR_BAR_TOOLBAR, willBeShown);
//launch the plugin dlg memorized at the last session //launch the plugin dlg memorized at the last session
DockingManagerData &dmd = nppGUI._dockingData; DockingManagerData &dmd = nppGUI._dockingData;
@ -6761,41 +6718,16 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa
} }
break; break;
case WM_GETMINMAXINFO:
{
MINMAXINFO *pmmi = reinterpret_cast<MINMAXINFO *>(lParam);
/*
if (_isfullScreen)
{
pmmi->ptMaxSize.x = ::GetSystemMetrics(SM_CXSCREEN) + 2 * ::GetSystemMetrics(SM_CXSIZEFRAME) + 2;
pmmi->ptMaxSize.y = ::GetSystemMetrics(SM_CYSCREEN) +
::GetSystemMetrics(SM_CYCAPTION) +
::GetSystemMetrics(SM_CYMENU) +
2 * ::GetSystemMetrics(SM_CYSIZEFRAME) +
_toolBar.getHeight() + 2 +
13;
pmmi->ptMaxTrackSize.x = pmmi->ptMaxSize.x;
pmmi->ptMaxTrackSize.y = pmmi->ptMaxSize.y;
result = 0; // Je sais, c'est bizarre, mais selons le doc...
}
else
{
*/
result = ::DefWindowProc(_hSelf, Message, wParam, lParam);
// }
}
break;
case WM_SIZE: case WM_SIZE:
{ {
if (lParam == 0) {
RECT winRect;
getClientRect(winRect);
lParam = MAKELPARAM(winRect.right - winRect.left, winRect.bottom - winRect.top);
}
RECT rc; RECT rc;
//getToolBarClientRect(rc);
//_toolBar.reSizeTo(rc);
::MoveWindow(_toolBar.getHSelf(), 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
::MoveWindow(_rebar.getHSelf(), 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE); ::MoveWindow(_rebar.getHSelf(), 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
getStatusBarClientRect(rc); getStatusBarClientRect(rc);
_statusBar.reSizeTo(rc); _statusBar.reSizeTo(rc);
@ -7928,7 +7860,7 @@ LRESULT CALLBACK Notepad_plus::Notepad_plus_Proc(HWND hwnd, UINT Message, WPARAM
switch(Message) switch(Message)
{ {
case WM_GETMINMAXINFO : // It's the 1st? msg (even before WM_NCCREATE) /* case WM_GETMINMAXINFO : // It's the 1st? msg (even before WM_NCCREATE)
{ {
if (isFirstGetMinMaxInfoMsg) if (isFirstGetMinMaxInfoMsg)
{ {
@ -7937,7 +7869,7 @@ LRESULT CALLBACK Notepad_plus::Notepad_plus_Proc(HWND hwnd, UINT Message, WPARAM
} }
else else
return ((Notepad_plus *)::GetWindowLong(hwnd, GWL_USERDATA))->runProc(hwnd, Message, wParam, lParam); return ((Notepad_plus *)::GetWindowLong(hwnd, GWL_USERDATA))->runProc(hwnd, Message, wParam, lParam);
} }*/
case WM_NCCREATE : // First message we get the ptr of instantiated object case WM_NCCREATE : // First message we get the ptr of instantiated object
// then stock it into GWL_USERDATA index in order to retrieve afterward // then stock it into GWL_USERDATA index in order to retrieve afterward
@ -7994,9 +7926,8 @@ void Notepad_plus::fullScreenToggle()
//Hide window so windows can properly update it //Hide window so windows can properly update it
::ShowWindow(_hSelf, SW_HIDE); ::ShowWindow(_hSelf, SW_HIDE);
//Get state of toolbar and hide it //Hide rebar
_prevTBState = _toolBar.getState(); _rebar.display(false);
SendMessage(_hSelf, WM_COMMAND, IDM_VIEW_TOOLBAR_HIDE, 0);
//Set popup style for fullscreen window and store the old style //Set popup style for fullscreen window and store the old style
_prevStyles = ::SetWindowLongPtr( _hSelf, GWL_STYLE, WS_POPUP ); _prevStyles = ::SetWindowLongPtr( _hSelf, GWL_STYLE, WS_POPUP );
@ -8017,23 +7948,8 @@ void Notepad_plus::fullScreenToggle()
::SetWindowLongPtr( _hSelf, GWL_STYLE, _prevStyles); ::SetWindowLongPtr( _hSelf, GWL_STYLE, _prevStyles);
::SetWindowPos(_hSelf, HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOREDRAW|SWP_NOZORDER); ::SetWindowPos(_hSelf, HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOREDRAW|SWP_NOZORDER);
//Restore the toolbar to its previous state //Show rebar
int cmdToSend = 0; _rebar.display(true);
switch(_prevTBState) {
case TB_HIDE:
cmdToSend = IDM_VIEW_TOOLBAR_HIDE;
break;
case TB_SMALL:
cmdToSend = IDM_VIEW_TOOLBAR_REDUCE;
break;
case TB_LARGE:
cmdToSend = IDM_VIEW_TOOLBAR_ENLARGE;
break;
case TB_STANDARD:
cmdToSend = IDM_VIEW_TOOLBAR_STANDARD;
break;
}
SendMessage(_hSelf, WM_COMMAND, cmdToSend, 0);
if (_winPlace.length) if (_winPlace.length)
{ {
@ -8180,7 +8096,7 @@ void Notepad_plus::getCurrentOpenedFiles(Session & session)
for (size_t i = 0 ; i < _mainEditView.getNbDoc() ; i++) for (size_t i = 0 ; i < _mainEditView.getNbDoc() ; i++)
{ {
const Buffer & buf = _mainEditView.getBufferAt((size_t)i); const Buffer & buf = _mainEditView.getBufferAt((size_t)i);
if (PathFileExists(buf._fullPathName)) if (!Buffer::isUntitled(buf._fullPathName) && PathFileExists(buf._fullPathName))
{ {
string languageName = getLangFromMenu( buf ); string languageName = getLangFromMenu( buf );
const char *langName = languageName.c_str(); const char *langName = languageName.c_str();
@ -8431,9 +8347,3 @@ winVer getWindowsVersion()
return WV_UNKNOWN; return WV_UNKNOWN;
} }

View File

@ -220,7 +220,6 @@ private:
WindowsMenu _windowsMenu; WindowsMenu _windowsMenu;
HMENU _mainMenuHandle; HMENU _mainMenuHandle;
LONG_PTR _prevStyles; LONG_PTR _prevStyles;
toolBarStatusType _prevTBState;
// For FullScreen feature // For FullScreen feature
bool _isfullScreen; bool _isfullScreen;
@ -452,22 +451,6 @@ private:
} }
}; };
int getToolBarState() const {
if (::GetMenuState(_mainMenuHandle, IDM_VIEW_TOOLBAR_HIDE, MF_BYCOMMAND) == MF_CHECKED)
return IDM_VIEW_TOOLBAR_HIDE;
if (::GetMenuState(_mainMenuHandle, IDM_VIEW_TOOLBAR_REDUCE, MF_BYCOMMAND) == MF_CHECKED)
return IDM_VIEW_TOOLBAR_REDUCE;
if (::GetMenuState(_mainMenuHandle, IDM_VIEW_TOOLBAR_ENLARGE, MF_BYCOMMAND) == MF_CHECKED)
return IDM_VIEW_TOOLBAR_ENLARGE;
if (::GetMenuState(_mainMenuHandle, IDM_VIEW_TOOLBAR_STANDARD, MF_BYCOMMAND) == MF_CHECKED)
return IDM_VIEW_TOOLBAR_STANDARD;
return -1;
};
int getFolderMarginStyle() const { int getFolderMarginStyle() const {
if (::GetMenuState(_mainMenuHandle, IDM_VIEW_FOLDERMAGIN_SIMPLE, MF_BYCOMMAND) == MF_CHECKED) if (::GetMenuState(_mainMenuHandle, IDM_VIEW_FOLDERMAGIN_SIMPLE, MF_BYCOMMAND) == MF_CHECKED)
return IDM_VIEW_FOLDERMAGIN_SIMPLE; return IDM_VIEW_FOLDERMAGIN_SIMPLE;
@ -484,10 +467,6 @@ private:
return 0; return 0;
}; };
void checkToolBarMenu(int id2Check) const {
::CheckMenuRadioItem(::GetMenu(_hSelf), IDM_VIEW_TOOLBAR_HIDE, IDM_VIEW_TOOLBAR_STANDARD, id2Check, MF_BYCOMMAND);
};
void checkFolderMarginStyleMenu(int id2Check) const { void checkFolderMarginStyleMenu(int id2Check) const {
::CheckMenuRadioItem(::GetMenu(_hSelf), IDM_VIEW_FOLDERMAGIN_SIMPLE, IDM_VIEW_FOLDERMAGIN_BOX, id2Check, MF_BYCOMMAND); ::CheckMenuRadioItem(::GetMenu(_hSelf), IDM_VIEW_FOLDERMAGIN_SIMPLE, IDM_VIEW_FOLDERMAGIN_BOX, id2Check, MF_BYCOMMAND);
}; };

View File

@ -2029,19 +2029,28 @@ void NppParameters::feedGUIParameters(TiXmlNode *node)
if (!strcmp(nm, "ToolBar")) if (!strcmp(nm, "ToolBar"))
{ {
val = element->Attribute("visible");
if (val)
{
if (!strcmp(val, "no"))
_nppGUI._toolbarShow = false;
else// if (!strcmp(val, "yes"))
_nppGUI._toolbarShow = true;
}
TiXmlNode *n = childNode->FirstChild(); TiXmlNode *n = childNode->FirstChild();
if (n) if (n)
{ {
val = n->Value(); val = n->Value();
if (val) if (val)
{ {
if (!strcmp(val, "hide")) //if (!strcmp(val, "hide"))
_nppGUI._toolBarStatus = TB_HIDE; // _nppGUI._toolBarStatus = TB_HIDE;
else if (!strcmp(val, "small")) //else
if (!strcmp(val, "small"))
_nppGUI._toolBarStatus = TB_SMALL; _nppGUI._toolBarStatus = TB_SMALL;
else if (!strcmp(val, "large")) else if (!strcmp(val, "large"))
_nppGUI._toolBarStatus = TB_LARGE; _nppGUI._toolBarStatus = TB_LARGE;
else if (!strcmp(val, "standard")) else// if (!strcmp(val, "standard")) //assume standard in all other cases
_nppGUI._toolBarStatus = TB_STANDARD; _nppGUI._toolBarStatus = TB_STANDARD;
} }
} }
@ -2983,7 +2992,10 @@ bool NppParameters::writeGUIParams()
if (!strcmp(nm, "ToolBar")) if (!strcmp(nm, "ToolBar"))
{ {
const char *pStr = _nppGUI._toolBarStatus == TB_HIDE?"hide":(_nppGUI._toolBarStatus == TB_SMALL?"small":(_nppGUI._toolBarStatus == TB_STANDARD?"standard":"large")); const char *pStr = (_nppGUI._toolbarShow)?"yes":"no";
element->SetAttribute("visible", pStr);
pStr = _nppGUI._toolBarStatus == TB_SMALL?"small":(_nppGUI._toolBarStatus == TB_STANDARD?"standard":"large");
TiXmlNode *n = childNode->FirstChild(); TiXmlNode *n = childNode->FirstChild();
if (n) if (n)
n->SetValue(pStr); n->SetValue(pStr);
@ -4000,3 +4012,4 @@ void NppParameters::addScintillaModifiedIndex(int index)

View File

@ -516,7 +516,7 @@ struct PrintSettings {
struct NppGUI struct NppGUI
{ {
NppGUI() : _toolBarStatus(TB_LARGE), _statusBarShow(true), \ NppGUI() : _toolBarStatus(TB_LARGE), _toolbarShow(true), _statusBarShow(true), \
_tabStatus(TAB_DRAWTOPBAR | TAB_DRAWINACTIVETAB | TAB_DRAGNDROP),\ _tabStatus(TAB_DRAWTOPBAR | TAB_DRAWINACTIVETAB | TAB_DRAGNDROP),\
_splitterPos(POS_HORIZOTAL), _userDefineDlgStatus(UDD_DOCKED), _tabSize(8),\ _splitterPos(POS_HORIZOTAL), _userDefineDlgStatus(UDD_DOCKED), _tabSize(8),\
_tabReplacedBySpace(false), _fileAutoDetection(cdEnabled), _checkHistoryFiles(true),\ _tabReplacedBySpace(false), _fileAutoDetection(cdEnabled), _checkHistoryFiles(true),\
@ -530,7 +530,8 @@ struct NppGUI
_backupDir[0] = '\0'; _backupDir[0] = '\0';
}; };
toolBarStatusType _toolBarStatus; // small, large ou hide toolBarStatusType _toolBarStatus; // small, large ou standard
bool _toolbarShow;
bool _statusBarShow; // show ou hide bool _statusBarShow; // show ou hide
// 1st bit : draw top bar; // 1st bit : draw top bar;

View File

@ -37,7 +37,7 @@ STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
FONT 8, "MS Shell Dlg", 0, 0, 0x1 FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN BEGIN
GROUPBOX "Tool bar",IDC_TOOLBAR_GB_STATIC,17,5,131,68,BS_CENTER GROUPBOX "Tool bar",IDC_TOOLBAR_GB_STATIC,17,5,131,68,BS_CENTER
CONTROL "Hide",IDC_RADIO_HIDE,"Button",BS_AUTORADIOBUTTON,24,15,94,10 CONTROL "Hide",IDC_CHECK_HIDE,"Button",BS_AUTOCHECKBOX,24,15,94,10
CONTROL "Small icons",IDC_RADIO_SMALLICON,"Button",BS_AUTORADIOBUTTON,24,29,114,10 CONTROL "Small icons",IDC_RADIO_SMALLICON,"Button",BS_AUTORADIOBUTTON,24,29,114,10
CONTROL "Big icons",IDC_RADIO_BIGICON,"Button",BS_AUTORADIOBUTTON,24,43,109,10 CONTROL "Big icons",IDC_RADIO_BIGICON,"Button",BS_AUTORADIOBUTTON,24,43,109,10
CONTROL "Small standard icons",IDC_RADIO_STANDARD,"Button",BS_AUTORADIOBUTTON,24,57,119,10 CONTROL "Small standard icons",IDC_RADIO_STANDARD,"Button",BS_AUTORADIOBUTTON,24,57,119,10

View File

@ -116,23 +116,22 @@ BOOL CALLBACK BarsDlg::run_dlgProc(UINT Message, WPARAM wParam, LPARAM lParam)
const NppGUI & nppGUI = pNppParam->getNppGUI(); const NppGUI & nppGUI = pNppParam->getNppGUI();
toolBarStatusType tbStatus = nppGUI._toolBarStatus; toolBarStatusType tbStatus = nppGUI._toolBarStatus;
int tabBarStatus = nppGUI._tabStatus; int tabBarStatus = nppGUI._tabStatus;
bool showTool = nppGUI._toolbarShow;
bool showStatus = nppGUI._statusBarShow; bool showStatus = nppGUI._statusBarShow;
::SendDlgItemMessage(_hSelf, IDC_CHECK_HIDE, BM_SETCHECK, showTool?BST_UNCHECKED:BST_CHECKED, 0);
int ID2Check = 0; int ID2Check = 0;
switch (tbStatus) switch (tbStatus)
{ {
case TB_HIDE :
ID2Check = IDC_RADIO_HIDE;
break;
case TB_SMALL : case TB_SMALL :
ID2Check = IDC_RADIO_SMALLICON; ID2Check = IDC_RADIO_SMALLICON;
break; break;
case TB_LARGE : case TB_LARGE :
ID2Check = IDC_RADIO_BIGICON; ID2Check = IDC_RADIO_BIGICON;
break; break;
case TB_STANDARD:
default : //TB_STANDARD default :
ID2Check = IDC_RADIO_STANDARD; ID2Check = IDC_RADIO_STANDARD;
} }
::SendDlgItemMessage(_hSelf, ID2Check, BM_SETCHECK, BST_CHECKED, 0); ::SendDlgItemMessage(_hSelf, ID2Check, BM_SETCHECK, BST_CHECKED, 0);
@ -220,7 +219,7 @@ BOOL CALLBACK BarsDlg::run_dlgProc(UINT Message, WPARAM wParam, LPARAM lParam)
::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_DRAWTABBAR_DBCLK2CLOSE, 0); ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_DRAWTABBAR_DBCLK2CLOSE, 0);
return TRUE; return TRUE;
case IDC_RADIO_HIDE : case IDC_CHECK_HIDE :
::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_TOOLBAR_HIDE, 0); ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_TOOLBAR_HIDE, 0);
return TRUE; return TRUE;

View File

@ -23,7 +23,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#define IDD_PREFERENCE_BAR_BOX 6100 //(IDD_PREFERENCE_BOX + 100) #define IDD_PREFERENCE_BAR_BOX 6100 //(IDD_PREFERENCE_BOX + 100)
#define IDC_TOOLBAR_GB_STATIC (IDD_PREFERENCE_BAR_BOX + 1) #define IDC_TOOLBAR_GB_STATIC (IDD_PREFERENCE_BAR_BOX + 1)
#define IDC_RADIO_HIDE (IDD_PREFERENCE_BAR_BOX + 2) #define IDC_CHECK_HIDE (IDD_PREFERENCE_BAR_BOX + 2)
#define IDC_RADIO_SMALLICON (IDD_PREFERENCE_BAR_BOX + 3) #define IDC_RADIO_SMALLICON (IDD_PREFERENCE_BAR_BOX + 3)
#define IDC_RADIO_BIGICON (IDD_PREFERENCE_BAR_BOX + 4) #define IDC_RADIO_BIGICON (IDD_PREFERENCE_BAR_BOX + 4)
#define IDC_RADIO_STANDARD (IDD_PREFERENCE_BAR_BOX + 5) #define IDC_RADIO_STANDARD (IDD_PREFERENCE_BAR_BOX + 5)

View File

@ -19,16 +19,12 @@
#include "ToolBar.h" #include "ToolBar.h"
#include "SysMsg.h" #include "SysMsg.h"
const int WS_TOOLBARSTYLE = WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | TBSTYLE_TOOLTIPS |TBSTYLE_FLAT | CCS_TOP | BTNS_AUTOSIZE | CCS_NOPARENTALIGN | CCS_NORESIZE; const int WS_TOOLBARSTYLE = WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | TBSTYLE_TOOLTIPS |TBSTYLE_FLAT | CCS_TOP | BTNS_AUTOSIZE | CCS_NOPARENTALIGN | CCS_NORESIZE | CCS_NODIVIDER;
bool ToolBar::init( HINSTANCE hInst, HWND hPere, toolBarStatusType type, bool ToolBar::init( HINSTANCE hInst, HWND hPere, toolBarStatusType type,
ToolBarButtonUnit *buttonUnitArray, int arraySize) ToolBarButtonUnit *buttonUnitArray, int arraySize)
{ {
Window::init(hInst, hPere); Window::init(hInst, hPere);
if (type == TB_HIDE) {
setState(TB_STANDARD); //assume standard
_visible = false; //but set visibility to false
}
_state = type; _state = type;
int iconSize = (_state == TB_LARGE?32:16); int iconSize = (_state == TB_LARGE?32:16);
@ -179,8 +175,6 @@ void ToolBar::reset(bool create)
WORD btnSize = (_state == TB_LARGE?32:16); WORD btnSize = (_state == TB_LARGE?32:16);
::SendMessage(_hSelf, TB_SETBUTTONSIZE , (WPARAM)0, (LPARAM)MAKELONG (btnSize, btnSize)); ::SendMessage(_hSelf, TB_SETBUTTONSIZE , (WPARAM)0, (LPARAM)MAKELONG (btnSize, btnSize));
::SendMessage(_hSelf, TB_ADDBUTTONS, (WPARAM)nrBtnToAdd, (LPARAM)_pTBB); ::SendMessage(_hSelf, TB_ADDBUTTONS, (WPARAM)nrBtnToAdd, (LPARAM)_pTBB);
if (_visible)
Window::display(true);
} }
::SendMessage(_hSelf, TB_AUTOSIZE, 0, 0); ::SendMessage(_hSelf, TB_AUTOSIZE, 0, 0);
} }
@ -210,7 +204,6 @@ void ReBar::init(HINSTANCE hInst, HWND hPere, ToolBar *pToolBar)
RBS_BANDBORDERS | CCS_NODIVIDER | CCS_NOPARENTALIGN, RBS_BANDBORDERS | CCS_NODIVIDER | CCS_NOPARENTALIGN,
0,0,0,0, _hParent, NULL, _hInst, NULL); 0,0,0,0, _hParent, NULL, _hInst, NULL);
ZeroMemory(&_rbi, sizeof(REBARINFO)); ZeroMemory(&_rbi, sizeof(REBARINFO));
_rbi.cbSize = sizeof(REBARINFO); _rbi.cbSize = sizeof(REBARINFO);
_rbi.fMask = 0; _rbi.fMask = 0;
@ -223,26 +216,58 @@ void ReBar::init(HINSTANCE hInst, HWND hPere, ToolBar *pToolBar)
ZeroMemory(&_rbBand, sizeof(REBARBANDINFO)); ZeroMemory(&_rbBand, sizeof(REBARBANDINFO));
_rbBand.cbSize = sizeof(REBARBANDINFO); _rbBand.cbSize = sizeof(REBARBANDINFO);
_rbBand.fMask = RBBIM_STYLE | RBBIM_CHILD | RBBIM_CHILDSIZE | _rbBand.fMask = RBBIM_STYLE | RBBIM_CHILD | RBBIM_CHILDSIZE |
RBBIM_SIZE | RBBIM_IDEALSIZE; RBBIM_SIZE | RBBIM_IDEALSIZE | RBBIM_ID;
_rbBand.fStyle = 0;//RBBS_USECHEVRON;
_rbBand.fStyle = RBBS_VARIABLEHEIGHT;// | RBBS_USECHEVRON;
_rbBand.hwndChild = _pToolBar->getHSelf();
_rbBand.wID = 0; //ID zero for toolbar
_rbBand.cxMinChild = 0;
_rbBand.cyMinChild = HIWORD(size) + HIWORD(padding);
_rbBand.cyMaxChild = HIWORD(size) + HIWORD(padding);
_rbBand.cyIntegral = REBAR_BAR_TOOLBAR;
_rbBand.cxIdeal = _rbBand.cx = _pToolBar->getWidth();
_rbBand.hwndChild = _pToolBar->getHSelf();
_rbBand.cxMinChild = 0;
_rbBand.cyMinChild = HIWORD(size) + HIWORD(padding);
_rbBand.cyMaxChild = HIWORD(size) + HIWORD(padding);
_rbBand.cyIntegral = 1;
_rbBand.cxIdeal = _rbBand.cx = _pToolBar->getWidth();
::SendMessage(_hSelf, RB_INSERTBAND, (WPARAM)0, (LPARAM)&_rbBand); ::SendMessage(_hSelf, RB_INSERTBAND, (WPARAM)0, (LPARAM)&_rbBand);
} }
void ReBar::reNew() { void ReBar::reNew() { //reNew is for toolbar only
int dwBtnSize = SendMessage(_pToolBar->getHSelf(), TB_GETBUTTONSIZE, 0,0); int index = (int)SendMessage(_hSelf, RB_IDTOINDEX, (WPARAM)REBAR_BAR_TOOLBAR, 0);
DWORD size = (DWORD)SendMessage(_pToolBar->getHSelf(), TB_GETBUTTONSIZE, 0, 0);
DWORD padding = (DWORD)SendMessage(_pToolBar->getHSelf(), TB_GETPADDING, 0,0);
_rbBand.hwndChild = _pToolBar->getHSelf(); _rbBand.fMask = RBBIM_CHILD | RBBIM_SIZE | RBBIM_CHILDSIZE | RBBIM_IDEALSIZE;
_rbBand.cyMinChild = HIWORD(dwBtnSize); _rbBand.hwndChild = _pToolBar->getHSelf();
_rbBand.cyMaxChild = HIWORD(dwBtnSize); _rbBand.cyMinChild = HIWORD(size) + HIWORD(padding);
_rbBand.cxIdeal = _pToolBar->getWidth(); _rbBand.cyMaxChild = HIWORD(size) + HIWORD(padding);
::SendMessage(_hSelf, RB_SETBANDINFO, (WPARAM)0, (LPARAM)&_rbBand); _rbBand.cxIdeal = _rbBand.cx = _pToolBar->getWidth();
::SendMessage(_hSelf, RB_SETBANDINFO, (WPARAM)index, (LPARAM)&_rbBand);
}; };
void ReBar::setIDVisible(int id, bool show) {
int index = (int)SendMessage(_hSelf, RB_IDTOINDEX, (WPARAM)id, 0);
if (index == -1 )
return; //error
REBARBANDINFO rbBand;
rbBand.cbSize = sizeof(rbBand);
rbBand.fMask = RBBIM_STYLE;
::SendMessage(_hSelf, RB_GETBANDINFO, (WPARAM)index, (LPARAM)&rbBand);
if (show)
rbBand.fStyle &= (RBBS_HIDDEN ^ -1);
else
rbBand.fStyle |= RBBS_HIDDEN;
::SendMessage(_hSelf, RB_SETBANDINFO, (WPARAM)index, (LPARAM)&rbBand);
}
bool ReBar::getIDVisible(int id) {
int index = (int)SendMessage(_hSelf, RB_IDTOINDEX, (WPARAM)id, 0);
if (index == -1 )
return false; //error
REBARBANDINFO rbBand;
rbBand.cbSize = sizeof(rbBand);
rbBand.fMask = RBBIM_STYLE;
::SendMessage(_hSelf, RB_GETBANDINFO, (WPARAM)index, (LPARAM)&rbBand);
return ((rbBand.fStyle & RBBS_HIDDEN) == 0);
}

View File

@ -22,7 +22,8 @@
#include "resource.h" #include "resource.h"
#include "Notepad_plus_msgs.h" #include "Notepad_plus_msgs.h"
#define REBAR_BAR_TOOLBAR 0
//#define REBAR_BAR_SEARCH 1
#ifndef _WIN32_IE #ifndef _WIN32_IE
#define _WIN32_IE 0x0600 #define _WIN32_IE 0x0600
@ -32,20 +33,7 @@
#include <vector> #include <vector>
using namespace std; using namespace std;
enum toolBarStatusType {/*TB_HIDE, */TB_SMALL, TB_LARGE, TB_STANDARD};
#ifndef TB_SETIMAGELIST
#define TB_SETIMAGELIST (WM_USER+48)
#endif
#ifndef TB_SETHOTIMAGELIST
#define TB_SETHOTIMAGELIST (WM_USER+52)
#endif
#ifndef TB_SETDISABLEDIMAGELIST
#define TB_SETDISABLEDIMAGELIST (WM_USER+54)
#endif
enum toolBarStatusType {TB_HIDE, TB_SMALL, TB_LARGE, TB_STANDARD};
#include "ImageListSet.h" #include "ImageListSet.h"
@ -60,7 +48,7 @@ typedef struct {
class ToolBar : public Window class ToolBar : public Window
{ {
public : public :
ToolBar():Window(), _pTBB(NULL), _nrButtons(0), _nrDynButtons(0), _nrTotalButtons(0), _nrCurrentButtons(0), _visible(true) {}; ToolBar():Window(), _pTBB(NULL), _nrButtons(0), _nrDynButtons(0), _nrTotalButtons(0), _nrCurrentButtons(0) {};
virtual ~ToolBar(){}; virtual ~ToolBar(){};
virtual bool init(HINSTANCE hInst, HWND hPere, toolBarStatusType type, virtual bool init(HINSTANCE hInst, HWND hPere, toolBarStatusType type,
@ -76,12 +64,6 @@ public :
::SendMessage(_hSelf, TB_ENABLEBUTTON, cmdID, (LPARAM)doEnable); ::SendMessage(_hSelf, TB_ENABLEBUTTON, cmdID, (LPARAM)doEnable);
}; };
int getHeight() const {
if (!::IsWindowVisible(_hSelf))
return 0;
return Window::getHeight();
};
int getWidth() const; int getWidth() const;
void reduce() { void reduce() {
@ -112,16 +94,6 @@ public :
reset(recreate); //must recreate toolbar if setting to internal bitmaps reset(recreate); //must recreate toolbar if setting to internal bitmaps
Window::redraw(); Window::redraw();
} }
void hide() {
if (getState() == TB_HIDE)
return;
display(false);
}
void display(bool toShow = true) {
Window::display(toShow);
_visible = toShow;
};
bool getCheckState(int ID2Check) const { bool getCheckState(int ID2Check) const {
return bool(::SendMessage(_hSelf, TB_GETSTATE, (WPARAM)ID2Check, 0) & TBSTATE_CHECKED); return bool(::SendMessage(_hSelf, TB_GETSTATE, (WPARAM)ID2Check, 0) & TBSTATE_CHECKED);
@ -132,8 +104,7 @@ public :
}; };
toolBarStatusType getState() const { toolBarStatusType getState() const {
bool test = _visible; return _state;
return _visible?_state:TB_HIDE;
}; };
bool changeIcons(int whichLst, int iconIndex, const char *iconLocation){ bool changeIcons(int whichLst, int iconIndex, const char *iconLocation){
@ -146,7 +117,6 @@ private :
TBBUTTON *_pTBB; TBBUTTON *_pTBB;
ToolBarIcons _toolBarIcons; ToolBarIcons _toolBarIcons;
toolBarStatusType _state; toolBarStatusType _state;
bool _visible;
vector<tDynamicList> _vDynBtnReg; vector<tDynamicList> _vDynBtnReg;
size_t _nrButtons; size_t _nrButtons;
size_t _nrDynButtons; size_t _nrDynButtons;
@ -166,12 +136,7 @@ private :
void reset(bool create = false); void reset(bool create = false);
void setState(toolBarStatusType state) { void setState(toolBarStatusType state) {
if(state == TB_HIDE) { //do not set the state to something else _state = state;
_visible = false;
} else {
_visible = true;
_state = state;
}
} }
}; };
@ -189,6 +154,15 @@ public :
void init(HINSTANCE hInst, HWND hPere, ToolBar *pToolBar); void init(HINSTANCE hInst, HWND hPere, ToolBar *pToolBar);
void reNew(); void reNew();
int getHeight() const {
if (::IsWindowVisible(_hSelf))
return (int)(UINT)SendMessage(_hSelf, RB_GETBARHEIGHT, 0, 0);
return 0;
};
void setIDVisible(int id, bool show);
bool getIDVisible(int id);
private: private:
REBARINFO _rbi; REBARINFO _rbi;
REBARBANDINFO _rbBand; REBARBANDINFO _rbBand;

View File

@ -72,7 +72,9 @@ public:
virtual int getHeight() const { virtual int getHeight() const {
RECT rc; RECT rc;
::GetClientRect(_hSelf, &rc); ::GetClientRect(_hSelf, &rc);
return (rc.bottom - rc.top); if (::IsWindowVisible(_hSelf) == TRUE)
return (rc.bottom - rc.top);
return 0;
}; };
virtual bool isVisible() const { virtual bool isVisible() const {
@ -112,3 +114,4 @@ protected:
#endif //WINDOW_CONTROL_H #endif //WINDOW_CONTROL_H