[NEW_FEATURE] Add new look and feel of Docking container.

git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository@105 f5eea248-9336-0410-98b8-ebc06183d4e3
This commit is contained in:
donho 2008-01-16 19:54:53 +00:00
parent 3412c5ce5d
commit 9768d7f0a5
9 changed files with 585 additions and 290 deletions

View File

@ -1393,7 +1393,8 @@ string Notepad_plus::getLangDesc(LangType langType, bool shortDesc)
"Haskell", "Haskell", "Haskell", "Haskell",
"Inno", "Inno Setup script", "Inno", "Inno Setup script",
"Internal Search", "Internal Search", "Internal Search", "Internal Search",
"CMAKEFILE", "CMAKEFILE" "CMAKEFILE", "CMAKEFILE",
"YAML", "YAML Ain't Markup Language"
}; };
int index = (int(langType)) * 2 + (shortDesc?0:1); int index = (int(langType)) * 2 + (shortDesc?0:1);

File diff suppressed because it is too large Load Diff

View File

@ -36,6 +36,8 @@ using namespace std;
#define CHILD_STYLES (WS_CHILD|WS_VISIBLE) #define CHILD_STYLES (WS_CHILD|WS_VISIBLE)
#define CHILD_EXSTYLES (0x00000000L) #define CHILD_EXSTYLES (0x00000000L)
#define MIN_TABWIDTH 24
enum eMousePos { enum eMousePos {
posOutside, posOutside,
@ -43,6 +45,14 @@ enum eMousePos {
posClose posClose
}; };
/* some fix modify values for GUI */
#define HIGH_CAPTION 18
#define HIGH_TAB 20
#define CAPTION_GAP 2
#define CLOSEBTN_POS_LEFT 3
#define CLOSEBTN_POS_TOP 3
class DockingCont : public StaticDialog class DockingCont : public StaticDialog
@ -76,7 +86,7 @@ public:
}; };
tTbData* createToolbar(tTbData data, Window **ppWin); tTbData* createToolbar(tTbData data, Window **ppWin);
tTbData destroyToolbar(tTbData data); void removeToolbar(tTbData data);
tTbData* findToolbarByWnd(HWND hClient); tTbData* findToolbarByWnd(HWND hClient);
tTbData* findToolbarByName(char* pszName); tTbData* findToolbarByName(char* pszName);
@ -95,8 +105,8 @@ public:
}; };
void setActiveTb(tTbData* pTbData); void setActiveTb(tTbData* pTbData);
void setActiveTb(int iItem); void setActiveTb(INT iItem);
int getActiveTb(void); INT getActiveTb(void);
tTbData* getDataOfActiveTb(void); tTbData* getDataOfActiveTb(void);
vector<tTbData *> getDataOfAllTb(void) { vector<tTbData *> getDataOfAllTb(void) {
return _vTbData; return _vTbData;
@ -110,7 +120,7 @@ public:
return _isFloating; return _isFloating;
} }
int getElementCnt(void) { INT getElementCnt(void) {
return _vTbData.size(); return _vTbData.size();
} }
@ -128,8 +138,18 @@ public:
void focusClient(void); void focusClient(void);
void SetActive(BOOL bState) {
_isActive = bState;
updateCaption();
};
void setTabStyle(const BOOL & bDrawOgLine) {
_bDrawOgLine = bDrawOgLine;
RedrawWindow(_hContTab, NULL, NULL, 0);
};
virtual void destroy() { virtual void destroy() {
for (int iTb = _vTbData.size(); iTb > 0; iTb--) for (INT iTb = _vTbData.size(); iTb > 0; iTb--)
{ {
delete _vTbData[iTb-1]; delete _vTbData[iTb-1];
} }
@ -158,23 +178,27 @@ protected :
void onSize(void); void onSize(void);
/* functions for caption handling and drawing */ /* functions for caption handling and drawing */
eMousePos isInRect(HWND hwnd, int x, int y); eMousePos isInRect(HWND hwnd, INT x, INT y);
/* handling of toolbars */ /* handling of toolbars */
void doClose(void); void doClose(void);
/* return new item */ /* return new item */
int SearchPosInTab(tTbData* pTbData); INT SearchPosInTab(tTbData* pTbData);
void SelectTab(int item); void SelectTab(INT iTab);
int hideToolbar(tTbData* pTbData); INT hideToolbar(tTbData* pTbData, BOOL hideClient = TRUE);
void viewToolbar(tTbData *pTbData); void viewToolbar(tTbData *pTbData);
INT removeTab(tTbData* pTbData) {
return hideToolbar(pTbData, FALSE);
};
void updateCaption(void); void updateCaption(void);
LPARAM NotifyParent(UINT message); LPARAM NotifyParent(UINT message);
private: private:
/* handles */ /* handles */
BOOL _isActive;
bool _isFloating; bool _isFloating;
HWND _hCaption; HWND _hCaption;
HWND _hContTab; HWND _hContTab;
@ -190,6 +214,9 @@ private:
BOOL _isMouseOver; BOOL _isMouseOver;
RECT _rcCaption; RECT _rcCaption;
/* tab style */
BOOL _bDrawOgLine;
/* Important value for DlgMoving class */ /* Important value for DlgMoving class */
BOOL _dragFromTab; BOOL _dragFromTab;
@ -204,6 +231,14 @@ private:
BOOL _beginDrag; BOOL _beginDrag;
HIMAGELIST _hImageList; HIMAGELIST _hImageList;
/* Is tooltip */
BOOL _bTabTTHover;
INT _iLastHovered;
BOOL _bCaptionTT;
BOOL _bCapTTHover;
eMousePos _hoverMPos;
/* data of added windows */ /* data of added windows */
vector<tTbData *> _vTbData; vector<tTbData *> _vTbData;
}; };

