[NEW_FEDATURE] Implement VerticalFileSwitcher feature (in progress).

git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository/trunk@774 f5eea248-9336-0410-98b8-ebc06183d4e3
This commit is contained in:
Don Ho 2011-06-13 01:24:00 +00:00
parent ffb79104f6
commit b32e972221
13 changed files with 227 additions and 246 deletions

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="Windows-1252" ?>
<!--
Suomenkielinen lokalisointi Notepad++ 5.8.7 / Finnish localization
Viimeisin muokkaaja: Teijo, 11.2.2011 ver II
Suomenkielinen lokalisointi Notepad++ 5.9 / Finnish localization
Viimeisin muokkaaja: Teijo, 31.3.2011
Lähetä käännösvirhehavaintosi ja korjausehdotuksesi osoitteeseen teijo(at)nettilinja.fi
Asennusohjeet => https://sourceforge.net/forum/message.php?msg_id=5691520
-->
@ -34,6 +34,7 @@ Asennusohjeet => https://sourceforge.net/forum/message.php?msg_id=5691520
<Item posX="1" posY="14" name="Automaattiset täydennykset"/>
<Item posX="1" posY="15" name="Rivin loppumerkit (EOL)"/>
<Item posX="1" posY="16" name="Välilyöntien käsittely"/>
<Item posX="1" posY="17" name="Liitä erikoistekstiä"/>
<Item posX="2" posY="16" name="Samanlaisten korostaminen"/>
<Item posX="2" posY="17" name="Korostusten poistaminen"/>
@ -41,6 +42,7 @@ Asennusohjeet => https://sourceforge.net/forum/message.php?msg_id=5691520
<Item posX="2" posY="19" name="Taaksepäin korostustyyliin"/>
<Item posX="2" posY="21" name="Kirjanmerkit"/>
<Item posX="3" posY="4" name="Erityismerkit"/>
<Item posX="3" posY="5" name="Suurennus"/>
<Item posX="3" posY="6" name="Näkymät ja istunnot"/>
<Item posX="3" posY="16" name="Sulje lohkot tasolle"/>
@ -122,6 +124,9 @@ Asennusohjeet => https://sourceforge.net/forum/message.php?msg_id=5691520
<Item id="42034" name="&amp;Sarake-editori..."/>
<Item id="42035" name="Kommentoi (rivimoodi)"/>
<Item id="42036" name="Poista kommentointi (rivimoodi)"/>
<Item id="42037" name="Sarake-editointitila"/>
<Item id="42038" name="Liitä HTML-sisältö"/>
<Item id="42039" name="Liitä RTF-sisältö"/>
<Item id="42040" name="Avaa kaikki &amp;viimeisimmät tiedostot"/>
<Item id="42041" name="Ty&amp;hjennä viimeisimpien tiedostojen luettelo"/>
<Item id="42042" name="Poista välilyönnit rivien aluista"/>
@ -130,7 +135,9 @@ Asennusohjeet => https://sourceforge.net/forum/message.php?msg_id=5691520
<Item id="42045" name="Poista tarpeettomat välilyönnit ja loppumerkit"/>
<Item id="42046" name="Korvaa tabuloinnit välilyönneillä"/>
<Item id="42047" name="Korvaa välilyönnit tabuloinneilla"/>
<Item id="42048" name="Kopioi binäärisisältö"/>
<Item id="42049" name="Leikkaa binäärisisältö"/>
<Item id="42050" name="Liitä binäärisisältö"/>
<Item id="43001" name="&amp;Etsi..."/>
<Item id="43002" name="Etsi &amp;seuraava"/>
<Item id="43003" name="Korvaa..."/>

View File

