Skip to content

Commit

Permalink
[MODIFY] Chang file switcher behaviour while clonning a document on t…
Browse files Browse the repository at this point in the history
…he other view.

- Notepad-plus svn trunk @ 785
  • Loading branch information
donho committed Jul 9, 2011
1 parent 1bef66e commit f6bbff5
Show file tree
Hide file tree
Showing 8 changed files with 67 additions and 43 deletions.
3 changes: 2 additions & 1 deletion PowerEditor/src/MISC/PluginsManager/Notepad_plus_msgs.h
Original file line number Diff line number Diff line change
Expand Up @@ -191,8 +191,9 @@ enum winVer{WV_UNKNOWN, WV_WIN32S, WV_95, WV_98, WV_ME, WV_NT, WV_W2K, WV_XP, WV
// returned value : TRUE if tab bar is hidden, otherwise FALSE

#define NPPM_GETPOSFROMBUFFERID (NPPMSG + 57)
// INT NPPM_GETPOSFROMBUFFERID(INT bufferID, 0)
// INT NPPM_GETPOSFROMBUFFERID(INT bufferID, INT priorityView)
// Return VIEW|INDEX from a buffer ID. -1 if the bufferID non existing
// if priorityView set to SUB_VIEW, then SUB_VIEW will be search firstly
//
// VIEW takes 2 highest bits and INDEX (0 based) takes the rest (30 bits)
// Here's the values for the view :
Expand Down
4 changes: 2 additions & 2 deletions PowerEditor/src/Notepad_plus.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2657,7 +2657,7 @@ void Notepad_plus::loadBufferIntoView(BufferID id, int whichOne, bool dontClose)
activateBuffer(id, whichOne); //activate. DocTab already activated but not a problem
MainFileManager->closeBuffer(idToClose, viewToOpen); //delete the buffer
if (_pFileSwitcherPanel)
_pFileSwitcherPanel->closeItem((int)idToClose);
_pFileSwitcherPanel->closeItem((int)idToClose, whichOne);
} else {
tabToOpen->addBuffer(id);
}
Expand Down Expand Up @@ -4219,7 +4219,7 @@ void Notepad_plus::notifyBufferActivated(BufferID bufid, int view)

if (_pFileSwitcherPanel)
{
_pFileSwitcherPanel->activateItem((int)bufid);
_pFileSwitcherPanel->activateItem((int)bufid, currentView());
}

