From 16c12e6db89936648975973ee0d9df8d1341c059 Mon Sep 17 00:00:00 2001 From: michael Date: Wed, 19 Jan 2011 08:26:12 -0500 Subject: [PATCH] UI enhancement: new shortcuts for toolpanelcoord & browse path Ctrl-e: exposure tab Ctrl-d: detail tab Ctrl-c: color tab Ctrl-t: transform tab Ctrl-r: raw tab Ctrl-m: metadata tab In file browser: Ctrl-O - sets focus in browse path entry box --- rtdata/languages/default | 8 ++- rtgui/editorpanel.cc | 147 ++++++++++++++++++++------------------- rtgui/filecatalog.cc | 32 ++++++--- rtgui/filepanel.cc | 3 + rtgui/toolbar.cc | 3 +- rtgui/toolpanelcoord.cc | 92 +++++++++++++++++++++--- rtgui/toolpanelcoord.h | 8 +++ 7 files changed, 200 insertions(+), 93 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index a1fbbcdc5..9798df9fc 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -51,7 +51,7 @@ FILEBROWSER_ARRANGEMENTHINT;Change between vertical/horizontal alignment of thum FILEBROWSER_AUTODARKFRAME;Auto dark frame FILEBROWSER_AUTOFLATFIELD;Auto flat field FILEBROWSER_BROWSEPATHBUTTONHINT;Click to browse to the chosen path -FILEBROWSER_BROWSEPATHHINT;Type path to browse (Ctrl-Enter in File Browser) +FILEBROWSER_BROWSEPATHHINT;Type path to browse (Ctrl-o set focus,Ctrl-Enter to browse in File Browser) FILEBROWSER_CLEARPROFILE;Clear profile FILEBROWSER_COPYPROFILE;Copy profile FILEBROWSER_CURRENT_NAME;Current name: @@ -355,17 +355,23 @@ MAIN_MSG_PLACES;Places MAIN_MSG_QOVERWRITE;Do you want to overwrite it? MAIN_TAB_BASIC;Basic MAIN_TAB_COLOR;Color +MAIN_TAB_COLOR_TOOLTIP;Alt-c MAIN_TAB_DETAIL;Detail MAIN_TAB_DEVELOP;Develop +MAIN_TAB_DETAIL_TOOLTIP;Alt-d MAIN_TAB_EXIF;Exif MAIN_TAB_EXPOSURE;Exposure +MAIN_TAB_EXPOSURE_TOOLTIP;Alt-e MAIN_TAB_FILTER;Filter MAIN_TAB_ICM;ICM MAIN_TAB_IPTC;IPTC MAIN_TAB_METADATA;Metadata +MAIN_TAB_METADATA_TOOLTIP;Alt-m MAIN_TAB_RAW;RAW +MAIN_TAB_RAW_TOOLTIP;Alt-r MAIN_TAB_TAGGING;Tagging MAIN_TAB_TRANSFORM;Transform +MAIN_TAB_TRANSFORM_TOOLTIP;Alt-t MAIN_TOGGLE_BEFORE_AFTER;B|A MAIN_TOOLTIP_HIDEFP;Show/hide the bottom panel (directory and file browser) F MAIN_TOOLTIP_HIDEHP;Show/hide the left panel (including the history) l diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc index 588d2a81b..c4e66cfb3 100644 --- a/rtgui/editorpanel.cc +++ b/rtgui/editorpanel.cc @@ -790,85 +790,92 @@ bool EditorPanel::handleShortcutKey (GdkEventKey* event) { return true; } case GDK_m: // Maximize preview panel: hide top AND right AND history panels - if (!ctrl) toggleSidePanels(); - return true; + if (!ctrl && !alt) { + toggleSidePanels(); + return true; + } case GDK_M: // Maximize preview panel: hide top AND right AND history panels AND (fit image preview) - if (!ctrl) toggleSidePanelsZoomFit(); - return true; + if (!ctrl && !alt) { + toggleSidePanelsZoomFit(); + return true; + } } - if (!ctrl) { - // Normal - switch(event->keyval) { - case GDK_bracketright: - tpc->coarse->rotateRight(); - return true; - case GDK_bracketleft: - tpc->coarse->rotateLeft(); - return true; + if (!alt){ + if (!ctrl) { + // Normal + switch(event->keyval) { + case GDK_bracketright: + tpc->coarse->rotateRight(); + return true; + case GDK_bracketleft: + tpc->coarse->rotateLeft(); + return true; - case GDK_i: - case GDK_I: - info->set_active (!info->get_active()); - return true; - case GDK_b: - case GDK_B: - beforeAfter->set_active (!beforeAfter->get_active()); - return true; - case GDK_plus: - case GDK_equal: - iarea->imageArea->zoomPanel->zoomInClicked(); - return true; - case GDK_minus: - case GDK_underscore: - iarea->imageArea->zoomPanel->zoomOutClicked(); - return true; - case GDK_1: - iarea->imageArea->zoomPanel->zoom11Clicked(); - return true; + case GDK_i: + case GDK_I: + info->set_active (!info->get_active()); + return true; + case GDK_b: + case GDK_B: + beforeAfter->set_active (!beforeAfter->get_active()); + return true; + case GDK_plus: + case GDK_equal: + iarea->imageArea->zoomPanel->zoomInClicked(); + return true; + case GDK_minus: + case GDK_underscore: + iarea->imageArea->zoomPanel->zoomOutClicked(); + return true; + case GDK_1: + iarea->imageArea->zoomPanel->zoom11Clicked(); + return true; - case GDK_f: - iarea->imageArea->zoomPanel->zoomFitClicked(); - return true; - case GDK_less: - iarea->imageArea->indClippedPanel->toggleClipped(true); - return true; - case GDK_greater: - iarea->imageArea->indClippedPanel->toggleClipped(false); - return true; + case GDK_f: + iarea->imageArea->zoomPanel->zoomFitClicked(); + return true; + case GDK_less: + iarea->imageArea->indClippedPanel->toggleClipped(true); + return true; + case GDK_greater: + iarea->imageArea->indClippedPanel->toggleClipped(false); + return true; - case GDK_F5: - openThm->openDefaultViewer(event->state & GDK_SHIFT_MASK ? 2 : 1); - return true; - } - } - else { - // With control - switch (event->keyval) { - case GDK_s: - saveAsPressed(); - return true; - case GDK_q: - queueImgPressed(); - return true; - case GDK_e: - sendToGimpPressed(); - return true; - case GDK_z: - history->undo (); - return true; - case GDK_Z: - history->redo (); - return true; - case GDK_F5: - openThm->openDefaultViewer(3); - return true; - - } - } + case GDK_F5: + openThm->openDefaultViewer(event->state & GDK_SHIFT_MASK ? 2 : 1); + return true; + } + } + else { + // With control + switch (event->keyval) { + case GDK_s: + saveAsPressed(); + return true; + case GDK_q: + queueImgPressed(); + return true; + case GDK_e: + sendToGimpPressed(); + return true; + case GDK_z: + history->undo (); + return true; + case GDK_Z: + history->redo (); + return true; + case GDK_F5: + openThm->openDefaultViewer(3); + return true; + } + } //if (!ctrl) + } //if (!alt) if(tpc->getToolBar()->handleShortcutKey(event)) return true; + if(tpc->handleShortcutKey(event)) + return true; return false; } diff --git a/rtgui/filecatalog.cc b/rtgui/filecatalog.cc index 38a81405e..4c86af4ce 100644 --- a/rtgui/filecatalog.cc +++ b/rtgui/filecatalog.cc @@ -1035,7 +1035,7 @@ bool FileCatalog::handleShortcutKey (GdkEventKey* event) { } return true; case GDK_m: - if (!ctrl) toggleSidePanels(); + if (!ctrl && !alt) toggleSidePanels(); return true; } @@ -1058,20 +1058,26 @@ bool FileCatalog::handleShortcutKey (GdkEventKey* event) { case GDK_grave: categoryButtonToggled(bUnRanked); return true; - case GDK_d: - case GDK_D: - categoryButtonToggled(bDir); - return true; - case GDK_t: - case GDK_T: - categoryButtonToggled(bTrash); - return true; + case GDK_Return: case GDK_KP_Enter: FileCatalog::buttonBrowsePathPressed (); return true; } + if (!ctrl && !alt) { + switch(event->keyval) { + case GDK_d: + case GDK_D: + categoryButtonToggled(bDir); + return true; + case GDK_t: + case GDK_T: + categoryButtonToggled(bTrash); + return true; + } + } + if (!ctrl) { switch(event->keyval) { @@ -1096,8 +1102,14 @@ bool FileCatalog::handleShortcutKey (GdkEventKey* event) { return true; } } - else { + else { // with Ctrl switch (event->keyval) { + case GDK_o: + if (!alt){ + BrowsePath->select_region(0, BrowsePath->get_text_length()); + BrowsePath->grab_focus(); + return true; + } } } diff --git a/rtgui/filepanel.cc b/rtgui/filepanel.cc index 9140b60cb..ff8de7fa0 100644 --- a/rtgui/filepanel.cc +++ b/rtgui/filepanel.cc @@ -238,6 +238,9 @@ bool FilePanel::handleShortcutKey (GdkEventKey* event) { if(tpc->getToolBar()->handleShortcutKey(event)) return true; + if(tpc->handleShortcutKey(event)) + return true; + if(fileCatalog->handleShortcutKey(event)) return true; diff --git a/rtgui/toolbar.cc b/rtgui/toolbar.cc index 52f3298be..dd0ecdae2 100644 --- a/rtgui/toolbar.cc +++ b/rtgui/toolbar.cc @@ -198,8 +198,9 @@ bool ToolBar::handleShortcutKey (GdkEventKey* event) { bool ctrl = event->state & GDK_CONTROL_MASK; bool shift = event->state & GDK_SHIFT_MASK; + bool alt = event->state & GDK_MOD1_MASK; - if (!ctrl) { + if (!ctrl && !alt) { switch(event->keyval) { case GDK_w: case GDK_W: diff --git a/rtgui/toolpanelcoord.cc b/rtgui/toolpanelcoord.cc index b729869aa..afb3c1aa4 100644 --- a/rtgui/toolpanelcoord.cc +++ b/rtgui/toolpanelcoord.cc @@ -105,11 +105,11 @@ ToolPanelCoordinator::ToolPanelCoordinator () : ipc(NULL) { metadataPanel->append_page (*exifpanel, M("MAIN_TAB_EXIF")); metadataPanel->append_page (*iptcpanel, M("MAIN_TAB_IPTC")); - Gtk::ScrolledWindow* exposurePanelSW = Gtk::manage (new Gtk::ScrolledWindow ()); - Gtk::ScrolledWindow* detailsPanelSW = Gtk::manage (new Gtk::ScrolledWindow ()); - Gtk::ScrolledWindow* colorPanelSW = Gtk::manage (new Gtk::ScrolledWindow ()); - Gtk::ScrolledWindow* transformPanelSW = Gtk::manage (new Gtk::ScrolledWindow ()); - Gtk::ScrolledWindow* rawPanelSW = Gtk::manage (new Gtk::ScrolledWindow ()); + exposurePanelSW = Gtk::manage (new Gtk::ScrolledWindow ()); + detailsPanelSW = Gtk::manage (new Gtk::ScrolledWindow ()); + colorPanelSW = Gtk::manage (new Gtk::ScrolledWindow ()); + transformPanelSW = Gtk::manage (new Gtk::ScrolledWindow ()); + rawPanelSW = Gtk::manage (new Gtk::ScrolledWindow ()); exposurePanelSW->set_policy (Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); detailsPanelSW->set_policy (Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); colorPanelSW->set_policy (Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); @@ -122,12 +122,47 @@ ToolPanelCoordinator::ToolPanelCoordinator () : ipc(NULL) { transformPanelSW->add (*transformPanel); rawPanelSW->add (*rawPanel); - toolPanelNotebook->append_page (*exposurePanelSW, M("MAIN_TAB_EXPOSURE")); - toolPanelNotebook->append_page (*detailsPanelSW, M("MAIN_TAB_DETAIL")); - toolPanelNotebook->append_page (*colorPanelSW, M("MAIN_TAB_COLOR")); - toolPanelNotebook->append_page (*transformPanelSW, M("MAIN_TAB_TRANSFORM")); - toolPanelNotebook->append_page (*rawPanelSW, M("MAIN_TAB_RAW")); - toolPanelNotebook->append_page (*metadataPanel, M("MAIN_TAB_METADATA")); + Gtk::HBox* hbe = Gtk::manage (new Gtk::HBox ()); + hbe->pack_start (*Gtk::manage (new Gtk::Label (M("MAIN_TAB_EXPOSURE")))); + hbe->set_spacing (2); + hbe->set_tooltip_markup (M("MAIN_TAB_EXPOSURE_TOOLTIP")); + hbe->show_all (); + toolPanelNotebook->append_page (*exposurePanelSW, *hbe); + + Gtk::HBox* hbd = Gtk::manage (new Gtk::HBox ()); + hbd->pack_start (*Gtk::manage (new Gtk::Label (M("MAIN_TAB_DETAIL")))); + hbd->set_spacing (2); + hbd->set_tooltip_markup (M("MAIN_TAB_DETAIL_TOOLTIP")); + hbd->show_all (); + toolPanelNotebook->append_page (*detailsPanelSW, *hbd); + + Gtk::HBox* hbc = Gtk::manage (new Gtk::HBox ()); + hbc->pack_start (*Gtk::manage (new Gtk::Label (M("MAIN_TAB_COLOR")))); + hbc->set_spacing (2); + hbc->set_tooltip_markup (M("MAIN_TAB_COLOR_TOOLTIP")); + hbc->show_all (); + toolPanelNotebook->append_page (*colorPanelSW, *hbc); + + Gtk::HBox* hbt = Gtk::manage (new Gtk::HBox ()); + hbt->pack_start (*Gtk::manage (new Gtk::Label (M("MAIN_TAB_TRANSFORM")))); + hbt->set_spacing (2); + hbt->set_tooltip_markup (M("MAIN_TAB_TRANSFORM_TOOLTIP")); + hbt->show_all (); + toolPanelNotebook->append_page (*transformPanelSW, *hbt); + + Gtk::HBox* hbr = Gtk::manage (new Gtk::HBox ()); + hbr->pack_start (*Gtk::manage (new Gtk::Label (M("MAIN_TAB_RAW")))); + hbr->set_spacing (2); + hbr->set_tooltip_markup (M("MAIN_TAB_RAW_TOOLTIP")); + hbr->show_all (); + toolPanelNotebook->append_page (*rawPanelSW, *hbr); + + Gtk::HBox* hbm = Gtk::manage (new Gtk::HBox ()); + hbm->pack_start (*Gtk::manage (new Gtk::Label (M("MAIN_TAB_METADATA")))); + hbm->set_spacing (2); + hbm->set_tooltip_markup (M("MAIN_TAB_METADATA_TOOLTIP")); + hbm->show_all (); + toolPanelNotebook->append_page (*metadataPanel, *hbm); toolPanelNotebook->set_current_page (0); toolPanelNotebook->set_scrollable (); @@ -439,3 +474,38 @@ void ToolPanelCoordinator::updateCurveBackgroundHistogram (unsigned* histrgb, un curve->updateCurveBackgroundHistogram (histrgb); lcurve->updateCurveBackgroundHistogram (histl); } + +bool ToolPanelCoordinator::handleShortcutKey (GdkEventKey* event) { + + bool ctrl = event->state & GDK_CONTROL_MASK; + bool shift = event->state & GDK_SHIFT_MASK; + bool alt = event->state & GDK_MOD1_MASK; + + if (alt){ + switch(event->keyval) { + case GDK_e: + toolPanelNotebook->set_current_page (toolPanelNotebook->page_num(*exposurePanelSW)); + return true; + case GDK_d: + toolPanelNotebook->set_current_page (toolPanelNotebook->page_num(*detailsPanelSW)); + return true; + case GDK_c: + toolPanelNotebook->set_current_page (toolPanelNotebook->page_num(*colorPanelSW)); + return true; + case GDK_t: + toolPanelNotebook->set_current_page (toolPanelNotebook->page_num(*transformPanelSW)); + return true; + case GDK_r: + toolPanelNotebook->set_current_page (toolPanelNotebook->page_num(*rawPanelSW)); + return true; + case GDK_m: + // !!! this should be improved by detecting if metadataPanel is present, + // as this page is removed in BatchToolPanelCoordinator::BatchToolPanelCoordinator + if (toolPanelNotebook->get_n_pages()==6){ + toolPanelNotebook->set_current_page (toolPanelNotebook->page_num(*metadataPanel)); + return true; + } + } + } + return false; +} diff --git a/rtgui/toolpanelcoord.h b/rtgui/toolpanelcoord.h index 9f2b09046..82507fce7 100644 --- a/rtgui/toolpanelcoord.h +++ b/rtgui/toolpanelcoord.h @@ -119,6 +119,12 @@ class ToolPanelCoordinator : public ToolPanelListener, IPTCPanel* iptcpanel; ToolBar* toolBar; + Gtk::ScrolledWindow* exposurePanelSW; + Gtk::ScrolledWindow* detailsPanelSW; + Gtk::ScrolledWindow* colorPanelSW; + Gtk::ScrolledWindow* transformPanelSW; + Gtk::ScrolledWindow* rawPanelSW; + std::vector expList; bool hasChanged; @@ -187,6 +193,8 @@ class ToolPanelCoordinator : public ToolPanelListener, ToolBar* getToolBar () { return toolBar; } int getSpotWBRectSize (); CropGUIListener* startCropEditing (Thumbnail* thm=NULL) { return crop; } + + bool handleShortcutKey (GdkEventKey* event); }; #endif