View File

@ -19,12 +19,32 @@
#include "DockingCont.h" #include "DockingCont.h"
#include "DockingManager.h" #include "DockingManager.h"
#include "Gripper.h" #include "Gripper.h"
#include "windows.h" #include <Oleacc.h>
#include <windows.h>
BOOL DockingManager::_isRegistered = FALSE; BOOL DockingManager::_isRegistered = FALSE;
static HWND hWndServer = NULL;
static HWINEVENTHOOK gWinEvtHook = NULL;
/* Callback function that handles events */
void CALLBACK HandleWinEvent(HWINEVENTHOOK hook, DWORD event, HWND hwnd,
LONG idObject, LONG idChild,
DWORD dwEventThread, DWORD dwmsEventTime)
{
IAccessible* pAcc = NULL;
VARIANT varChild;
HRESULT hr = AccessibleObjectFromEvent(hwnd, idObject, idChild, &pAcc, &varChild);
if ((hr == S_OK) && (pAcc != NULL))
{
if (event == EVENT_OBJECT_FOCUS)
{
::SendMessage(hWndServer, DMM_LBUTTONUP, 0, (LPARAM)hwnd);
}
pAcc->Release();
}
}
DockingManager::DockingManager() DockingManager::DockingManager()
{ {
@ -94,6 +114,19 @@ void DockingManager::init(HINSTANCE hInst, HWND hWnd, Window ** ppWin)
throw int(777); throw int(777);
} }
/* register window event hooking */
hWndServer = _hSelf;
CoInitialize(NULL);
gWinEvtHook = SetWinEventHook(
EVENT_OBJECT_FOCUS, EVENT_OBJECT_FOCUS, NULL,
HandleWinEvent, 0, 0, WINEVENT_OUTOFCONTEXT);
if (!gWinEvtHook)
{
systemMessage("System Err");
throw int(1000);
}
setClientWnd(ppWin); setClientWnd(ppWin);
/* create docking container */ /* create docking container */
@ -171,8 +204,26 @@ LRESULT DockingManager::runProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM l
_vContainer[i-1]->destroy(); _vContainer[i-1]->destroy();
delete _vContainer[i-1]; delete _vContainer[i-1];
} }
/* unregister window event hooking */
UnhookWinEvent(gWinEvtHook);
CoUninitialize();
break; break;
} }
case DMM_LBUTTONUP:
{
if (::GetActiveWindow() != _hParent)
break;
/* set respective activate state */
for (int i = 0; i < DOCKCONT_MAX; i++)
{
_vContainer[i]->SetActive(
IsChild(_vContainer[i]->getHSelf(), (HWND)lParam) &&
(::GetFocus() == (HWND)lParam));
}
return TRUE;
}
case DMM_MOVE: case DMM_MOVE:
{ {
Gripper* pGripper = new Gripper; Gripper* pGripper = new Gripper;
@ -579,9 +630,6 @@ DockingCont* DockingManager::toggleActiveTb(DockingCont* pContSrc, UINT message,
TbData.rcFloat = *prcFloat; TbData.rcFloat = *prcFloat;
} }
/* remove toolbar from anywhere */
TbData = _vContainer[iContSrc]->destroyToolbar(TbData);
if ((isCont == FALSE) || (bNew == TRUE)) if ((isCont == FALSE) || (bNew == TRUE))
{ {
/* find an empty container */ /* find an empty container */
@ -626,6 +674,9 @@ DockingCont* DockingManager::toggleActiveTb(DockingCont* pContSrc, UINT message,
/* notify client app */ /* notify client app */
SendNotify(TbData.hClient, MAKELONG(message==DMM_DOCK?DMN_DOCK:DMN_FLOAT, GetContainer(pContTgt))); SendNotify(TbData.hClient, MAKELONG(message==DMM_DOCK?DMN_DOCK:DMN_FLOAT, GetContainer(pContTgt)));
/* remove toolbar from source */
_vContainer[iContSrc]->removeToolbar(TbData);
return pContTgt; return pContTgt;
} }
@ -654,9 +705,6 @@ DockingCont* DockingManager::toggleVisTb(DockingCont* pContSrc, UINT message, LP
TbData.rcFloat = *prcFloat; TbData.rcFloat = *prcFloat;
} }
/* remove toolbar from anywhere */
TbData = _vContainer[iContSrc]->destroyToolbar(TbData);
if (isCont == FALSE) if (isCont == FALSE)
{ {
/* create new container */ /* create new container */
@ -682,6 +730,9 @@ DockingCont* DockingManager::toggleVisTb(DockingCont* pContSrc, UINT message, LP
} }
SendNotify(TbData.hClient, MAKELONG(message==DMM_DOCK?DMN_DOCK:DMN_FLOAT, GetContainer(pContTgt))); SendNotify(TbData.hClient, MAKELONG(message==DMM_DOCK?DMN_DOCK:DMN_FLOAT, GetContainer(pContTgt)));
/* remove toolbar from anywhere */
_vContainer[iContSrc]->removeToolbar(TbData);
} }
_vContainer[iContPrev]->setActiveTb(pTbData); _vContainer[iContPrev]->setActiveTb(pTbData);
@ -718,9 +769,6 @@ void DockingManager::toggleTb(DockingCont* pContSrc, DockingCont* pContTgt, tTbD
int iContSrc = GetContainer(pContSrc); int iContSrc = GetContainer(pContSrc);
int iContTgt = GetContainer(pContTgt); int iContTgt = GetContainer(pContTgt);
/* remove toolbar from anywhere */
TbData = _vContainer[iContSrc]->destroyToolbar(TbData);
/* test if container state changes from docking to floating or vice versa */ /* test if container state changes from docking to floating or vice versa */
if (((iContSrc < DOCKCONT_MAX) && (iContTgt >= DOCKCONT_MAX)) || if (((iContSrc < DOCKCONT_MAX) && (iContTgt >= DOCKCONT_MAX)) ||
((iContSrc >= DOCKCONT_MAX) && (iContTgt < DOCKCONT_MAX))) ((iContSrc >= DOCKCONT_MAX) && (iContTgt < DOCKCONT_MAX)))
@ -735,7 +783,11 @@ void DockingManager::toggleTb(DockingCont* pContSrc, DockingCont* pContTgt, tTbD
else else
SendNotify(TbData.hClient, MAKELONG(DMN_FLOAT, iContTgt)); SendNotify(TbData.hClient, MAKELONG(DMN_FLOAT, iContTgt));
/* create new toolbar */
pContTgt->createToolbar(TbData, _ppMainWindow); pContTgt->createToolbar(TbData, _ppMainWindow);
/* remove toolbar from source */
_vContainer[iContSrc]->removeToolbar(TbData);
} }
BOOL DockingManager::ContExists(size_t iCont) BOOL DockingManager::ContExists(size_t iCont)

