[NEW_FEATURE] Add Close/Keep the selected files commands in Document List Panel.
git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository/trunk@1037 f5eea248-9336-0410-98b8-ebc06183d4e3
This commit is contained in:
parent
d7cce21309
commit
db19cf8d6a
@ -4886,7 +4886,10 @@ bool Notepad_plus::reloadLang()
|
|||||||
{
|
{
|
||||||
_nativeLangSpeaker.changeLangTabDrapContextMenu(_tabPopupDropMenu.getMenuHandle());
|
_nativeLangSpeaker.changeLangTabDrapContextMenu(_tabPopupDropMenu.getMenuHandle());
|
||||||
}
|
}
|
||||||
|
if (_fileSwitcherMultiFilePopupMenu.isCreated())
|
||||||
|
{
|
||||||
|
//_nativeLangSpeaker.changeLangTabDrapContextMenu(_fileSwitcherMultiFilePopupMenu.getMenuHandle());
|
||||||
|
}
|
||||||
if (_preference.isCreated())
|
if (_preference.isCreated())
|
||||||
{
|
{
|
||||||
_nativeLangSpeaker.changePrefereceDlgLang(_preference);
|
_nativeLangSpeaker.changePrefereceDlgLang(_preference);
|
||||||
|
@ -330,7 +330,7 @@ private:
|
|||||||
SplitterContainer *_pMainSplitter;
|
SplitterContainer *_pMainSplitter;
|
||||||
SplitterContainer _subSplitter;
|
SplitterContainer _subSplitter;
|
||||||
|
|
||||||
ContextMenu _tabPopupMenu, _tabPopupDropMenu;
|
ContextMenu _tabPopupMenu, _tabPopupDropMenu, _fileSwitcherMultiFilePopupMenu;
|
||||||
|
|
||||||
ToolBar _toolBar;
|
ToolBar _toolBar;
|
||||||
IconList _docTabIconList;
|
IconList _docTabIconList;
|
||||||
|
@ -70,6 +70,23 @@ void Notepad_plus::command(int id)
|
|||||||
fileReload();
|
fileReload();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case IDM_FILESWITCHER_FILESCLOSE:
|
||||||
|
case IDM_FILESWITCHER_FILESCLOSEOTHERS:
|
||||||
|
if (_pFileSwitcherPanel)
|
||||||
|
{
|
||||||
|
vector<SwitcherFileInfo> files = _pFileSwitcherPanel->getSelectedFiles(id == IDM_FILESWITCHER_FILESCLOSEOTHERS);
|
||||||
|
for (size_t i = 0; i < files.size(); i++)
|
||||||
|
{
|
||||||
|
fileClose((BufferID)files[i]._bufID, files[i]._iView);
|
||||||
|
}
|
||||||
|
if (id == IDM_FILESWITCHER_FILESCLOSEOTHERS)
|
||||||
|
{
|
||||||
|
// Get current buffer and its view
|
||||||
|
_pFileSwitcherPanel->activateItem(int(_pEditView->getCurrentBufferID()), currentView());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case IDM_FILE_CLOSE:
|
case IDM_FILE_CLOSE:
|
||||||
if (fileClose())
|
if (fileClose())
|
||||||
checkDocState();
|
checkDocState();
|
||||||
|
@ -291,6 +291,9 @@ BOOL Notepad_plus::notify(SCNotification *notification)
|
|||||||
|
|
||||||
case NM_RCLICK :
|
case NM_RCLICK :
|
||||||
{
|
{
|
||||||
|
POINT p;
|
||||||
|
::GetCursorPos(&p);
|
||||||
|
|
||||||
if (notification->nmhdr.hwndFrom == _mainDocTab.getHSelf())
|
if (notification->nmhdr.hwndFrom == _mainDocTab.getHSelf())
|
||||||
{
|
{
|
||||||
switchEditViewTo(MAIN_VIEW);
|
switchEditViewTo(MAIN_VIEW);
|
||||||
@ -302,13 +305,25 @@ BOOL Notepad_plus::notify(SCNotification *notification)
|
|||||||
else if (_pFileSwitcherPanel && notification->nmhdr.hwndFrom == _pFileSwitcherPanel->getHSelf())
|
else if (_pFileSwitcherPanel && notification->nmhdr.hwndFrom == _pFileSwitcherPanel->getHSelf())
|
||||||
{
|
{
|
||||||
// Already switched, so do nothing here.
|
// Already switched, so do nothing here.
|
||||||
|
|
||||||
|
if (_pFileSwitcherPanel->nbSelectedFiles() > 1)
|
||||||
|
{
|
||||||
|
if (!_fileSwitcherMultiFilePopupMenu.isCreated())
|
||||||
|
{
|
||||||
|
vector<MenuItemUnit> itemUnitArray;
|
||||||
|
itemUnitArray.push_back(MenuItemUnit(IDM_FILESWITCHER_FILESCLOSE, TEXT("Close Selected files")));
|
||||||
|
itemUnitArray.push_back(MenuItemUnit(IDM_FILESWITCHER_FILESCLOSEOTHERS, TEXT("Close others files")));
|
||||||
|
|
||||||
|
_fileSwitcherMultiFilePopupMenu.create(_pPublicInterface->getHSelf(), itemUnitArray);
|
||||||
|
_nativeLangSpeaker.changeLangTabContextMenu(_fileSwitcherMultiFilePopupMenu.getMenuHandle());
|
||||||
|
}
|
||||||
|
_fileSwitcherMultiFilePopupMenu.display(p);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else // From tool bar or Status Bar
|
else // From tool bar or Status Bar
|
||||||
return TRUE;
|
return TRUE;
|
||||||
//break;
|
//break;
|
||||||
|
|
||||||
POINT p;
|
|
||||||
::GetCursorPos(&p);
|
|
||||||
|
|
||||||
if (!_tabPopupMenu.isCreated())
|
if (!_tabPopupMenu.isCreated())
|
||||||
{
|
{
|
||||||
|
@ -84,6 +84,9 @@ BOOL CALLBACK VerticalFileSwitcher::run_dlgProc(UINT message, WPARAM wParam, LPA
|
|||||||
|
|
||||||
case NM_CLICK:
|
case NM_CLICK:
|
||||||
{
|
{
|
||||||
|
if ((0x80 & GetKeyState(VK_CONTROL)) || (0x80 & GetKeyState(VK_SHIFT)))
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
LPNMITEMACTIVATE lpnmitem = (LPNMITEMACTIVATE) lParam;
|
LPNMITEMACTIVATE lpnmitem = (LPNMITEMACTIVATE) lParam;
|
||||||
int nbItem = ListView_GetItemCount(_fileListView.getHSelf());
|
int nbItem = ListView_GetItemCount(_fileListView.getHSelf());
|
||||||
int i = lpnmitem->iItem;
|
int i = lpnmitem->iItem;
|
||||||
@ -105,18 +108,21 @@ BOOL CALLBACK VerticalFileSwitcher::run_dlgProc(UINT message, WPARAM wParam, LPA
|
|||||||
// Switch to the right document
|
// Switch to the right document
|
||||||
LPNMITEMACTIVATE lpnmitem = (LPNMITEMACTIVATE) lParam;
|
LPNMITEMACTIVATE lpnmitem = (LPNMITEMACTIVATE) lParam;
|
||||||
int nbItem = ListView_GetItemCount(_fileListView.getHSelf());
|
int nbItem = ListView_GetItemCount(_fileListView.getHSelf());
|
||||||
int i = lpnmitem->iItem;
|
|
||||||
if (i == -1 || i >= nbItem)
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
LVITEM item;
|
if (nbItem == 1)
|
||||||
item.mask = LVIF_PARAM;
|
{
|
||||||
item.iItem = i;
|
int i = lpnmitem->iItem;
|
||||||
ListView_GetItem(((LPNMHDR)lParam)->hwndFrom, &item);
|
if (i == -1 || i >= nbItem)
|
||||||
TaskLstFnStatus *tlfs = (TaskLstFnStatus *)item.lParam;
|
return TRUE;
|
||||||
|
|
||||||
activateDoc(tlfs);
|
LVITEM item;
|
||||||
|
item.mask = LVIF_PARAM;
|
||||||
|
item.iItem = i;
|
||||||
|
ListView_GetItem(((LPNMHDR)lParam)->hwndFrom, &item);
|
||||||
|
TaskLstFnStatus *tlfs = (TaskLstFnStatus *)item.lParam;
|
||||||
|
|
||||||
|
activateDoc(tlfs);
|
||||||
|
}
|
||||||
// Redirect NM_RCLICK message to Notepad_plus handle
|
// Redirect NM_RCLICK message to Notepad_plus handle
|
||||||
NMHDR nmhdr;
|
NMHDR nmhdr;
|
||||||
nmhdr.code = NM_RCLICK;
|
nmhdr.code = NM_RCLICK;
|
||||||
|
@ -37,6 +37,7 @@
|
|||||||
#include "VerticalFileSwitcher_rc.h"
|
#include "VerticalFileSwitcher_rc.h"
|
||||||
#include "VerticalFileSwitcherListView.h"
|
#include "VerticalFileSwitcherListView.h"
|
||||||
|
|
||||||
|
|
||||||
class VerticalFileSwitcher : public DockingDlgInterface {
|
class VerticalFileSwitcher : public DockingDlgInterface {
|
||||||
public:
|
public:
|
||||||
VerticalFileSwitcher(): DockingDlgInterface(IDD_FILESWITCHER_PANEL) {};
|
VerticalFileSwitcher(): DockingDlgInterface(IDD_FILESWITCHER_PANEL) {};
|
||||||
@ -79,6 +80,14 @@ public:
|
|||||||
|
|
||||||
int setHeaderOrder(LPNMLISTVIEW pnm_list_view);
|
int setHeaderOrder(LPNMLISTVIEW pnm_list_view);
|
||||||
|
|
||||||
|
int nbSelectedFiles() const {
|
||||||
|
return _fileListView.nbSelectedFiles();
|
||||||
|
};
|
||||||
|
|
||||||
|
std::vector<SwitcherFileInfo> getSelectedFiles(bool reverse = false) const {
|
||||||
|
return _fileListView.getSelectedFiles(reverse);
|
||||||
|
};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual BOOL CALLBACK VerticalFileSwitcher::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam);
|
virtual BOOL CALLBACK VerticalFileSwitcher::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam);
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ void VerticalFileSwitcherListView::init(HINSTANCE hInst, HWND parent, HIMAGELIST
|
|||||||
InitCommonControlsEx(&icex);
|
InitCommonControlsEx(&icex);
|
||||||
|
|
||||||
// Create the list-view window in report view with label editing enabled.
|
// Create the list-view window in report view with label editing enabled.
|
||||||
int listViewStyles = LVS_REPORT | LVS_SINGLESEL | LVS_AUTOARRANGE\
|
int listViewStyles = LVS_REPORT /*| LVS_SINGLESEL*/ | LVS_AUTOARRANGE\
|
||||||
| LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS;
|
| LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS;
|
||||||
|
|
||||||
_hSelf = ::CreateWindow(WC_LISTVIEW,
|
_hSelf = ::CreateWindow(WC_LISTVIEW,
|
||||||
@ -199,6 +199,11 @@ int VerticalFileSwitcherListView::closeItem(int bufferID, int iView)
|
|||||||
|
|
||||||
void VerticalFileSwitcherListView::activateItem(int bufferID, int iView)
|
void VerticalFileSwitcherListView::activateItem(int bufferID, int iView)
|
||||||
{
|
{
|
||||||
|
// Clean all selection
|
||||||
|
int nbItem = ListView_GetItemCount(_hSelf);
|
||||||
|
for (int i = 0; i < nbItem; i++)
|
||||||
|
ListView_SetItemState(_hSelf, i, 0, LVIS_FOCUSED|LVIS_SELECTED);
|
||||||
|
|
||||||
int i = find(bufferID, iView);
|
int i = find(bufferID, iView);
|
||||||
if (i == -1)
|
if (i == -1)
|
||||||
{
|
{
|
||||||
@ -235,6 +240,7 @@ int VerticalFileSwitcherListView::add(int bufferID, int iView)
|
|||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void VerticalFileSwitcherListView::remove(int index)
|
void VerticalFileSwitcherListView::remove(int index)
|
||||||
{
|
{
|
||||||
LVITEM item;
|
LVITEM item;
|
||||||
@ -276,3 +282,27 @@ void VerticalFileSwitcherListView::insertColumn(TCHAR *name, int width, int inde
|
|||||||
lvColumn.pszText = name;
|
lvColumn.pszText = name;
|
||||||
ListView_InsertColumn(_hSelf, index, &lvColumn);
|
ListView_InsertColumn(_hSelf, index, &lvColumn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<SwitcherFileInfo> VerticalFileSwitcherListView::getSelectedFiles(bool reverse) const
|
||||||
|
{
|
||||||
|
std::vector<SwitcherFileInfo> files;
|
||||||
|
LVITEM item;
|
||||||
|
int nbItem = ListView_GetItemCount(_hSelf);
|
||||||
|
int i = 0;
|
||||||
|
for (; i < nbItem ; i++)
|
||||||
|
{
|
||||||
|
int isSelected = ListView_GetItemState(_hSelf, i, LVIS_SELECTED);
|
||||||
|
bool isChosen = reverse?isSelected != LVIS_SELECTED:isSelected == LVIS_SELECTED;
|
||||||
|
if (isChosen)
|
||||||
|
{
|
||||||
|
item.mask = LVIF_PARAM;
|
||||||
|
item.iItem = i;
|
||||||
|
ListView_GetItem(_hSelf, &item);
|
||||||
|
|
||||||
|
TaskLstFnStatus *tlfs = (TaskLstFnStatus *)item.lParam;
|
||||||
|
files.push_back(SwitcherFileInfo(int(tlfs->_bufID), tlfs->_iView));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return files;
|
||||||
|
}
|
||||||
|
@ -35,6 +35,12 @@
|
|||||||
#define SORT_DIRECTION_UP 0
|
#define SORT_DIRECTION_UP 0
|
||||||
#define SORT_DIRECTION_DOWN 1
|
#define SORT_DIRECTION_DOWN 1
|
||||||
|
|
||||||
|
struct SwitcherFileInfo {
|
||||||
|
int _bufID;
|
||||||
|
int _iView;
|
||||||
|
SwitcherFileInfo(int buf, int view): _bufID(buf), _iView(view){};
|
||||||
|
};
|
||||||
|
|
||||||
class VerticalFileSwitcherListView : public Window
|
class VerticalFileSwitcherListView : public Window
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -55,7 +61,11 @@ public:
|
|||||||
generic_string getFullFilePath(size_t i) const;
|
generic_string getFullFilePath(size_t i) const;
|
||||||
|
|
||||||
void insertColumn(TCHAR *name, int width, int index);
|
void insertColumn(TCHAR *name, int width, int index);
|
||||||
|
int nbSelectedFiles() const {
|
||||||
|
return SendMessage(_hSelf, LVM_GETSELECTEDCOUNT, 0, 0);
|
||||||
|
};
|
||||||
|
|
||||||
|
std::vector<SwitcherFileInfo> getSelectedFiles(bool reverse = false) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
HIMAGELIST _hImaLst;
|
HIMAGELIST _hImaLst;
|
||||||
|
@ -131,7 +131,6 @@
|
|||||||
#define IDM_CLEAN_RECENT_FILE_LIST (IDM_EDIT + 41)
|
#define IDM_CLEAN_RECENT_FILE_LIST (IDM_EDIT + 41)
|
||||||
|
|
||||||
#define IDM_SEARCH (IDM + 3000)
|
#define IDM_SEARCH (IDM + 3000)
|
||||||
|
|
||||||
#define IDM_SEARCH_FIND (IDM_SEARCH + 1)
|
#define IDM_SEARCH_FIND (IDM_SEARCH + 1)
|
||||||
#define IDM_SEARCH_FINDNEXT (IDM_SEARCH + 2)
|
#define IDM_SEARCH_FINDNEXT (IDM_SEARCH + 2)
|
||||||
#define IDM_SEARCH_REPLACE (IDM_SEARCH + 3)
|
#define IDM_SEARCH_REPLACE (IDM_SEARCH + 3)
|
||||||
@ -186,6 +185,11 @@
|
|||||||
#define IDM_SEARCH_DELETEUNMARKEDLINES (IDM_SEARCH + 51)
|
#define IDM_SEARCH_DELETEUNMARKEDLINES (IDM_SEARCH + 51)
|
||||||
#define IDM_SEARCH_FINDCHARINRANGE (IDM_SEARCH + 52)
|
#define IDM_SEARCH_FINDCHARINRANGE (IDM_SEARCH + 52)
|
||||||
|
|
||||||
|
#define IDM_MISC (IDM + 3500)
|
||||||
|
#define IDM_FILESWITCHER_FILESCLOSE (IDM_MISC + 1)
|
||||||
|
#define IDM_FILESWITCHER_FILESCLOSEOTHERS (IDM_MISC + 2)
|
||||||
|
|
||||||
|
|
||||||
#define IDM_VIEW (IDM + 4000)
|
#define IDM_VIEW (IDM + 4000)
|
||||||
//#define IDM_VIEW_TOOLBAR_HIDE (IDM_VIEW + 1)
|
//#define IDM_VIEW_TOOLBAR_HIDE (IDM_VIEW + 1)
|
||||||
#define IDM_VIEW_TOOLBAR_REDUCE (IDM_VIEW + 2)
|
#define IDM_VIEW_TOOLBAR_REDUCE (IDM_VIEW + 2)
|
||||||
|
Loading…
Reference in New Issue
Block a user