diff --git a/rtdata/languages/default b/rtdata/languages/default
index bf43596dc..b2c1cf890 100644
--- a/rtdata/languages/default
+++ b/rtdata/languages/default
@@ -2106,7 +2106,17 @@ QUEUE_DESTPREVIEW_TOOLTIP;Destination path for the first selected image appears
QUEUE_FORMAT_TITLE;File Format
QUEUE_LOCATION_FOLDER;Save to folder
QUEUE_LOCATION_TEMPLATE;Use template
-QUEUE_LOCATION_TEMPLATE_TOOLTIP;Specify the output location based on the source photo's location, rank, trash status or position in the queue.\n\n%dN, %d-N, %pN, %p-N, %PN and %P-N (N = 1..9) will be replaced by elements of the image file's directory path (not including the file name):\n%dN = Nth directory from the end of the path\n%d-N = Nth directory from the start of the path\n%pN = all directories up to the Nth from the end of the path\n%p-N = the first N directories in the path\n%PN = the last N directories in the path\n%P-N = all directories from the Nth to the end of the path\n%f = base filename (no extension)\nFor Windows paths, %d-1 is the drive letter and colon, and %d-2 is the base directory on that drive.\n\nUsing the following pathname as an example:\n/home/tom/photos/2010-10-31/photo1.raw\nthe meaning of the formatting strings follows:\n%d4 = %d-1 = home\n%d3 = %d-2 = tom\n%d2 = %d-3 = photos\n%d1 = %d-4 = 2010-10-31\n%p1 = %p-4 = /home/tom/photos/2010-10-31/\n%p2 = %p-3 = /home/tom/photos/\n%p3 = %p-2 = /home/tom/\n%p4 = %p-1 = /home/\n%P1 = %P-4 = 2010-10-31/\n%P2 = %P-3 = photos/2010-10-31/\n%P3 = %P-2 = tom/photos/2010-10-31/\n%P4 = %P-1 = /home/tom/photos/2010-10-31/\n%f = photo1\n\n%r will be replaced by the photo's rank. If the photo is unranked, '0' is used. If the photo is in the trash, 'x' is used.\n\n%s1, ..., %s9 will be replaced by the photo's initial position in the queue at the time the queue is started. The number specifies the padding, e.g. %s3 results in '001'.\n\nIf you want to save the output image alongside the source image, write:\n%p1/%f\n\nIf you want to save the output image in a folder named 'converted' located in the source photo's folder, write:\n%p1/converted/%f\n\nIf you want to save the output image in\n'/home/tom/photos/converted/2010-10-31', write:\n%p-3/converted/%P-4/%f
+REMOVE_ME_OLD___QUEUE_LOCATION_TEMPLATE_TOOLTIP;Specify the output location based on the source photo's location, rank, trash status or position in the queue.\n\n%dN, %d-N, %pN, %p-N, %PN and %P-N (N = 1..9) will be replaced by elements of the image file's directory path (not including the file name):\n%dN = Nth directory from the end of the path\n%d-N = Nth directory from the start of the path\n%pN = all directories up to the Nth from the end of the path\n%p-N = the first N directories in the path\n%PN = the last N directories in the path\n%P-N = all directories from the Nth to the end of the path\n%f = base filename (no extension)\nFor Windows paths, %d-1 is the drive letter and colon, and %d-2 is the base directory on that drive.\n\nUsing the following pathname as an example:\n/home/tom/photos/2010-10-31/photo1.raw\nthe meaning of the formatting strings follows:\n%d4 = %d-1 = home\n%d3 = %d-2 = tom\n%d2 = %d-3 = photos\n%d1 = %d-4 = 2010-10-31\n%p1 = %p-4 = /home/tom/photos/2010-10-31/\n%p2 = %p-3 = /home/tom/photos/\n%p3 = %p-2 = /home/tom/\n%p4 = %p-1 = /home/\n%P1 = %P-4 = 2010-10-31/\n%P2 = %P-3 = photos/2010-10-31/\n%P3 = %P-2 = tom/photos/2010-10-31/\n%P4 = %P-1 = /home/tom/photos/2010-10-31/\n%f = photo1\n\n%r will be replaced by the photo's rank. If the photo is unranked, '0' is used. If the photo is in the trash, 'x' is used.\n\n%s1, ..., %s9 will be replaced by the photo's initial position in the queue at the time the queue is started. The number specifies the padding, e.g. %s3 results in '001'.\n\nIf you want to save the output image alongside the source image, write:\n%p1/%f\n\nIf you want to save the output image in a folder named 'converted' located in the source photo's folder, write:\n%p1/converted/%f\n\nIf you want to save the output image in\n'/home/tom/photos/converted/2010-10-31', write:\n%p-3/converted/%P-4/%f
+QUEUE_LOCATION_TEMPLATE_TOOLTIP;Specify the output location based on characteristics such as the source photo's location, rank, trash status or position in the queue.\n\nThe output template field value can include specifiers beginning with %, which are replaced by those characteristics in the actual destination path.\n\nPress the ? button for full instructions.
+QUEUE_LOCATION_TEMPLATE_HELP_TITLE;Creating an output template
+QUEUE_LOCATION_TEMPLATE_HELP_INTRO;The output template field allows you to to dynamically customize the destination folder and filename. When you include certain specifiers, which begin with %, they are replaced by the program when each file is being saved.\n\nThe sections below describe each type of specifier.
+QUEUE_LOCATION_TEMPLATE_HELP_PATHS_TITLE;Directories and partial paths
+QUEUE_LOCATION_TEMPLATE_HELP_PATHS_INTRO;The %dN, %d-N, %pN, %p-N, %PN and %P-N (N = 1..9) specifiers will be replaced by elements of the image file's directory path.\nThe format specifiers operate as follows:\n %dN = Nth directory from the end of the path\n %d-N = Nth directory from the start of the path\n %pN = all directories up to the Nth from the end of the path\n %p-N = the first N directories in the path\n %PN = the last N directories in the path\n %P-N = all directories from the Nth to the end of the path\n %f = base filename (no extension)\nFor Windows paths, %d-1 is the drive letter and colon, and %d-2 is the base directory on that drive.
+QUEUE_LOCATION_TEMPLATE_HELP_PATHS_BODY_1;Using this pathname as an example:
+QUEUE_LOCATION_TEMPLATE_HELP_PATHS_EXAMPLE_LINUX;/home/tom/photos/2010-10-31/photo1.raw
+QUEUE_LOCATION_TEMPLATE_HELP_PATHS_EXAMPLE_WINDOWS;C:\users\tom\photos\2010-10-31\photo1.raw
+QUEUE_LOCATION_TEMPLATE_HELP_PATHS_BODY_2;The meanings of the formatting strings are:
+
QUEUE_LOCATION_TITLE;Output Location
QUEUE_STARTSTOP_TOOLTIP;Start or stop processing the images in the queue.\n\nShortcut: Ctrl+s
SAMPLEFORMAT_0;Unknown data format
diff --git a/rtgui/batchqueuepanel.cc b/rtgui/batchqueuepanel.cc
index 3797a7a48..439134977 100644
--- a/rtgui/batchqueuepanel.cc
+++ b/rtgui/batchqueuepanel.cc
@@ -23,6 +23,57 @@
#include "soundman.h"
#include "rtimage.h"
+namespace // helper functions
+{
+
+ // Populate the buffer of a Gtk::TextView with help text for the location template field
+ void populateTemplateHelpBuffer(Glib::RefPtr buffer)
+ {
+ auto pos = buffer->begin();
+ auto insertHeading1 = [&pos, buffer](const Glib::ustring& text) {
+ pos = buffer->insert_markup(pos, Glib::ustring::format("", text, "\n"));
+ };
+ auto insertHeading2 = [&pos, buffer](const Glib::ustring& text) {
+ pos = buffer->insert_markup(pos, Glib::ustring::format("\n\n", text, "\n"));
+ };
+ insertHeading1(M("QUEUE_LOCATION_TEMPLATE_HELP_TITLE"));
+ pos = buffer->insert_markup(pos, M("QUEUE_LOCATION_TEMPLATE_HELP_INTRO"));
+ insertHeading2(M("QUEUE_LOCATION_TEMPLATE_HELP_PATHS_TITLE"));
+ printf("[[[%s]]]", M("QUEUE_LOCATION_TEMPLATE_HELP_PATHS_INTRO").c_str());
+ pos = buffer->insert_markup(pos, M("QUEUE_LOCATION_TEMPLATE_HELP_PATHS_INTRO"));
+ pos = buffer->insert(pos, "\n");
+ pos = buffer->insert_markup(pos, M("QUEUE_LOCATION_TEMPLATE_HELP_PATHS_BODY_1"));
+#ifdef _WIN32
+ auto exampleString = M("QUEUE_LOCATION_TEMPLATE_HELP_PATHS_EXAMPLE_WINDOWS");
+#else
+ auto exampleString = M("QUEUE_LOCATION_TEMPLATE_HELP_PATHS_EXAMPLE_LINUX");
+#endif
+ pos = buffer->insert_markup(pos, Glib::ustring::format("\n ", exampleString, "\n"));
+ pos = buffer->insert_markup(pos, M("QUEUE_LOCATION_TEMPLATE_HELP_PATHS_BODY_2"));
+ pos = buffer->insert(pos, "\n");
+ /* FIXME: Still to do here:
+ Generate text like the original below, but use the actual conversion function to create it:
+ %d4 = %d-1 = home
+ %d3 = %d-2 = tom
+ %d2 = %d-3 = photos
+ %d1 = %d-4 = 2010-10-31
+ %p1 = %p-4 = /home/tom/photos/2010-10-31/
+ %p2 = %p-3 = /home/tom/photos/
+ %p3 = %p-2 = /home/tom/
+ %p4 = %p-1 = /home/
+ %P1 = %P-4 = 2010-10-31/
+ %P2 = %P-3 = photos/2010-10-31/
+ %P3 = %P-2 = tom/photos/2010-10-31/
+ %P4 = %P-1 = /home/tom/photos/2010-10-31/
+ %f = photo1
+ Insert sections for the remaining specifiers:
+ %r = rank
+ %s# = queue position, with padding
+ Insert an examples section
+ */
+ }
+}
+
static Glib::ustring makeFolderLabel(Glib::ustring path)
{
if (!Glib::file_test (path, Glib::FILE_TEST_IS_DIR)) {
@@ -158,13 +209,6 @@ BatchQueuePanel::BatchQueuePanel (FileCatalog* aFileCatalog) : parent(nullptr)
templateHelpTextView->set_wrap_mode(Gtk::WRAP_WORD);
scrolledTemplateHelpWindow = Gtk::manage(new Gtk::ScrolledWindow());
scrolledTemplateHelpWindow->add(*templateHelpTextView);
- {
- auto helptext = M("QUEUE_LOCATION_TEMPLATE_TOOLTIP");
- auto buffer = templateHelpTextView->get_buffer();
- buffer->create_tag("bold");
- buffer->create_tag("italic");
- buffer->insert_markup(buffer->begin(), helptext);
- }
middleSplitPane->pack1 (*scrolledTemplateHelpWindow);
middleSplitPane->pack2 (*batchQueue);
scrolledTemplateHelpWindow->set_visible(false); // initially hidden, templateHelpButton shows it
@@ -348,7 +392,11 @@ void BatchQueuePanel::setGuiFromBatchState(bool queueRunning, int qsize)
void BatchQueuePanel::templateHelpButtonToggled()
{
bool visible = templateHelpButton->get_active();
- //scrolledTemplateHelpWindow->set_no_show_all(!visible);
+ auto buffer = templateHelpTextView->get_buffer();
+ if (buffer->get_text().empty()) {
+ // Populate the help text the first time it's shown
+ populateTemplateHelpBuffer(buffer);
+ }
scrolledTemplateHelpWindow->set_visible(visible);
templateHelpTextView->set_visible(visible);
}