@ -4,6 +4,7 @@
Last modified Wednesday, Mart 11th 2010 18:06 GMT by Čâŕí Ńňŕđ÷ĺâčž.
Please e-mail errors, suggestions etc. to ivanstar61 at gmail.com.
-->
<NotepadPlus>
<Native-Langue name="Ńđďńęč" filename="SerbianCir.xml" >
<Menu>
@ -32,11 +33,14 @@
<Item posX="1" posY="13" name="Íŕďîěĺíŕ/Áĺç íŕďîěĺíĺ"/>
<Item posX="1" posY="14" name="Ŕóňîěŕňńęî čçâđřĺśĺ"/>
<Item posX="1" posY="15" name="Ďđîěĺíŕ çŕâđřĺňęŕ đĺäŕ"/>
<Item posX="2" posY="14" name="Îáĺëĺćč ńâĺ"/>
<Item posX="2" posY="15" name="Óęëîíč ńâĺ"/>
<Item posX="2" posY="16" name="Čäč ăîđĺ"/>
<Item posX="2" posY="17" name="Čäč äîëĺ"/>
<Item posX="3" posY="4" name="Ďđčęŕćč çíŕę"/>
<Item posX="1" posY="16" name="Празна операција"/>
<Item posX="1" posY="17" name="Налепи посебно"/>
<Item posX="2" posY="16" name="Означи све"/>
<Item posX="2" posY="17" name="Одзначи све"/>
<Item posX="2" posY="18" name="Иди горе"/>
<Item posX="2" posY="19" name="Иди доле"/>
<Item posX="2" posY="21" name="Забелешке"/>
<Item posX="3" posY="4" name="Прикажи симбол"/>
<Item posX="3" posY="5" name="ÓâĺžŕĽ"/>
<Item posX="3" posY="6" name="Ďîěĺđč ňđĺíóňíč äîęóěĺíň"/>
<Item posX="3" posY="16" name="Ďŕä íčâîŕ"/>
@ -87,7 +91,7 @@
<Item id="42004" name="&amp;Ďîíîâč"/>
<Item id="42005" name="&amp;Íŕëĺďč"/>
<Item id="42006" name="&amp;Čçáđčřč"/>
<Item id="42007" name="Îäŕáĺđč ń&amp;âĺ"/>
<Item id="42007" name="Изабери с&amp;ве"/>
<Item id="42008" name="ĎîâĺžŕĽ óâó÷ĺíč đĺä"/>
<Item id="42009" name="Ńěŕśč óâó÷ĺíč đĺä"/>
<Item id="42010" name="Äóďëčđ༠ňđĺíóňíč đĺä"/>
@ -102,6 +106,12 @@
<Item id="42021" name="&amp;Ďóńňč ńíčěšĺíî"/>
<Item id="42022" name="Ďđĺáŕöč çŕóńňŕâšĺíó íŕďîěĺíó"/>
<Item id="42023" name="Ňĺęóžŕ íŕďîěĺíŕ"/>
<Item id="42042" name="Исеци размак"/>
<Item id="42043" name="Дотерај водећи и простор траке"/>
<Item id="42044" name="Промена завршетка реда за простор"/>
<Item id="42045" name="Уклони непотребне празнине и промени завршетак реда"/>
<Item id="42046" name="TAB за простор"/>
<Item id="42047" name="Простор за TAB"/>
<Item id="42024" name="Ďîäĺńč ďđĺîńňŕëč ďđîńňîđ"/>
<Item id="42025" name="Ńŕ÷óâ༠ňđĺíóňíî ńíčěšĺíč ěŕęđî"/>
<Item id="42026" name="Ńěĺđ ňĺęńňŕ ń äĺńíŕ íŕ ëĺâî"/>
@ -159,8 +169,11 @@
<Item id="43043" name="5. ńňčë"/>
<Item id="43044" name="Íŕ<C38D>č ńňčë"/>
<Item id="43045" name="Čńőîä ďđĺňđŕăĺ"/>
<Item id="43046" name="Ńëĺäĺžĺ čńőîä ďđĺňđŕăĺ"/>
<Item id="43046" name="Следећи исход претраге"/>
<Item id="43047" name="Ďđĺňőîäíč čńőîä ďđĺňđŕăĺ"/>
<Item id="43048" name="Изабери и пронађи следеће"/>
<Item id="43049" name="Изабери и нађи претходно"/>
<Item id="43050" name="Обрнуте забелешке"/>
<Item id="44009" name="Îęŕ÷č"/>
<Item id="44010" name="Óđîë༠ńâĺ íčâîĺ"/>
<Item id="44011" name="Ęîđčńíč÷ęč îäđĺ<C491>ĺíč äčĽŕëîă..."/>
@ -177,8 +190,9 @@
<Item id="44032" name="Ďđčęŕćč íŕ öĺëîě ĺęđŕíó"/>
<Item id="44033" name="Âđŕňč íŕ ďîäđŕçóěĺâŕíî"/>
<Item id="44034" name="Óâĺę íŕ âđőó"/>
<Item id="44035" name="Óďŕđŕäčňĺ óńďđŕâíî ďîěĺđŕśĺ"/>
<Item id="44036" name="Óďŕđŕäčňĺ âîäîđŕâíî ďîěĺđŕśĺ"/>
<Item id="44049" name="Резиме..."/>
<Item id="44035" name="Усклади усправно померање"/>
<Item id="44036" name="Усклади водоравно померање"/>
<Item id="44041" name="Ďđčęŕćč çíŕę ďđĺëîěŕ đĺäŕ"/>
<Item id="44072" name="Óńđĺäńđĺäč ńĺ íŕ äđóăč ďđčęŕç"/>
@ -189,12 +203,12 @@
<Item id="45005" name="Ęîäčđ༠ó UTF-8"/>
<Item id="45006" name="Ęîäčđ༠ó UCS-2 Big Endian"/>
<Item id="45007" name="Ęîäčđ༠ó UCS-2 Little Endian"/>
<Item id="45008" name="Ęîäčđ༠ó UTF-8 áĺç BOM"/>
<Item id="45009" name="Ďđĺňâîđč ó ANSI"/>
<Item id="45010" name="Ďđĺňâîđč ó UTF-8 áĺç BOM"/>
<Item id="45011" name="Ďđĺňâîđč ó UTF-8"/>
<Item id="45012" name="Ďđĺňâîđč ó UCS-2 Big Endian"/>
<Item id="45013" name="Ďđĺňâîđč ó UCS-2 Little Endian"/>
<Item id="45008" name="Кодирај у UTF-8 without BOM"/>
<Item id="45009" name="Пребаци у ANSI"/>
<Item id="45010" name="Пребаци у UTF-8 without BOM"/>
<Item id="45011" name="Пребаци у UTF-8"/>
<Item id="45012" name="Пребаци у UCS-2 Big Endian"/>
<Item id="45013" name="Пребаци у UCS-2 Little Endian"/>
<Item id="10001" name="Ďđčęŕç ó äđóăîě äĺëó - îďîçîâč"/>
<Item id="10002" name="Äóďëč ďđčęŕç"/>
@ -215,7 +229,7 @@
<Item id="48005" name="Óâîç äîäŕňŕęŕ ..."/>
<Item id="48006" name="Óâîç ňĺěŕ ..."/>
<Item id="48009" name="ĘîěáčíŕöčĽĺ ňŕńňĺđŕ..."/>
<Item id="48011" name="Ďîńňŕâęĺ..."/>
<Item id="48011" name="Подешавања..."/>
<Item id="49000" name="&amp;Ďîęđĺíč..."/>
<Item id="50000" name="Äîďóíŕ ôóíęöčĽŕ"/>
@ -225,7 +239,9 @@
<Item id="44042" name="ŃŕęđčĽ đĺäîâĺ"/>
<Item id="42040" name="Îňâîđč ńâĺ íĺäŕâíĺ äŕňîňĺęĺ"/>
<Item id="42041" name="Î÷čńňč ńďčńŕę íĺäŕâíčő äŕňîňĺęŕ"/>
<Item id="48016" name="Измени пречицу/Избриши Макро..."/>
<Item id="48017" name="Измени пречицу/Избриши команду..."/>
<Item id="48018" name="Уређивање искачућег изборног оквира"/>
</Commands>
</Main>
<Splitter>
@ -264,7 +280,7 @@
<Item id="1614" name="ĎđĺáđîĽ"/>
<Item id="1615" name="Ďđîíŕ<C3AD>č ńâĺ"/>
<Item id="1616" name="Îáĺëĺćč đĺä"/>
<Item id="1617" name="Čńňŕęíóňč ďđîíŕ<C3AD>ĺíî"/>
<Item id="1617" name="Истакни пронађено"/>
<Item id="1618" name="Çŕ ńâŕęó ďđĺňđŕăó"/>
<Item id="1621" name="Ńěĺđ"/>
<Item id="1611" name="Çŕěĺ&amp;íč ńŕ:"/>
@ -281,7 +297,7 @@
<Item id="1654" name="Ôčëňĺđč:"/>
<Item id="1655" name="Ôŕńöčęëŕ:"/>
<Item id="1656" name="Íŕ<C38D>č ńâĺ"/>
<Item id="1658" name="Ó ńâčě ďîňôŕńöčęëŕěŕ"/>
<Item id="1658" name="У свим подфасциклама"/>
<Item id="1659" name="Ó ńŕęđčâĺíčě ôŕńö."/>
<Item id="1624" name="Íŕ÷čí ďđĺňđŕăĺ"/>
<Item id="1625" name="Óîáč÷ŕĽĺí"/>
@ -332,9 +348,9 @@
<Item id="2227" name="Ďîäđŕçóěĺâŕíŕ áîĽŕ ďîçŕäčíĺ"/>
<Item id="2228" name="Ďîäđŕçóěĺâŕíî ďčńěî"/>
<Item id="2229" name="Ďîäđŕçóěĺâŕíŕ âĺëč÷číŕ ńëîâŕ"/>
<Item id="2230" name="Ďîäđŕçóěĺâŕíî ďîäĺášŕíŕ ńëîâŕ"/>
<Item id="2231" name="Ďîäđŕçóěĺâŕíî óęîřĺíŕ ńëîâŕ"/>
<Item id="2232" name="Ďîäđŕçóěĺâŕíî ďîäâó÷ĺíŕ ńëîâŕ"/>
<Item id="2230" name="Подразумевана подебљана слова"/>
<Item id="2231" name="Подразумевана укошена слова"/>
<Item id="2232" name="Подразумевана подвучена слова"/>
</SubDialog>
</StyleConfig>
@ -348,11 +364,13 @@
<Item id="20009" name="Íŕńňŕâŕę:"/>
<Item id="20012" name="Çŕíĺěŕđč Â/ě ńëîâŕ"/>
<Item id="20011" name="Ďđîâčäíîńň"/>
<Item id="20016" name="Увоз..."/>
<Item id="20015" name="Извоз..."/>
<Item id="0" name="Âđńňŕ áîĽĺ"/>
<Item id="1" name="ÁîĽŕ ńëîâŕ"/>
<Item id="2" name="ÁîĽŕ ďîçŕäčíĺ"/>
<Item id="3" name="Ńňčë ńëîâŕ"/>
<Item id="4" name="Čěĺ ńëîâŕ :"/>
<Item id="4" name="Назив слова:"/>
<Item id="5" name="Âĺëč÷číŕ ńëîâŕ:"/>
<Item id="6" name="Ďîäĺášŕí"/>
<Item id="7" name="Čńęîřĺí"/>
@ -407,7 +425,7 @@
<Item id="6107" name="Ńěŕśč"/>
<Item id="6108" name="Çŕęšó÷༠(áĺç ďđĺâëŕ÷ĺśŕ)"/>
<Item id="6109" name="Ďîňŕěíč íĺŕęňčâíĺ ęŕđňčöĺ"/>
<Item id="6110" name="Îáĺëĺćč ňđĺíóňíó ęŕđňčöč"/>
<Item id="6110" name="Обележи тренутну картицу"/>
<Item id="6111" name="Ďđčęŕćč ńňŕňóńíó ňđŕęó"/>
<Item id="6112" name="Ďđčęŕćč äóăěĺ çŕ çŕňâŕđŕśĺ"/>
@ -433,6 +451,12 @@
<Item id="6203" name="Ńňđĺëčöŕ"/>
<Item id="6204" name="Ęđóă-äđâî"/>
<Item id="6205" name="Ęâŕäđŕň-äđâî"/>
<Item id="6226" name="Ниједан"/>
<Item id="6227" name="Линија прелома"/>
<Item id="6228" name="Подразумевано"/>
<Item id="6229" name="Поравнат"/>
<Item id="6230" name="Увлачење"/>
<Item id="6206" name="Ďđčęŕćč áđîĽ đĺäŕ"/>
<Item id="6207" name="Ďđčęŕćč çŕáĺëĺćĺíĺ"/>
@ -509,7 +533,7 @@
<Item id="6305" name="Íĺ ďđîâĺđŕâ༠ďđč ďîęđĺňŕśó"/>
<Item id="6306" name="ÍŕĽâĺžč áđîĽ ó ďđîřëîńňč:"/>
<Item id="6307" name="Îěîăóžč"/>
<Item id="6308" name="Ńěŕśč ó ńňŕđňíč ďëŕňî"/>
<Item id="6308" name="Умањи у стартни плато"/>
<Item id="6309" name="Çŕďŕěňč ňđĺíóňíó ńĺńčĽó çŕ ńëĺäĺžč ďóň"/>
<Item id="6312" name="Ńŕěîďđĺďîçíŕâŕśĺ ńňŕňóńŕ äŕňîňĺęĺ"/>
<Item id="6313" name="Ňčőî ŕćóđčđŕśĺ"/>