View File

@ -134,6 +134,11 @@ public :
_vContainer[CONT_BOTTOM]->setCaptionTop(captionOnTop); _vContainer[CONT_BOTTOM]->setCaptionTop(captionOnTop);
}; };
void setTabStyle(BOOL orangeLine) {
for (size_t i = 0; i < _vContainer.size(); i++)
_vContainer[i]->setTabStyle(orangeLine);
};
int getDockedContSize(int iCont) int getDockedContSize(int iCont)
{ {
if ((iCont == CONT_TOP) || (iCont == CONT_BOTTOM)) if ((iCont == CONT_TOP) || (iCont == CONT_BOTTOM))

View File

@ -523,6 +523,7 @@ void Gripper::doTabReordering(POINT pt)
/* insert new entry when mouse doesn't point to current hovered tab */ /* insert new entry when mouse doesn't point to current hovered tab */
if ((_hTab != hTabOld) || (_iItem != iItemOld)) if ((_hTab != hTabOld) || (_iItem != iItemOld))
{ {
_tcItem.mask = TCIF_PARAM | (_hTab == _hTabSource ? TCIF_TEXT : 0);
::SendMessage(_hTab, TCM_INSERTITEM, _iItem, (LPARAM)&_tcItem); ::SendMessage(_hTab, TCM_INSERTITEM, _iItem, (LPARAM)&_tcItem);
} }

View File

@ -26,6 +26,7 @@
#define DMM_DROPDATA (DMM_MSG + 10) #define DMM_DROPDATA (DMM_MSG + 10)
#define DMM_MOVE_SPLITTER (DMM_MSG + 11) #define DMM_MOVE_SPLITTER (DMM_MSG + 11)
#define DMM_CANCEL_MOVE (DMM_MSG + 12) #define DMM_CANCEL_MOVE (DMM_MSG + 12)
#define DMM_LBUTTONUP (DMM_MSG + 13)
#define DMN_FIRST 1050 #define DMN_FIRST 1050
#define DMN_CLOSE (DMN_FIRST + 1) #define DMN_CLOSE (DMN_FIRST + 1)

View File

@ -155,7 +155,7 @@
/> />
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalDependencies="comctl32.lib shlwapi.lib shell32.lib odbc32.lib odbccp32.lib" AdditionalDependencies="comctl32.lib shlwapi.lib shell32.lib odbc32.lib odbccp32.lib Oleacc.lib"
ShowProgress="2" ShowProgress="2"
OutputFile="$(OutDir)/notepad++.exe" OutputFile="$(OutDir)/notepad++.exe"
Version="1.0" Version="1.0"
@ -375,6 +375,10 @@
RelativePath="..\src\WinControls\ToolBar\ToolBar.cpp" RelativePath="..\src\WinControls\ToolBar\ToolBar.cpp"
> >
</File> </File>
<File
RelativePath="..\src\WinControls\ToolTip\ToolTip.cpp"
>
</File>
<File <File
RelativePath="..\src\WinControls\TrayIcon\trayIconControler.cpp" RelativePath="..\src\WinControls\TrayIcon\trayIconControler.cpp"
> >
@ -660,6 +664,10 @@
RelativePath="..\src\WinControls\ToolBar\ToolBar.h" RelativePath="..\src\WinControls\ToolBar\ToolBar.h"
> >
</File> </File>
<File
RelativePath="..\src\WinControls\ToolTip\ToolTip.h"
>
</File>
<File <File
RelativePath="..\src\WinControls\TrayIcon\trayIconControler.h" RelativePath="..\src\WinControls\TrayIcon\trayIconControler.h"
> >