_linkTriggered = true;
Expand Down
34 changes: 26 additions & 8 deletions PowerEditor/src/NppBigSwitch.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1277,17 +1277,35 @@ LRESULT Notepad_plus::process(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa
{
int i;

if ((i = _mainDocTab.getIndexByBuffer((BufferID)wParam)) != -1)
if (lParam == SUB_VIEW)
{
long view = MAIN_VIEW;
view <<= 30;
return view|i;
if ((i = _subDocTab.getIndexByBuffer((BufferID)wParam)) != -1)
{
long view = SUB_VIEW;
view <<= 30;
return view|i;
}
if ((i = _mainDocTab.getIndexByBuffer((BufferID)wParam)) != -1)
{
long view = MAIN_VIEW;
view <<= 30;
return view|i;
}
}
if ((i = _subDocTab.getIndexByBuffer((BufferID)wParam)) != -1)
else
{
long view = SUB_VIEW;
view <<= 30;
return view|i;
if ((i = _mainDocTab.getIndexByBuffer((BufferID)wParam)) != -1)
{
long view = MAIN_VIEW;
view <<= 30;
return view|i;
}
if ((i = _subDocTab.getIndexByBuffer((BufferID)wParam)) != -1)
{
long view = SUB_VIEW;
view <<= 30;
return view|i;
}
}
return -1;
}
Expand Down
9 changes: 5 additions & 4 deletions PowerEditor/src/NppIO.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ BufferID Notepad_plus::doOpen(const TCHAR *fileName, bool isReadOnly, int encodi
scnN.nmhdr.code = NPPN_FILEOPENED;
_pluginsManager.notify(&scnN);
if (_pFileSwitcherPanel)
_pFileSwitcherPanel->newItem((int)buf);
_pFileSwitcherPanel->newItem((int)buf, currentView());
}
else
{
Expand Down Expand Up @@ -336,11 +336,12 @@ void Notepad_plus::doClose(BufferID id, int whichOne) {
// if the same buffer ID is not found then remove the entry from File Switcher Pannel
if (_pFileSwitcherPanel)
{
if (::SendMessage(_pPublicInterface->getHSelf(), NPPM_GETPOSFROMBUFFERID, (WPARAM)id ,0) == -1)
_pFileSwitcherPanel->closeItem((int)id);
//int posInfo = ::SendMessage(_pPublicInterface->getHSelf(), NPPM_GETPOSFROMBUFFERID, (WPARAM)id ,0);

_pFileSwitcherPanel->closeItem((int)id, whichOne);

if (hiddenBufferID != -1)
_pFileSwitcherPanel->closeItem((int)hiddenBufferID);
_pFileSwitcherPanel->closeItem((int)hiddenBufferID, whichOne);
}
}
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ BOOL CALLBACK VerticalFileSwitcher::run_dlgProc(UINT message, WPARAM wParam, LPA
int i = lpnmitem->iItem;
if (i == -1)
return TRUE;

activateDoc(i);

// Redirect NM_RCLICK message to Notepad_plus handle
Expand Down Expand Up @@ -109,8 +110,9 @@ BOOL CALLBACK VerticalFileSwitcher::run_dlgProc(UINT message, WPARAM wParam, LPA

void VerticalFileSwitcher::activateDoc(int i) const
{
int bufferID = _fileListView.getBufferIDFromIndex(i);
int docPosInfo = ::SendMessage(_hParent, NPPM_GETPOSFROMBUFFERID, bufferID, 0);
int view = MAIN_VIEW;
int bufferID = _fileListView.getBufferInfoFromIndex(i, view);
int docPosInfo = ::SendMessage(_hParent, NPPM_GETPOSFROMBUFFERID, bufferID, view);
int view2set = docPosInfo >> 30;
int index2Switch = (docPosInfo << 2) >> 2 ;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,16 +48,16 @@ class VerticalFileSwitcher : public DockingDlgInterface {
//Activate document in scintilla by using the internal index
void activateDoc(int i) const;

int newItem(int bufferID){
return _fileListView.newItem(bufferID);
int newItem(int bufferID, int iView){
return _fileListView.newItem(bufferID, iView);
};

int closeItem(int bufferID){
return _fileListView.closeItem(bufferID);
int closeItem(int bufferID, int iView){
return _fileListView.closeItem(bufferID, iView);
};

void activateItem(int bufferID) {
_fileListView.activateItem(bufferID);
void activateItem(int bufferID, int iView) {
_fileListView.activateItem(bufferID, iView);
};

void setItemIconStatus(int bufferID) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,24 +103,25 @@ void VerticalFileSwitcherListView::initList()
}
}

int VerticalFileSwitcherListView::getBufferIDFromIndex(int index) const {
int VerticalFileSwitcherListView::getBufferInfoFromIndex(int index, int & view) const {
if (index < 0 || index >= int(_taskListInfo._tlfsLst.size()))
return -1;
view = _taskListInfo._tlfsLst[index]._iView;
return int(_taskListInfo._tlfsLst[index]._bufID);
}

int VerticalFileSwitcherListView::newItem(int bufferID)
int VerticalFileSwitcherListView::newItem(int bufferID, int iView)
{
int i = find(bufferID);
int i = find(bufferID, iView);
if (i == -1)
{
i = add(bufferID);
i = add(bufferID, iView);
}
return i;
}
void VerticalFileSwitcherListView::setItemIconStatus(int bufferID)
{
int i = find(bufferID);
int i = find(bufferID, MAIN_VIEW);
if (i != -1)
{
Buffer *buf = (Buffer *)bufferID;
Expand All @@ -136,30 +137,30 @@ void VerticalFileSwitcherListView::setItemIconStatus(int bufferID)
}
}

int VerticalFileSwitcherListView::closeItem(int bufferID)
int VerticalFileSwitcherListView::closeItem(int bufferID, int iView)
{
int i = find(bufferID);
int i = find(bufferID, iView);
if (i != -1)
remove(i);
return i;
}

void VerticalFileSwitcherListView::activateItem(int bufferID)
void VerticalFileSwitcherListView::activateItem(int bufferID, int iView)
{
int i = find(bufferID);
int i = find(bufferID, iView);
if (i == -1)
{
newItem(bufferID);
newItem(bufferID, iView);
}
ListView_SetItemState(_hSelf, i, LVIS_FOCUSED|LVIS_SELECTED, LVIS_FOCUSED|LVIS_SELECTED);
}

int VerticalFileSwitcherListView::add(int bufferID)
int VerticalFileSwitcherListView::add(int bufferID, int iView)
{
int index = int(_taskListInfo._tlfsLst.size());
const TCHAR *fn = ((Buffer *)bufferID)->getFileName();

_taskListInfo._tlfsLst.push_back(TaskLstFnStatus(0, 0, fn, 0, (void *)bufferID));
_taskListInfo._tlfsLst.push_back(TaskLstFnStatus(iView, 0, fn, 0, (void *)bufferID));

LVITEM item;
item.mask = LVIF_TEXT | LVIF_IMAGE;
Expand All @@ -180,13 +181,14 @@ void VerticalFileSwitcherListView::remove(int index)
ListView_DeleteItem(_hSelf, index);
}

int VerticalFileSwitcherListView::find(int bufferID) const
int VerticalFileSwitcherListView::find(int bufferID, int iView) const
{
bool found = false;
size_t i = 0;
for (; i < _taskListInfo._tlfsLst.size() ; i++)
{
if (_taskListInfo._tlfsLst[i]._bufID == (void *)bufferID)
if (_taskListInfo._tlfsLst[i]._bufID == (void *)bufferID &&
_taskListInfo._tlfsLst[i]._iView == iView)
{
found = true;
break;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,13 @@ class VerticalFileSwitcherListView : public Window
virtual void init(HINSTANCE hInst, HWND parent, HIMAGELIST hImaLst);
virtual void destroy();
void initList();
int getBufferIDFromIndex(int index) const;
int getBufferInfoFromIndex(int index, int & view) const;
void setBgColour(int i) {
ListView_SetItemState(_hSelf, i, LVIS_SELECTED|LVIS_FOCUSED, 0xFF);
}
int newItem(int bufferID);
int closeItem(int bufferID);
void activateItem(int bufferID);
int newItem(int bufferID, int iView);
int closeItem(int bufferID, int iView);
void activateItem(int bufferID, int iView);
void setItemIconStatus(int bufferID);

protected:
Expand All @@ -49,8 +49,8 @@ class VerticalFileSwitcherListView : public Window
return (((VerticalFileSwitcherListView *)(::GetWindowLongPtr(hwnd, GWL_USERDATA)))->runProc(hwnd, Message, wParam, lParam));
};

int find(int bufferID) const;
int add(int bufferID);
int find(int bufferID, int iView) const;
int add(int bufferID, int iView);
void remove(int index);
};

Expand Down

0 comments on commit f6bbff5

Please sign in to comment.