View File

@ -2673,26 +2673,30 @@ void Notepad_plus::loadBufferIntoView(BufferID id, int whichOne, bool dontClose)
tabToOpen->setBuffer(0, id); //index 0 since only one open
activateBuffer(id, whichOne); //activate. DocTab already activated but not a problem
MainFileManager->closeBuffer(idToClose, viewToOpen); //delete the buffer
if (_pFileSwitcherPanel)
_pFileSwitcherPanel->closeItem((int)idToClose);
} else {
tabToOpen->addBuffer(id);
}
}
void Notepad_plus::removeBufferFromView(BufferID id, int whichOne) {
bool Notepad_plus::removeBufferFromView(BufferID id, int whichOne) {
DocTabView * tabToClose = (whichOne == MAIN_VIEW)?&_mainDocTab:&_subDocTab;
ScintillaEditView * viewToClose = (whichOne == MAIN_VIEW)?&_mainEditView:&_subEditView;
//check if buffer exists
int index = tabToClose->getIndexByBuffer(id);
if (index == -1) //doesn't exist, done
return;
return false;
Buffer * buf = MainFileManager->getBufferByID(id);
//Cannot close doc if last and clean
if (tabToClose->nbItem() == 1) {
if (!buf->isDirty() && buf->isUntitled()) {
return; //done
if (tabToClose->nbItem() == 1)
{
if (!buf->isDirty() && buf->isUntitled())
{
return false;
}
}
@ -2719,6 +2723,7 @@ void Notepad_plus::removeBufferFromView(BufferID id, int whichOne) {
}
MainFileManager->closeBuffer(id, viewToClose);
return true;
}
int Notepad_plus::switchEditViewTo(int gid)
@ -4225,6 +4230,11 @@ void Notepad_plus::notifyBufferActivated(BufferID bufid, int view)
scnN.nmhdr.idFrom = (uptr_t)bufid;
_pluginsManager.notify(&scnN);
if (_pFileSwitcherPanel)
{
_pFileSwitcherPanel->activateItem((int)bufid);
}
_linkTriggered = true;
}

View File

@ -441,7 +441,7 @@ private:
void docOpenInNewInstance(FileTransferMode mode, int x = 0, int y = 0);
void loadBufferIntoView(BufferID id, int whichOne, bool dontClose = false); //Doesnt _activate_ the buffer
void removeBufferFromView(BufferID id, int whichOne); //Activates alternative of possible, or creates clean document if not clean already
bool removeBufferFromView(BufferID id, int whichOne); //Activates alternative of possible, or creates clean document if not clean already
bool activateBuffer(BufferID id, int whichOne); //activate buffer in that view if found
void notifyBufferActivated(BufferID bufid, int view);

View File

@ -21,7 +21,7 @@
#include "ShortcutMapper.h"
#include "TaskListDlg.h"
#include "clipboardFormats.h"
#include "VerticalFileSwitcher.h"
void Notepad_plus::macroPlayback(Macro macro)
{
@ -847,6 +847,8 @@ void Notepad_plus::command(int id)
{
Buffer * buf = _pEditView->getCurrentBuffer();
buf->setUserReadOnly(!buf->getUserReadOnly());
if (_pFileSwitcherPanel)
_pFileSwitcherPanel->setItemIconStatus((int)buf);
}
break;
@ -858,8 +860,9 @@ void Notepad_plus::command(int id)
dwFileAttribs ^= FILE_ATTRIBUTE_READONLY;
::SetFileAttributes(buf->getFullPathName(), dwFileAttribs);
buf->setFileReadOnly(false);
if (_pFileSwitcherPanel)
_pFileSwitcherPanel->setItemIconStatus((int)buf);
}
break;

View File

@ -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, fileName);
_pFileSwitcherPanel->newItem((int)buf);
}
else
{
@ -202,7 +202,7 @@ BufferID Notepad_plus::doOpen(const TCHAR *fileName, bool isReadOnly, int encodi
pNppParam->safeWow64EnableWow64FsRedirection(TRUE);
isWow64Off = false;
}
return buffer;;
return buffer;
}
bool Notepad_plus::doReload(BufferID id, bool alert)
@ -317,17 +317,20 @@ void Notepad_plus::doClose(BufferID id, int whichOne) {
int nrDocs = whichOne==MAIN_VIEW?(_mainDocTab.nbItem()):(_subDocTab.nbItem());
//Do all the works
removeBufferFromView(id, whichOne);
bool isBufRemoved = removeBufferFromView(id, whichOne);
if (nrDocs == 1 && canHideView(whichOne))
{ //close the view if both visible
hideView(whichOne);
}
// Notify plugins that current file is closed
if (isBufRemoved)
{
scnN.nmhdr.code = NPPN_FILECLOSED;
_pluginsManager.notify(&scnN);
if (_pFileSwitcherPanel)
_pFileSwitcherPanel->closeItem((int)id);
}
return;
}
@ -881,6 +884,7 @@ void Notepad_plus::fileOpen()
void Notepad_plus::fileNew()
{
BufferID newBufID = MainFileManager->newEmptyDocument();
loadBufferIntoView(newBufID, currentView(), true); //true, because we want multiple new files if possible
activateBuffer(newBufID, currentView());
}

