[NEW_FEATURE] Add file switcher (list) dialog (in progress).
git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository/trunk@773 f5eea248-9336-0410-98b8-ebc06183d4e3
This commit is contained in:
parent
c4327b5b34
commit
ffb79104f6
@ -3390,14 +3390,14 @@ void Notepad_plus::getTaskListInfo(TaskListInfo *tli)
|
|||||||
BufferID bufID = _pDocTab->getBufferByIndex(i);
|
BufferID bufID = _pDocTab->getBufferByIndex(i);
|
||||||
Buffer * b = MainFileManager->getBufferByID(bufID);
|
Buffer * b = MainFileManager->getBufferByID(bufID);
|
||||||
int status = b->isReadOnly()?tb_ro:(b->isDirty()?tb_unsaved:tb_saved);
|
int status = b->isReadOnly()?tb_ro:(b->isDirty()?tb_unsaved:tb_saved);
|
||||||
tli->_tlfsLst.push_back(TaskLstFnStatus(currentView(), i, b->getFullPathName(), status));
|
tli->_tlfsLst.push_back(TaskLstFnStatus(currentView(), i, b->getFullPathName(), status, (void *)bufID));
|
||||||
}
|
}
|
||||||
for (size_t i = 0 ; i < nonCurrentNbDoc ; i++)
|
for (size_t i = 0 ; i < nonCurrentNbDoc ; i++)
|
||||||
{
|
{
|
||||||
BufferID bufID = _pNonDocTab->getBufferByIndex(i);
|
BufferID bufID = _pNonDocTab->getBufferByIndex(i);
|
||||||
Buffer * b = MainFileManager->getBufferByID(bufID);
|
Buffer * b = MainFileManager->getBufferByID(bufID);
|
||||||
int status = b->isReadOnly()?tb_ro:(b->isDirty()?tb_unsaved:tb_saved);
|
int status = b->isReadOnly()?tb_ro:(b->isDirty()?tb_unsaved:tb_saved);
|
||||||
tli->_tlfsLst.push_back(TaskLstFnStatus(otherView(), i, b->getFullPathName(), status));
|
tli->_tlfsLst.push_back(TaskLstFnStatus(otherView(), i, b->getFullPathName(), status, (void *)bufID));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,8 +50,8 @@ void Notepad_plus::command(int id)
|
|||||||
|
|
||||||
case IDM_FILE_OPEN:
|
case IDM_FILE_OPEN:
|
||||||
{
|
{
|
||||||
fileOpen();
|
//fileOpen();
|
||||||
//launchFileSwitcherPanel();
|
launchFileSwitcherPanel();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
#include "Notepad_plus_Window.h"
|
#include "Notepad_plus_Window.h"
|
||||||
#include "FileDialog.h"
|
#include "FileDialog.h"
|
||||||
#include "EncodingMapper.h"
|
#include "EncodingMapper.h"
|
||||||
|
#include "VerticalFileSwitcher.h"
|
||||||
|
|
||||||
|
|
||||||
BufferID Notepad_plus::doOpen(const TCHAR *fileName, bool isReadOnly, int encoding)
|
BufferID Notepad_plus::doOpen(const TCHAR *fileName, bool isReadOnly, int encoding)
|
||||||
@ -163,6 +163,8 @@ BufferID Notepad_plus::doOpen(const TCHAR *fileName, bool isReadOnly, int encodi
|
|||||||
// Notify plugins that current file is just opened
|
// Notify plugins that current file is just opened
|
||||||
scnN.nmhdr.code = NPPN_FILEOPENED;
|
scnN.nmhdr.code = NPPN_FILEOPENED;
|
||||||
_pluginsManager.notify(&scnN);
|
_pluginsManager.notify(&scnN);
|
||||||
|
if (_pFileSwitcherPanel)
|
||||||
|
_pFileSwitcherPanel->newItem((int)buf, fileName);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -324,7 +326,8 @@ void Notepad_plus::doClose(BufferID id, int whichOne) {
|
|||||||
// Notify plugins that current file is closed
|
// Notify plugins that current file is closed
|
||||||
scnN.nmhdr.code = NPPN_FILECLOSED;
|
scnN.nmhdr.code = NPPN_FILECLOSED;
|
||||||
_pluginsManager.notify(&scnN);
|
_pluginsManager.notify(&scnN);
|
||||||
|
if (_pFileSwitcherPanel)
|
||||||
|
_pFileSwitcherPanel->closeItem((int)id);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,8 +42,10 @@ struct TaskLstFnStatus {
|
|||||||
int _docIndex;
|
int _docIndex;
|
||||||
generic_string _fn;
|
generic_string _fn;
|
||||||
int _status;
|
int _status;
|
||||||
|
void *_bufID;
|
||||||
TaskLstFnStatus(generic_string str, int status) : _fn(str), _status(status){};
|
TaskLstFnStatus(generic_string str, int status) : _fn(str), _status(status){};
|
||||||
TaskLstFnStatus(int iView, int docIndex, generic_string str, int status) : _iView(iView), _docIndex(docIndex), _fn(str), _status(status) {};
|
TaskLstFnStatus(int iView, int docIndex, generic_string str, int status, void *bufID) :
|
||||||
|
_iView(iView), _docIndex(docIndex), _fn(str), _status(status), _bufID(bufID) {};
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TaskListInfo {
|
struct TaskListInfo {
|
||||||
|
@ -92,7 +92,22 @@ BOOL CALLBACK VerticalFileSwitcher::run_dlgProc(UINT message, WPARAM wParam, LPA
|
|||||||
|
|
||||||
void VerticalFileSwitcher::activateDoc(int i) const
|
void VerticalFileSwitcher::activateDoc(int i) const
|
||||||
{
|
{
|
||||||
int view2set = _fileListView.getViewInfoFromIndex(i);
|
int bufferID = _fileListView.getBufferIDFromIndex(i);
|
||||||
int index2Switch = _fileListView.getDocIndexInfoFromIndex(i);
|
int docPosInfo = ::SendMessage(_hParent, NPPM_GETPOSFROMBUFFERID, bufferID, 0);
|
||||||
|
int view2set = docPosInfo >> 30;
|
||||||
|
int index2Switch = (docPosInfo << 2) >> 2 ;
|
||||||
|
|
||||||
|
//int view2set = _fileListView.getViewInfoFromIndex(i);
|
||||||
|
//int index2Switch = _fileListView.getDocIndexInfoFromIndex(i);
|
||||||
::SendMessage(_hParent, NPPM_ACTIVATEDOC, view2set, index2Switch);
|
::SendMessage(_hParent, NPPM_ACTIVATEDOC, view2set, index2Switch);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int VerticalFileSwitcher::newItem(int bufferID, const TCHAR *fn)
|
||||||
|
{
|
||||||
|
return _fileListView.newItem(bufferID, fn);
|
||||||
|
}
|
||||||
|
|
||||||
|
int VerticalFileSwitcher::closeItem(int bufferID)
|
||||||
|
{
|
||||||
|
return _fileListView.closeItem(bufferID);
|
||||||
|
}
|
||||||
|
@ -48,6 +48,9 @@ public:
|
|||||||
//Activate document in scintilla by using the internal index
|
//Activate document in scintilla by using the internal index
|
||||||
void activateDoc(int i) const;
|
void activateDoc(int i) const;
|
||||||
|
|
||||||
|
int newItem(int bufferID, const TCHAR *fn);
|
||||||
|
int closeItem(int bufferID);
|
||||||
|
|
||||||
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);
|
||||||
|
|
||||||
|
@ -102,14 +102,41 @@ void VerticalFileSwitcherListView::initList()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
//{}
|
//{}
|
||||||
int VerticalFileSwitcherListView::getViewInfoFromIndex(int index) const {
|
int VerticalFileSwitcherListView::getBufferIDFromIndex(int index) const {
|
||||||
if (index < 0 || index >= int(_taskListInfo._tlfsLst.size()))
|
if (index < 0 || index >= int(_taskListInfo._tlfsLst.size()))
|
||||||
return -1;
|
return -1;
|
||||||
return _taskListInfo._tlfsLst[index]._iView;
|
return int(_taskListInfo._tlfsLst[index]._bufID);
|
||||||
}
|
}
|
||||||
|
|
||||||
int VerticalFileSwitcherListView::getDocIndexInfoFromIndex(int index) const {
|
int VerticalFileSwitcherListView::newItem(int bufferID, const TCHAR *fn)
|
||||||
if (index < 0 || index >= int(_taskListInfo._tlfsLst.size()))
|
{
|
||||||
return -1;
|
int index = int(_taskListInfo._tlfsLst.size());
|
||||||
return _taskListInfo._tlfsLst[index]._docIndex;
|
_taskListInfo._tlfsLst.push_back(TaskLstFnStatus(0, 0, fn, 0, (void *)bufferID));
|
||||||
}
|
|
||||||
|
LVITEM item;
|
||||||
|
item.mask = LVIF_TEXT | LVIF_IMAGE;
|
||||||
|
|
||||||
|
item.pszText = (TCHAR *)::PathFindFileName(fn);
|
||||||
|
item.iItem = index;
|
||||||
|
item.iSubItem = 0;
|
||||||
|
|
||||||
|
item.iImage = 0;
|
||||||
|
ListView_InsertItem(_hSelf, &item);
|
||||||
|
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
|
||||||
|
int VerticalFileSwitcherListView::closeItem(int bufferID)
|
||||||
|
{
|
||||||
|
bool found = false;
|
||||||
|
|
||||||
|
for (size_t i = 0 ; i < _taskListInfo._tlfsLst.size() ; i++)
|
||||||
|
{
|
||||||
|
if (_taskListInfo._tlfsLst[i]._bufID == (void *)bufferID)
|
||||||
|
{
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@ -30,11 +30,12 @@ public:
|
|||||||
virtual void init(HINSTANCE hInst, HWND parent, HIMAGELIST hImaLst);
|
virtual void init(HINSTANCE hInst, HWND parent, HIMAGELIST hImaLst);
|
||||||
virtual void destroy();
|
virtual void destroy();
|
||||||
void initList();
|
void initList();
|
||||||
int getViewInfoFromIndex(int index) const;
|
int getBufferIDFromIndex(int index) const;
|
||||||
int getDocIndexInfoFromIndex(int index) const;
|
|
||||||
void setBgColour(int i) {
|
void setBgColour(int i) {
|
||||||
ListView_SetItemState(_hSelf, i, LVIS_SELECTED|LVIS_FOCUSED, 0xFF);
|
ListView_SetItemState(_hSelf, i, LVIS_SELECTED|LVIS_FOCUSED, 0xFF);
|
||||||
}
|
}
|
||||||
|
int newItem(int bufferID, const TCHAR *fn);
|
||||||
|
int closeItem(int bufferID);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
TaskListInfo _taskListInfo;
|
TaskListInfo _taskListInfo;
|
||||||
|
Loading…
Reference in New Issue
Block a user