diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2007-04-11 13:07:51 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2007-04-11 13:07:51 +0000 |
commit | 45d3ec1437cf661533bc7750c623865def4424df (patch) | |
tree | 80cdeb58bc51a22042b91c50334bdd8ee37deed6 /libs/pbd/shortpath.cc | |
parent | 4bf712f501e21cbf1e555bf010553aaca55edd39 (diff) |
merged with 1697 revision of trunk (which is post-rc1 but pre-rc2
git-svn-id: svn://localhost/ardour2/branches/2.1-staging@1698 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/pbd/shortpath.cc')
-rw-r--r-- | libs/pbd/shortpath.cc | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/libs/pbd/shortpath.cc b/libs/pbd/shortpath.cc new file mode 100644 index 0000000000..59af8e4dcb --- /dev/null +++ b/libs/pbd/shortpath.cc @@ -0,0 +1,56 @@ +#include <pbd/shortpath.h> + +using namespace Glib; +using namespace std; + +ustring +short_path (const Glib::ustring& path, ustring::size_type target_characters) +{ + ustring::size_type last_sep; + ustring::size_type len = path.length(); + const char separator = '/'; + + if (len <= target_characters) { + return path; + } + + if ((last_sep = path.find_last_of (separator)) == ustring::npos) { + + /* just a filename, but its too long anyway */ + + if (target_characters > 3) { + return path.substr (0, target_characters - 3) + ustring ("..."); + } else { + /* stupid caller, just hand back the whole thing */ + return path; + } + } + + if (len - last_sep >= target_characters) { + + /* even the filename itself is too long */ + + if (target_characters > 3) { + return path.substr (last_sep+1, target_characters - 3) + ustring ("..."); + } else { + /* stupid caller, just hand back the whole thing */ + return path; + } + } + + uint32_t so_far = (len - last_sep); + uint32_t space_for = target_characters - so_far; + + if (space_for >= 3) { + ustring res = "..."; + res += path.substr (last_sep - space_for); + return res; + } else { + /* remove part of the end */ + ustring res = "..."; + res += path.substr (last_sep - space_for, len - last_sep + space_for - 3); + res += "..."; + return res; + + } +} |