*/
#include "pbd/strsplit.h"
+#include "pbd/compose.h"
+#include "pbd/shortpath.h"
+
#include "search_path_option.h"
+#include "pbd/i18n.h"
using namespace std;
using namespace Gtk;
SearchPathOption::SearchPathOption (const string& pathname, const string& label,
+ const string& default_path,
sigc::slot<std::string> get, sigc::slot<bool, std::string> set)
: Option (pathname, label)
, _get (get)
hbox->set_border_width (12);
hbox->set_spacing (6);
- hbox->pack_end (add_chooser, false, false);
- hbox->pack_end (*manage (new Label ("Click to add a new location")), false, false);
+ hbox->pack_end (add_chooser, true, true);
+ hbox->pack_end (*manage (new Label (_("Click to add a new location"))), false, false);
hbox->show_all ();
-
+
vbox.pack_start (path_box);
vbox.pack_end (*hbox);
session_label.set_use_markup (true);
- session_label.set_markup (string_compose ("<i>%1</i>", _("the session folder")));
+ session_label.set_markup (string_compose ("<i>%1 (%2)</i>", _("the session folder"), short_path (default_path, 32)));
session_label.set_alignment (0.0, 0.5);
session_label.show ();
+
+ path_box.pack_start (session_label);
}
SearchPathOption::~SearchPathOption()
{
-
+
}
{
string path = add_chooser.get_filename ();
add_path (path);
+ changed ();
}
void
SearchPathOption::add_to_page (OptionEditorPage* p)
{
int const n = p->table.property_n_rows();
- p->table.resize (n + 2, 3);
+ p->table.resize (n + 1, 3);
Label* label = manage (new Label);
- label->set_alignment (0.0, 0.5);
- label->set_markup (string_compose ("<b>%1</b>", _name));
+ label->set_alignment (0.0, 0.0);
+ label->set_text (string_compose ("%1", _name));
- p->table.attach (*label, 0, 1, n, n + 1, FILL | EXPAND);
- p->table.attach (vbox, 0, 3, n + 1, n + 2, FILL | EXPAND);
+ p->table.attach (*label, 1, 2, n, n + 1, FILL | EXPAND);
+ p->table.attach (vbox, 2, 3, n, n + 1, FILL | EXPAND);
}
void
clear ();
path_box.pack_start (session_label);
- split (str, dirs, ':');
-
+ split (str, dirs, G_SEARCHPATH_SEPARATOR);
+
for (vector<string>::iterator d = dirs.begin(); d != dirs.end(); ++d) {
add_path (*d);
}
SearchPathOption::changed ()
{
string str;
-
- for (list<PathEntry*>::iterator p = paths.begin(); p != paths.end(); ++p) {
- if (p == paths.begin()) {
- /* skip first entry, its always "the session"
- */
- continue;
- }
+ for (list<PathEntry*>::iterator p = paths.begin(); p != paths.end(); ++p) {
if (!str.empty()) {
- str += ':';
+ str += G_SEARCHPATH_SEPARATOR;
}
str += (*p)->entry.get_text ();
}
PathEntry* pe = new PathEntry (path, removable);
paths.push_back (pe);
path_box.pack_start (pe->box, false, false);
+ pe->remove_button.signal_clicked().connect (sigc::bind (sigc::mem_fun (*this, &SearchPathOption::remove_path), pe));
}
void
-SearchPathOption::remove_path (const string& path)
+SearchPathOption::remove_path (PathEntry* pe)
{
+ path_box.remove (pe->box);
+ paths.remove (pe);
+ delete pe;
+ changed ();
}
SearchPathOption::PathEntry::PathEntry (const std::string& path, bool removable)
box.set_spacing (6);
box.set_homogeneous (false);
box.pack_start (entry, true, true);
-
+
if (removable) {
box.pack_start (remove_button, false, false);
remove_button.show ();