bool DocTabView::activateBuffer(BufferID buffer) { int indexToActivate = getIndexByBuffer(buffer); if (indexToActivate == -1) return false; //cannot activate activateAt(indexToActivate); return true; }
void DocTabView::bufferUpdated(Buffer * buffer, int mask) { int index = getIndexByBuffer(buffer->getID()); if (index == -1) return; TCITEM tie; tie.lParam = -1; tie.mask = 0; if (mask & BufferChangeReadonly || mask & BufferChangeDirty) { tie.mask |= TCIF_IMAGE; tie.iImage = buffer->isDirty()?UNSAVED_IMG_INDEX:SAVED_IMG_INDEX; if (buffer->isReadOnly()) { tie.iImage = REDONLY_IMG_INDEX; } } if (mask & BufferChangeFilename) { tie.mask |= TCIF_TEXT; tie.pszText = (TCHAR *)buffer->getFileName(); } ::SendMessage(_hSelf, TCM_SETITEM, index, reinterpret_cast<LPARAM>(&tie)); ::SendMessage(_hParent, WM_SIZE, 0, 0); }
void DocTabView::bufferUpdated(Buffer * buffer, int mask) { int index = getIndexByBuffer(buffer->getID()); if (index == -1) return; TCITEM tie; tie.lParam = -1; tie.mask = 0; if (mask & BufferChangeReadonly || mask & BufferChangeDirty) { tie.mask |= TCIF_IMAGE; tie.iImage = buffer->isDirty()?UNSAVED_IMG_INDEX:SAVED_IMG_INDEX; if (buffer->isReadOnly()) { tie.iImage = REDONLY_IMG_INDEX; } } //We must make space for the added ampersand characters. TCHAR encodedLabel[2 * MAX_PATH]; if (mask & BufferChangeFilename) { tie.mask |= TCIF_TEXT; tie.pszText = (TCHAR *)encodedLabel; { const TCHAR* in = buffer->getFileName(); TCHAR* out = encodedLabel; //This code will read in one character at a time and duplicate every first ampersand(&). //ex. If input is "test & test && test &&&" then output will be "test && test &&& test &&&&". //Tab's caption must be encoded like this because otherwise tab control would make tab too small or too big for the text. while (*in != 0) if (*in == '&') { *out++ = '&'; *out++ = '&'; while (*(++in) == '&') *out++ = '&'; } else *out++ = *in++; *out = '\0'; } } ::SendMessage(_hSelf, TCM_SETITEM, index, reinterpret_cast<LPARAM>(&tie)); // send WM_SIZE only when change tab // It is needed while a tab is closed (so tab changed) in multi-line tab mode if (mask & BufferChangeRecentTag) ::SendMessage(_hParent, WM_SIZE, 0, 0); }
void DocTabView::closeBuffer(BufferID buffer) { int indexToClose = getIndexByBuffer(buffer); deletItemAt((size_t)indexToClose); ::SendMessage(_hParent, WM_SIZE, 0, 0); }