View File

@ -18,6 +18,7 @@
#include "precompiledHeaders.h"
#include "Notepad_plus_Window.h"
#include "xmlMatchedTagsHighlighter.h"
#include "VerticalFileSwitcher.h"
BOOL Notepad_plus::notify(SCNotification *notification)
{
@ -52,142 +53,6 @@ BOOL Notepad_plus::notify(SCNotification *notification)
{
prevWasEdit = false;
}
/*
if (!_isFileOpening && (isFromPrimary || isFromSecondary) && _pEditView->hasMarginShowed(ScintillaEditView::_SC_MARGE_MODIFMARKER))
{
bool isProcessed = false;
int fromLine = _pEditView->execute(SCI_LINEFROMPOSITION, notification->position);
pair<size_t, bool> undolevel = _pEditView->getLineUndoState(fromLine);
if ((notification->modificationType & (SC_MOD_DELETETEXT | SC_MOD_INSERTTEXT)) &&
(notification->modificationType & SC_PERFORMED_USER))
{
//printStr(TEXT("user type"));
_pEditView->setLineUndoState(fromLine, undolevel.first+1);
_pEditView->execute(SCI_MARKERADD, fromLine, MARK_LINEMODIFIEDUNSAVED);
_pEditView->execute(undolevel.second?SCI_MARKERADD:SCI_MARKERDELETE, fromLine, MARK_LINEMODIFIEDSAVED);
if (notification->linesAdded > 0)
{
for (int i = 0 ; i < notification->linesAdded ; i++)
{
++fromLine;
_pEditView->execute(SCI_MARKERADD, fromLine, MARK_LINEMODIFIEDUNSAVED);
pair<size_t, bool> modifInfo = _pEditView->getLineUndoState(fromLine);
_pEditView->execute(modifInfo.second?SCI_MARKERADD:SCI_MARKERDELETE, fromLine, MARK_LINEMODIFIEDSAVED);
}
}
}
if ((notification->modificationType & (SC_MOD_DELETETEXT | SC_MOD_INSERTTEXT)) &&
(notification->modificationType & SC_PERFORMED_REDO) &&
(notification->modificationType & SC_MULTISTEPUNDOREDO))
{
//printStr(TEXT("redo multiple"));
isProcessed = true;
_pEditView->setLineUndoState(fromLine, undolevel.first+1);
_pEditView->execute(SCI_MARKERADD, fromLine, MARK_LINEMODIFIEDUNSAVED);
if (notification->linesAdded > 0)
{
for (int i = 0 ; i < notification->linesAdded ; i++)
{
++fromLine;
_pEditView->execute(SCI_MARKERADD, fromLine, MARK_LINEMODIFIEDUNSAVED);
pair<size_t, bool> modifInfo = _pEditView->getLineUndoState(fromLine);
_pEditView->execute(modifInfo.second?SCI_MARKERADD:SCI_MARKERDELETE, fromLine, MARK_LINEMODIFIEDSAVED);
}
}
}
if ((notification->modificationType & (SC_MOD_DELETETEXT | SC_MOD_INSERTTEXT)) &&
(notification->modificationType & SC_PERFORMED_UNDO) &&
(notification->modificationType & SC_MULTISTEPUNDOREDO))
{
//printStr(TEXT("undo multiple"));
isProcessed = true;
--undolevel.first;
if (undolevel.first == 0)
{
_pEditView->execute(SCI_MARKERDELETE, fromLine, MARK_LINEMODIFIEDUNSAVED);
}
else
{
_pEditView->execute(SCI_MARKERADD, fromLine, MARK_LINEMODIFIEDUNSAVED);
}
_pEditView->execute(undolevel.second?SCI_MARKERADD:SCI_MARKERDELETE, fromLine, MARK_LINEMODIFIEDSAVED);
_pEditView->setLineUndoState(fromLine, undolevel.first);
if (notification->linesAdded > 0)
{
for (int i = fromLine + 1 ; i < fromLine + notification->linesAdded ; i++)
{
pair<size_t, bool> level = _pEditView->getLineUndoState(i);
if (level.first > 0)
_pEditView->execute(SCI_MARKERADD, i, MARK_LINEMODIFIEDUNSAVED);
_pEditView->execute(level.second?SCI_MARKERADD:SCI_MARKERDELETE, fromLine, MARK_LINEMODIFIEDSAVED);
}
}
}
if ((notification->modificationType & (SC_MOD_DELETETEXT | SC_MOD_INSERTTEXT)) &&
(notification->modificationType & SC_PERFORMED_REDO) &&
(notification->modificationType & SC_LASTSTEPINUNDOREDO) && !isProcessed)
{
//printStr(TEXT("redo LASTO"));
_pEditView->setLineUndoState(fromLine, undolevel.first+1);
_pEditView->execute(SCI_MARKERADD, fromLine, MARK_LINEMODIFIEDUNSAVED);
_pEditView->execute(undolevel.second?SCI_MARKERADD:SCI_MARKERDELETE, fromLine, MARK_LINEMODIFIEDSAVED);
if (notification->linesAdded > 0)
{
for (int i = 0 ; i < notification->linesAdded ; i++)
{
++fromLine;
_pEditView->execute(SCI_MARKERADD, fromLine, MARK_LINEMODIFIEDUNSAVED);
pair<size_t, bool> modifInfo = _pEditView->getLineUndoState(fromLine);
_pEditView->execute(modifInfo.second?SCI_MARKERADD:SCI_MARKERDELETE, fromLine, MARK_LINEMODIFIEDSAVED);
}
}
}
if ((notification->modificationType & (SC_MOD_DELETETEXT | SC_MOD_INSERTTEXT)) &&
(notification->modificationType & SC_PERFORMED_UNDO) &&
(notification->modificationType & SC_LASTSTEPINUNDOREDO) && !isProcessed)
{
//printStr(TEXT("undo LASTO"));
--undolevel.first;
if (undolevel.first == 0)
{
_pEditView->execute(SCI_MARKERDELETE, fromLine, MARK_LINEMODIFIEDUNSAVED);
}
else
{
_pEditView->execute(SCI_MARKERADD, fromLine, MARK_LINEMODIFIEDUNSAVED);
}
_pEditView->execute(undolevel.second?SCI_MARKERADD:SCI_MARKERDELETE, fromLine, MARK_LINEMODIFIEDSAVED);
_pEditView->setLineUndoState(fromLine, undolevel.first);
if (notification->linesAdded > 0)
{
for (int i = fromLine + 1 ; i < fromLine + notification->linesAdded ; i++)
{
pair<size_t, bool> level = _pEditView->getLineUndoState(i);
if (level.first > 0)
_pEditView->execute(SCI_MARKERADD, i, MARK_LINEMODIFIEDUNSAVED);
_pEditView->execute(level.second?SCI_MARKERADD:SCI_MARKERDELETE, fromLine, MARK_LINEMODIFIEDSAVED);
}
}
}
}
*/
}
break;
@ -215,8 +80,13 @@ BOOL Notepad_plus::notify(SCNotification *notification)
break;
}
}
buf->setDirty(notification->nmhdr.code == SCN_SAVEPOINTLEFT);
break; }
bool isDirty = notification->nmhdr.code == SCN_SAVEPOINTLEFT;
buf->setDirty(isDirty);
if (_pFileSwitcherPanel)
_pFileSwitcherPanel->setItemIconStatus((int)buf);
break;
}
case SCN_MODIFYATTEMPTRO :
// on fout rien

