1/*
2 * Copyright 2010, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Distributed under the terms of the MIT License.
4 */
5
6
7#include "TitlePlaceholderMapper.h"
8
9
10// #pragma mark - TitlePlaceholderMapper
11
12
13TitlePlaceholderMapper::TitlePlaceholderMapper(const ShellInfo& shellInfo,
14	const ActiveProcessInfo& processInfo)
15	:
16	fShellInfo(shellInfo),
17	fProcessInfo(processInfo)
18{
19}
20
21
22bool
23TitlePlaceholderMapper::MapPlaceholder(char placeholder, int64 number,
24	bool numberGiven, BString& _string)
25{
26	switch (placeholder) {
27		case 'd':
28		{
29			// current working directory
30
31			// If a number is given, extract the respective number of rightmost
32			// components.
33			BString directory(fProcessInfo.CurrentDirectory());
34			if (numberGiven && number > 0) {
35				int32 index = directory.Length();
36				while (number > 0 && index > 0) {
37					 index = directory.FindLast('/', index - 1);
38					 number--;
39				}
40
41				if (number == 0 && index >= 0 && index + 1 < directory.Length())
42					directory.Remove(0, index + 1);
43			}
44
45			_string = directory;
46			return true;
47		}
48
49		case 'p':
50			// process name -- use "--", if the shell is active and it is the
51			// default shell
52			if (fProcessInfo.ID() == fShellInfo.ProcessID()
53				&& fShellInfo.IsDefaultShell()) {
54				_string = "--";
55			} else
56				_string = fProcessInfo.Name();
57			return true;
58	}
59
60	return false;
61}
62
63
64// #pragma mark - WindowTitlePlaceholderMapper
65
66
67WindowTitlePlaceholderMapper::WindowTitlePlaceholderMapper(
68	const ShellInfo& shellInfo, const ActiveProcessInfo& processInfo,
69	int32 windowIndex, const BString& tabTitle)
70	:
71	TitlePlaceholderMapper(shellInfo, processInfo),
72	fWindowIndex(windowIndex),
73	fTabTitle(tabTitle)
74{
75}
76
77
78bool
79WindowTitlePlaceholderMapper::MapPlaceholder(char placeholder, int64 number,
80	bool numberGiven, BString& _string)
81{
82	switch (placeholder) {
83		case 'i':
84			// window index
85			_string.Truncate(0);
86			_string << fWindowIndex;
87			return true;
88
89		case 't':
90			// the tab title
91			_string = fTabTitle;
92			return true;
93	}
94
95	return TitlePlaceholderMapper::MapPlaceholder(placeholder, number,
96		numberGiven, _string);
97}
98
99
100// #pragma mark - TabTitlePlaceholderMapper
101
102
103TabTitlePlaceholderMapper::TabTitlePlaceholderMapper(const ShellInfo& shellInfo,
104	const ActiveProcessInfo& processInfo, int32 tabIndex)
105	:
106	TitlePlaceholderMapper(shellInfo, processInfo),
107	fTabIndex(tabIndex)
108{
109}
110
111
112bool
113TabTitlePlaceholderMapper::MapPlaceholder(char placeholder, int64 number,
114	bool numberGiven, BString& _string)
115{
116	switch (placeholder) {
117		case 'i':
118			// tab index
119			_string.Truncate(0);
120			_string << fTabIndex;
121			return true;
122	}
123
124	return TitlePlaceholderMapper::MapPlaceholder(placeholder, number,
125		numberGiven, _string);
126}
127