/* * Copyright 2010, Ingo Weinhold, ingo_weinhold@gmx.de. * Distributed under the terms of the MIT License. */ #include "TitlePlaceholderMapper.h" // #pragma mark - TitlePlaceholderMapper TitlePlaceholderMapper::TitlePlaceholderMapper(const ShellInfo& shellInfo, const ActiveProcessInfo& processInfo) : fShellInfo(shellInfo), fProcessInfo(processInfo) { } bool TitlePlaceholderMapper::MapPlaceholder(char placeholder, int64 number, bool numberGiven, BString& _string) { switch (placeholder) { case 'd': { // current working directory // If a number is given, extract the respective number of rightmost // components. BString directory(fProcessInfo.CurrentDirectory()); if (numberGiven && number > 0) { int32 index = directory.Length(); while (number > 0 && index > 0) { index = directory.FindLast('/', index - 1); number--; } if (number == 0 && index >= 0 && index + 1 < directory.Length()) directory.Remove(0, index + 1); } _string = directory; return true; } case 'p': // process name -- use "--", if the shell is active and it is the // default shell if (fProcessInfo.ID() == fShellInfo.ProcessID() && fShellInfo.IsDefaultShell()) { _string = "--"; } else _string = fProcessInfo.Name(); return true; } return false; } // #pragma mark - WindowTitlePlaceholderMapper WindowTitlePlaceholderMapper::WindowTitlePlaceholderMapper( const ShellInfo& shellInfo, const ActiveProcessInfo& processInfo, int32 windowIndex, const BString& tabTitle) : TitlePlaceholderMapper(shellInfo, processInfo), fWindowIndex(windowIndex), fTabTitle(tabTitle) { } bool WindowTitlePlaceholderMapper::MapPlaceholder(char placeholder, int64 number, bool numberGiven, BString& _string) { switch (placeholder) { case 'i': // window index _string.Truncate(0); _string << fWindowIndex; return true; case 't': // the tab title _string = fTabTitle; return true; } return TitlePlaceholderMapper::MapPlaceholder(placeholder, number, numberGiven, _string); } // #pragma mark - TabTitlePlaceholderMapper TabTitlePlaceholderMapper::TabTitlePlaceholderMapper(const ShellInfo& shellInfo, const ActiveProcessInfo& processInfo, int32 tabIndex) : TitlePlaceholderMapper(shellInfo, processInfo), fTabIndex(tabIndex) { } bool TabTitlePlaceholderMapper::MapPlaceholder(char placeholder, int64 number, bool numberGiven, BString& _string) { switch (placeholder) { case 'i': // tab index _string.Truncate(0); _string << fTabIndex; return true; } return TitlePlaceholderMapper::MapPlaceholder(placeholder, number, numberGiven, _string); }