View File

@ -97,17 +97,6 @@ void VerticalFileSwitcher::activateDoc(int i) const
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);
}
int VerticalFileSwitcher::newItem(int bufferID, const TCHAR *fn)
{
return _fileListView.newItem(bufferID, fn);
}
int VerticalFileSwitcher::closeItem(int bufferID)
{
return _fileListView.closeItem(bufferID);
}

View File

@ -48,8 +48,21 @@ public:
//Activate document in scintilla by using the internal index
void activateDoc(int i) const;
int newItem(int bufferID, const TCHAR *fn);
int closeItem(int bufferID);
int newItem(int bufferID){
return _fileListView.newItem(bufferID);
};
int closeItem(int bufferID){
return _fileListView.closeItem(bufferID);
};
void activateItem(int bufferID) {
_fileListView.activateItem(bufferID);
};
void setItemIconStatus(int bufferID) {
_fileListView.setItemIconStatus(bufferID) ;
};
protected:
virtual BOOL CALLBACK VerticalFileSwitcher::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam);

View File

@ -17,6 +17,7 @@
#include "precompiledHeaders.h"
#include "VerticalFileSwitcherListView.h"
#include "Buffer.h"
void VerticalFileSwitcherListView::init(HINSTANCE hInst, HWND parent, HIMAGELIST hImaLst)
{
@ -108,9 +109,56 @@ int VerticalFileSwitcherListView::getBufferIDFromIndex(int index) const {
return int(_taskListInfo._tlfsLst[index]._bufID);
}
int VerticalFileSwitcherListView::newItem(int bufferID, const TCHAR *fn)
int VerticalFileSwitcherListView::newItem(int bufferID)
{
int i = find(bufferID);
if (i == -1)
{
i = add(bufferID);
}
return i;
}
void VerticalFileSwitcherListView::setItemIconStatus(int bufferID)
{
int i = find(bufferID);
if (i != -1)
{
Buffer *buf = (Buffer *)bufferID;
LVITEM item;
item.mask = LVIF_TEXT | LVIF_IMAGE;
item.pszText = (TCHAR *)::PathFindFileName(buf->getFileName());
item.iItem = i;
item.iSubItem = 0;
item.iImage = buf->getUserReadOnly()||buf->getFileReadOnly()?2:(buf->isDirty()?1:0);
ListView_SetItem(_hSelf, &item);
}
}
int VerticalFileSwitcherListView::closeItem(int bufferID)
{
int i = find(bufferID);
if (i != -1)
remove(i);
return i;
}
void VerticalFileSwitcherListView::activateItem(int bufferID)
{
int i = find(bufferID);
if (i == -1)
{
newItem(bufferID);
}
ListView_SetItemState(_hSelf, i, LVIS_FOCUSED|LVIS_SELECTED, LVIS_FOCUSED|LVIS_SELECTED);
}
int VerticalFileSwitcherListView::add(int bufferID)
{
int index = int(_taskListInfo._tlfsLst.size());
const TCHAR *fn = ((Buffer *)bufferID)->getFileName();
_taskListInfo._tlfsLst.push_back(TaskLstFnStatus(0, 0, fn, 0, (void *)bufferID));
LVITEM item;
@ -119,18 +167,24 @@ int VerticalFileSwitcherListView::newItem(int bufferID, const TCHAR *fn)
item.pszText = (TCHAR *)::PathFindFileName(fn);
item.iItem = index;
item.iSubItem = 0;
item.iImage = 0;
ListView_InsertItem(_hSelf, &item);
ListView_SetItemState(_hSelf, index, LVIS_FOCUSED|LVIS_SELECTED, LVIS_FOCUSED|LVIS_SELECTED);
return index;
}
int VerticalFileSwitcherListView::closeItem(int bufferID)
void VerticalFileSwitcherListView::remove(int index)
{
_taskListInfo._tlfsLst.erase(_taskListInfo._tlfsLst.begin() + index);
ListView_DeleteItem(_hSelf, index);
}
int VerticalFileSwitcherListView::find(int bufferID) const
{
bool found = false;
for (size_t i = 0 ; i < _taskListInfo._tlfsLst.size() ; i++)
size_t i = 0;
for (; i < _taskListInfo._tlfsLst.size() ; i++)
{
if (_taskListInfo._tlfsLst[i]._bufID == (void *)bufferID)
{
@ -138,5 +192,6 @@ int VerticalFileSwitcherListView::closeItem(int bufferID)
break;
}
}
return 0;
return (found?i:-1);
}

View File

@ -34,8 +34,10 @@ public:
void setBgColour(int i) {
ListView_SetItemState(_hSelf, i, LVIS_SELECTED|LVIS_FOCUSED, 0xFF);
}
int newItem(int bufferID, const TCHAR *fn);
int newItem(int bufferID);
int closeItem(int bufferID);
void activateItem(int bufferID);
void setItemIconStatus(int bufferID);
protected:
TaskListInfo _taskListInfo;
@ -46,6 +48,10 @@ protected:
static LRESULT CALLBACK staticProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
return (((VerticalFileSwitcherListView *)(::GetWindowLongPtr(hwnd, GWL_USERDATA)))->runProc(hwnd, Message, wParam, lParam));
};
int find(int bufferID) const;
int add(int bufferID);
void remove(int index);
};

View File

@ -69,7 +69,7 @@ void LastRecentFileList::updateMenu() {
//Then readd them, so everything stays in sync
TCHAR buffer[MAX_PATH];
for(int j = 0; j < _size; j++) {
BuildMenuFileName(buffer, 32, j, _lrfl.at(j)._name.c_str());
BuildMenuFileName(buffer, 100, j, _lrfl.at(j)._name.c_str());
::InsertMenu(_hMenu, _posBase + j, MF_BYPOSITION, _lrfl.at(j)._id, buffer);
}
}