[ENHANCE] Enhance Project Manager.
git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository/trunk@806 f5eea248-9336-0410-98b8-ebc06183d4e3
This commit is contained in:
parent
ede0a41d78
commit
bf93a79886
|
@ -60,6 +60,12 @@ BOOL CALLBACK ProjectPanel::run_dlgProc(UINT message, WPARAM wParam, LPARAM lPar
|
||||||
showContextMenu(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
|
showContextMenu(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
|
case WM_COMMAND:
|
||||||
|
{
|
||||||
|
popupMenuCmd(LOWORD(wParam));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case WM_DESTROY:
|
case WM_DESTROY:
|
||||||
{
|
{
|
||||||
//_fileListView.destroy();
|
//_fileListView.destroy();
|
||||||
|
@ -127,10 +133,10 @@ void ProjectPanel::notified(LPNMHDR notification)
|
||||||
{
|
{
|
||||||
if((notification->hwndFrom == _treeView.getHSelf()))
|
if((notification->hwndFrom == _treeView.getHSelf()))
|
||||||
{
|
{
|
||||||
TCHAR text_buffer[MAX_PATH];
|
TCHAR textBuffer[MAX_PATH];
|
||||||
TVITEM tvItem;
|
TVITEM tvItem;
|
||||||
tvItem.mask = TVIF_TEXT | TVIF_PARAM;
|
tvItem.mask = TVIF_TEXT | TVIF_PARAM;
|
||||||
tvItem.pszText = text_buffer;
|
tvItem.pszText = textBuffer;
|
||||||
tvItem.cchTextMax = MAX_PATH;
|
tvItem.cchTextMax = MAX_PATH;
|
||||||
|
|
||||||
switch (notification->code)
|
switch (notification->code)
|
||||||
|
@ -148,7 +154,40 @@ void ProjectPanel::notified(LPNMHDR notification)
|
||||||
case TVN_ENDLABELEDIT:
|
case TVN_ENDLABELEDIT:
|
||||||
{
|
{
|
||||||
LPNMTVDISPINFO tvnotif = (LPNMTVDISPINFO)notification;
|
LPNMTVDISPINFO tvnotif = (LPNMTVDISPINFO)notification;
|
||||||
printStr(tvnotif->item.pszText);
|
if (!tvnotif->item.pszText)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Processing for only File case
|
||||||
|
if (tvnotif->item.lParam)
|
||||||
|
{
|
||||||
|
// Get the old label
|
||||||
|
tvItem.hItem = TreeView_GetSelection(_treeView.getHSelf());
|
||||||
|
::SendMessage(_treeView.getHSelf(), TVM_GETITEM, 0,(LPARAM)&tvItem);
|
||||||
|
size_t len = lstrlen(tvItem.pszText);
|
||||||
|
|
||||||
|
// Find the position of old label in File path
|
||||||
|
generic_string *filePath = (generic_string *)tvnotif->item.lParam;
|
||||||
|
size_t found = filePath->rfind(tvItem.pszText);
|
||||||
|
|
||||||
|
// If found the old label, replace it with the modified one
|
||||||
|
if (found != generic_string::npos)
|
||||||
|
filePath->replace(found, len, tvnotif->item.pszText);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// For File, Folder and Project
|
||||||
|
::SendMessage(_treeView.getHSelf(), TVM_SETITEM, 0,(LPARAM)(&(tvnotif->item)));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TVN_GETINFOTIP:
|
||||||
|
{
|
||||||
|
LPNMTVGETINFOTIP lpGetInfoTip = (LPNMTVGETINFOTIP)notification;
|
||||||
|
generic_string *str = (generic_string *)lpGetInfoTip->lParam;
|
||||||
|
if (!str)
|
||||||
|
return;
|
||||||
|
lpGetInfoTip->pszText = (LPTSTR)str->c_str();
|
||||||
|
lpGetInfoTip->cchTextMax = str->size();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -175,55 +214,83 @@ void ProjectPanel::notified(LPNMHDR notification)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/*
|
|
||||||
case NM_RCLICK:
|
|
||||||
{
|
|
||||||
//printStr(TEXT("right click"));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProjectPanel::showContextMenu(int x, int y)
|
void ProjectPanel::showContextMenu(int x, int y)
|
||||||
{
|
{
|
||||||
TCHAR text_buffer[MAX_PATH];
|
//TCHAR textBuffer[MAX_PATH];
|
||||||
TVHITTESTINFO tv_hit_info;
|
TVHITTESTINFO tvHitInfo;
|
||||||
HTREEITEM hTreeItem;
|
HTREEITEM hTreeItem;
|
||||||
TVITEM tv_item;
|
|
||||||
|
|
||||||
// Detect if the given position is on the element TVITEM
|
// Detect if the given position is on the element TVITEM
|
||||||
tv_hit_info.pt.x = x;
|
tvHitInfo.pt.x = x;
|
||||||
tv_hit_info.pt.y = y;
|
tvHitInfo.pt.y = y;
|
||||||
tv_hit_info.flags = 0;
|
tvHitInfo.flags = 0;
|
||||||
ScreenToClient(_treeView.getHSelf(), &(tv_hit_info.pt));
|
ScreenToClient(_treeView.getHSelf(), &(tvHitInfo.pt));
|
||||||
hTreeItem = TreeView_HitTest(_treeView.getHSelf(),&tv_hit_info);
|
hTreeItem = TreeView_HitTest(_treeView.getHSelf(), &tvHitInfo);
|
||||||
|
|
||||||
if(tv_hit_info.hItem != NULL)
|
if(tvHitInfo.hItem != NULL)
|
||||||
{
|
{
|
||||||
// get clicked item info
|
// Make item selected
|
||||||
tv_item.hItem = tv_hit_info.hItem;
|
TreeView_SelectItem(_treeView.getHSelf(), tvHitInfo.hItem);
|
||||||
tv_item.mask = TVIF_TEXT | TVIF_PARAM;
|
|
||||||
tv_item.pszText = text_buffer;
|
|
||||||
tv_item.cchTextMax = MAX_PATH;
|
|
||||||
SendMessage(_treeView.getHSelf(), TVM_GETITEM, 0,(LPARAM)&tv_item);
|
|
||||||
|
|
||||||
/*
|
// get clicked item info
|
||||||
// Display dynamique menu
|
TVITEM tvItem;
|
||||||
if(tv_item.lParam == DOMAIN_LEVEL)
|
tvItem.hItem = tvHitInfo.hItem;
|
||||||
|
tvItem.mask = /*TVIF_TEXT | TVIF_PARAM |*/ TVIF_IMAGE;
|
||||||
|
//tvItem.pszText = textBuffer;
|
||||||
|
//tvItem.cchTextMax = MAX_PATH;
|
||||||
|
SendMessage(_treeView.getHSelf(), TVM_GETITEM, 0,(LPARAM)&tvItem);
|
||||||
|
//printStr(tvItem.pszText);
|
||||||
|
|
||||||
|
HMENU hMenu = NULL;
|
||||||
|
// Root
|
||||||
|
if (tvItem.iImage == INDEX_PROJECT_ROOT)
|
||||||
{
|
{
|
||||||
lstrcpy(window_main->right_clicked_label,tv_item.pszText);
|
hMenu = _hRootMenu;
|
||||||
window_main->right_clicked_node_type = DOMAIN_LEVEL;
|
|
||||||
TrackPopupMenu(window_main->hMenu_domain, TPM_LEFTALIGN, x, y, 0, window_main->hwndMain, NULL);
|
|
||||||
}
|
}
|
||||||
else if(tv_item.lParam == SERVER_LEVEL)
|
// Folder
|
||||||
|
else if (tvItem.lParam == NULL)
|
||||||
{
|
{
|
||||||
lstrcpy(window_main->right_clicked_label,tv_item.pszText);
|
hMenu = _hFolderMenu;
|
||||||
window_main->right_clicked_node_type = SERVER_LEVEL;
|
|
||||||
TrackPopupMenu(window_main->hMenu_server, TPM_LEFTALIGN, x, y, 0, window_main->hwndMain, NULL);
|
|
||||||
}
|
}
|
||||||
*/
|
// File
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hMenu = _hFileMenu;
|
||||||
|
}
|
||||||
|
TrackPopupMenu(hMenu, TPM_LEFTALIGN, x, y, 0, _hSelf, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ProjectPanel::popupMenuCmd(int cmdID)
|
||||||
|
{
|
||||||
|
// get selected item handle
|
||||||
|
HTREEITEM hTreeItem = TreeView_GetSelection(_treeView.getHSelf());
|
||||||
|
if (!hTreeItem)
|
||||||
|
return;
|
||||||
|
/*
|
||||||
|
TVITEM tvItem;
|
||||||
|
tvItem.hItem = hTreeItem;
|
||||||
|
tvItem.mask = TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE;
|
||||||
|
//tvItem.pszText = textBuffer;
|
||||||
|
//tvItem.cchTextMax = MAX_PATH;
|
||||||
|
SendMessage(_treeView.getHSelf(), TVM_GETITEM, 0,(LPARAM)&tvItem);
|
||||||
|
*/
|
||||||
|
switch (cmdID)
|
||||||
|
{
|
||||||
|
case IDM_PROJECT_RENAME :
|
||||||
|
TreeView_EditLabel(_treeView.getHSelf(), hTreeItem);
|
||||||
|
break;
|
||||||
|
case IDM_PROJECT_NEWFOLDER :
|
||||||
|
break;
|
||||||
|
case IDM_PROJECT_ADDFILES :
|
||||||
|
break;
|
||||||
|
case IDM_PROJECT_DELETEFOLDER :
|
||||||
|
break;
|
||||||
|
case IDM_PROJECT_DELETEFILE :
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -28,16 +28,45 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
#include "TreeView.h"
|
#include "TreeView.h"
|
||||||
#include "ProjectPanel_rc.h"
|
#include "ProjectPanel_rc.h"
|
||||||
|
|
||||||
|
#define IDM_PROJECT_RENAME 2560
|
||||||
|
#define IDM_PROJECT_NEWFOLDER 2561
|
||||||
|
#define IDM_PROJECT_ADDFILES 2562
|
||||||
|
#define IDM_PROJECT_DELETEFOLDER 2563
|
||||||
|
#define IDM_PROJECT_DELETEFILE 2564
|
||||||
|
|
||||||
|
|
||||||
class TiXmlNode;
|
class TiXmlNode;
|
||||||
|
|
||||||
class ProjectPanel : public DockingDlgInterface {
|
class ProjectPanel : public DockingDlgInterface {
|
||||||
public:
|
public:
|
||||||
ProjectPanel(): DockingDlgInterface(IDD_PROJECTPANEL) {};
|
ProjectPanel(): DockingDlgInterface(IDD_PROJECTPANEL),\
|
||||||
|
_hRootMenu(NULL), _hFolderMenu(NULL), _hFileMenu(NULL){};
|
||||||
|
|
||||||
void init(HINSTANCE hInst, HWND hPere) {
|
void init(HINSTANCE hInst, HWND hPere) {
|
||||||
DockingDlgInterface::init(hInst, hPere);
|
DockingDlgInterface::init(hInst, hPere);
|
||||||
|
|
||||||
|
_hRootMenu = ::CreatePopupMenu();
|
||||||
|
::InsertMenu(_hRootMenu, 0, MF_BYCOMMAND, IDM_PROJECT_RENAME, TEXT("Rename"));
|
||||||
|
::InsertMenu(_hRootMenu, 0, MF_BYCOMMAND, IDM_PROJECT_NEWFOLDER, TEXT("New Folder..."));
|
||||||
|
::InsertMenu(_hRootMenu, 0, MF_BYCOMMAND, IDM_PROJECT_ADDFILES, TEXT("Add Files..."));
|
||||||
|
|
||||||
|
_hFolderMenu = ::CreatePopupMenu();
|
||||||
|
::InsertMenu(_hFolderMenu, 0, MF_BYCOMMAND, IDM_PROJECT_RENAME, TEXT("Rename"));
|
||||||
|
::InsertMenu(_hFolderMenu, 0, MF_BYCOMMAND, IDM_PROJECT_NEWFOLDER, TEXT("New Folder..."));
|
||||||
|
::InsertMenu(_hFolderMenu, 0, MF_BYCOMMAND, IDM_PROJECT_DELETEFOLDER, TEXT("Delete"));
|
||||||
|
::InsertMenu(_hFolderMenu, 0, MF_BYCOMMAND, IDM_PROJECT_ADDFILES, TEXT("Add Files..."));
|
||||||
|
|
||||||
|
_hFileMenu = ::CreatePopupMenu();
|
||||||
|
::InsertMenu(_hFileMenu, 0, MF_BYCOMMAND, IDM_PROJECT_RENAME, TEXT("Rename"));
|
||||||
|
::InsertMenu(_hFileMenu, 0, MF_BYCOMMAND, IDM_PROJECT_DELETEFILE, TEXT("Delete"));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void destroy() {
|
||||||
|
::DestroyMenu(_hRootMenu);
|
||||||
|
::DestroyMenu(_hFolderMenu);
|
||||||
|
::DestroyMenu(_hFileMenu);
|
||||||
|
};
|
||||||
|
|
||||||
virtual void display(bool toShow = true) const {
|
virtual void display(bool toShow = true) const {
|
||||||
DockingDlgInterface::display(toShow);
|
DockingDlgInterface::display(toShow);
|
||||||
};
|
};
|
||||||
|
@ -50,6 +79,8 @@ public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
TreeView _treeView;
|
TreeView _treeView;
|
||||||
|
HMENU _hRootMenu, _hFolderMenu, _hFileMenu;
|
||||||
|
void popupMenuCmd(int cmdID);
|
||||||
virtual BOOL CALLBACK ProjectPanel::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam);
|
virtual BOOL CALLBACK ProjectPanel::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam);
|
||||||
bool buildTreeFrom(TiXmlNode *projectRoot, HTREEITEM hParentItem);
|
bool buildTreeFrom(TiXmlNode *projectRoot, HTREEITEM hParentItem);
|
||||||
void notified(LPNMHDR notification);
|
void notified(LPNMHDR notification);
|
||||||
|
|
|
@ -26,5 +26,5 @@ EXSTYLE WS_EX_TOOLWINDOW | WS_EX_WINDOWEDGE
|
||||||
CAPTION "Project"
|
CAPTION "Project"
|
||||||
FONT 8, "MS Sans Serif", 0, 0, 0x0
|
FONT 8, "MS Sans Serif", 0, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
CONTROL "",ID_PROJECTTREEVIEW,"SysTreeView32", TVS_HASBUTTONS | TVS_EDITLABELS | TVS_HASLINES | WS_BORDER | WS_HSCROLL | WS_TABSTOP,7,7,172,93
|
CONTROL "",ID_PROJECTTREEVIEW,"SysTreeView32", TVS_HASBUTTONS | TVS_EDITLABELS | TVS_INFOTIP | TVS_HASLINES | WS_BORDER | WS_HSCROLL | WS_TABSTOP,7,7,172,93
|
||||||
END
|
END
|
||||||
|
|
Loading…
Reference in New Issue