diff --git a/rtdata/languages/default b/rtdata/languages/default index 466dbd256..8d64ed824 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -93,6 +93,7 @@ FILEBROWSER_CACHECLEARFROMFULL;Clear from cache - full FILEBROWSER_CACHECLEARFROMPARTIAL;Clear from cache - partial FILEBROWSER_CACHE;Cache FILEBROWSER_CLEARPROFILE;Clear +FILEBROWSER_COLORLABEL_TOOLTIP;Color label\n\nUse dropdown menu or Shortcuts:\nShift-Ctrl-1 Red\nShift-Ctrl-2 Yellow\nShift-Ctrl-3 Green\nShift-Ctrl-4 Blue\nShift-Ctrl-5 Purple FILEBROWSER_COPYPROFILE;Copy FILEBROWSER_CURRENT_NAME;Current name: FILEBROWSER_DARKFRAME;Dark frame @@ -151,6 +152,11 @@ FILEBROWSER_PROCESSINGSETTINGS;Settings FILEBROWSER_QUERYBUTTONHINT;Clear the Find query FILEBROWSER_QUERYHINT;Type a partial filename to search for or a comma-separated list.\nE.g. 1001,1004,1199 \n\nCtrl-F to focus to the Find text box.\nEnter to commence search.\nEsc to clear.\nShift-Esc to remove focus. FILEBROWSER_QUERYLABEL; Find: +FILEBROWSER_RANK1_TOOLTIP;Rank 1 *\nShortcut: Shift-1 +FILEBROWSER_RANK2_TOOLTIP;Rank 2 *\nShortcut: Shift-2 +FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nShortcut: Shift-3 +FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nShortcut: Shift-4 +FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nShortcut: Shift-5 FILEBROWSER_RENAMEDLGLABEL;Rename file FILEBROWSER_RENAMEDLGMSG;Rename file "%1" to: FILEBROWSER_SELECTDARKFRAME;Select dark frame... @@ -181,6 +187,7 @@ FILEBROWSER_STOPPROCESSINGHINT;Stop processing the images in the queue FILEBROWSER_STOPPROCESSING;Stop Processing FILEBROWSER_THUMBSIZE;Thumbnail size FILEBROWSER_TOOLTIP_STOPPROCESSING;Start processing automatically when a new job arrives +FILEBROWSER_UNRANK_TOOLTIP;Unrank\nShortcut: Shift - ~ FILEBROWSER_USETEMPLATE;Use template: FILEBROWSER_ZOOMINHINT;Increase thumbnail size.\nShortcut: +\n\nShortcut in Single Editor Tab: Alt + FILEBROWSER_ZOOMOUTHINT;Decrease thumbnail size.\nShortcut: -\n\nShortcut in Single Editor Tab: Alt - diff --git a/rtgui/filebrowser.cc b/rtgui/filebrowser.cc index 2b66ecba3..8ed06a437 100644 --- a/rtgui/filebrowser.cc +++ b/rtgui/filebrowser.cc @@ -94,7 +94,10 @@ FileBrowser::FileBrowser () pmenu->attach (*Gtk::manage(colorlabel[i] = new Gtk::ImageMenuItem (M(Glib::ustring::compose("%1%2","FILEBROWSER_POPUPCOLORLABEL",i)))), 0, 1, p, p+1); p++; } } - for (int i=1; i<=5; i++){//set color label images + + //set color label images + colorlabel[0]->set_image(*Gtk::manage(new RTImage ("cglabel0.png"))); + for (int i=1; i<=5; i++){ colorlabel[i]->set_image(*Gtk::manage(new RTImage (Glib::ustring::compose("%1%2%3","clabel",i,".png")))); } @@ -268,11 +271,31 @@ FileBrowser::FileBrowser () execcustprof->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &FileBrowser::menuItemActivated), execcustprof)); clearprof->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &FileBrowser::menuItemActivated), clearprof)); cachemenu->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &FileBrowser::menuItemActivated), cachemenu)); + + + + // A separate pop-up menu for Color Labels + int c = 0; + pmenuColorLabels = new Gtk::Menu (); + for (int i=0; i<=5; i++){ + pmenuColorLabels->attach (*Gtk::manage(colorlabel_pop[i] = new Gtk::ImageMenuItem (M(Glib::ustring::compose("%1%2","FILEBROWSER_POPUPCOLORLABEL",i)))), 0, 1, c, c+1); c++; + } + //set color label images + colorlabel_pop[0]->set_image(*Gtk::manage(new RTImage ("cglabel0.png"))); + for (int i=1; i<=5; i++){ + colorlabel_pop[i]->set_image(*Gtk::manage(new RTImage (Glib::ustring::compose("%1%2%3","clabel",i,".png")))); + } + pmenuColorLabels->show_all (); + + // Bind to event handlers + for (int i=0; i<=5; i++) + colorlabel_pop[i]->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &FileBrowser::menuColorlabelActivated), colorlabel_pop[i])); } FileBrowser::~FileBrowser () { delete pmenu; + delete pmenuColorLabels; delete[] amiExtProg; } @@ -499,6 +522,18 @@ void FileBrowser::close () { lastClicked = NULL; } +void FileBrowser::menuColorlabelActivated (Gtk::MenuItem* m) { + + std::vector tbe; + tbe.push_back (static_cast(colorLabel_actionData)); + + for (int i=0; i<6; i++) + if (m==colorlabel_pop[i]) { + colorlabelRequested (tbe, i); + return; + } +} + void FileBrowser::menuItemActivated (Gtk::MenuItem* m) { std::vector mselected; @@ -871,7 +906,53 @@ bool FileBrowser::keyPressed (GdkEventKey* event) { scrollPage(GDK_SCROLL_DOWN); return true; } - + + else if (shift && !ctrl && !alt) { // rank + switch(event->keyval) { + case GDK_asciitilde: + requestRanking (0); + return true; + case GDK_exclam: + requestRanking (1); + return true; + case GDK_at: + requestRanking (2); + return true; + case GDK_numbersign: + requestRanking (3); + return true; + case GDK_dollar: + requestRanking (4); + return true; + case GDK_percent: + requestRanking (5); + return true; + } + } + + else if (shift && ctrl && !alt) { // color labels + switch(event->keyval) { + case GDK_asciitilde: + requestColorLabel (0); + return true; + case GDK_exclam: + requestColorLabel (1); + return true; + case GDK_at: + requestColorLabel (2); + return true; + case GDK_numbersign: + requestColorLabel (3); + return true; + case GDK_dollar: + requestColorLabel (4); + return true; + case GDK_percent: + requestColorLabel (5); + return true; + } + } + return false; } @@ -1092,6 +1173,22 @@ void FileBrowser::colorlabelRequested (std::vector tbe, int c applyFilter (filter); } +void FileBrowser::requestRanking(int rank){ + std::vector mselected; + for (size_t i=0; i(selected[i])); + + rankingRequested (mselected, rank); +} + +void FileBrowser::requestColorLabel(int colorlabel){ + std::vector mselected; + for (size_t i=0; i(selected[i])); + + colorlabelRequested (mselected, colorlabel); +} + void FileBrowser::buttonPressed (LWButton* button, int actionCode, void* actionData) { if (actionCode>=0 && actionCode<=5) { // rank @@ -1113,6 +1210,11 @@ void FileBrowser::buttonPressed (LWButton* button, int actionCode, void* actionD else fromTrashRequested (tbe); } + else if (actionCode==8 && tbl) { // color label + // show popup menu + colorLabel_actionData = actionData;// this will be reused when pmenuColorLabels is clicked + pmenuColorLabels->popup (3, this->eventTime); + } } void FileBrowser::openNextImage () { diff --git a/rtgui/filebrowser.h b/rtgui/filebrowser.h index 5188f19f9..c4c818ef4 100644 --- a/rtgui/filebrowser.h +++ b/rtgui/filebrowser.h @@ -105,6 +105,11 @@ class FileBrowser : public ThumbBrowserBase, Gtk::MenuItem* clearFromCacheFull; Gtk::Menu* pmenu; + Gtk::ImageMenuItem* colorlabel_pop[6]; + Gtk::Menu* pmenuColorLabels; + void* colorLabel_actionData; + void menuColorlabelActivated (Gtk::MenuItem* m); // use only when menu is invoked via FileBrowser::buttonPressed to pass actionData + Glib::RefPtr pmaccelgroup; FileBrowserListener* tbl; @@ -117,6 +122,8 @@ class FileBrowser : public ThumbBrowserBase, void fromTrashRequested (std::vector tbe); void rankingRequested (std::vector tbe, int rank); void colorlabelRequested (std::vector tbe, int colorlabel); + void requestRanking (int rank); + void requestColorLabel(int colorlabel); void notifySelectionListener (); ExportPanel* exportPanel; diff --git a/rtgui/filecatalog.cc b/rtgui/filecatalog.cc index 5fbb6c863..1c3ef5dd0 100644 --- a/rtgui/filecatalog.cc +++ b/rtgui/filecatalog.cc @@ -1773,7 +1773,7 @@ bool FileCatalog::handleShortcutKey (GdkEventKey* event) { } } - if (!alt) { + if (!alt && !shift) { // shift is reserved for ranking switch(event->keyval) { case GDK_grave: categoryButtonToggled(bUnRanked,false); @@ -1809,7 +1809,7 @@ bool FileCatalog::handleShortcutKey (GdkEventKey* event) { } } - if (alt) { + if (alt && !shift) { // shift is reserved for color labeling switch(event->keyval) { case GDK_grave: categoryButtonToggled(bUnCLabeled,false); diff --git a/rtgui/filethumbnailbuttonset.cc b/rtgui/filethumbnailbuttonset.cc index 269bdd836..5111017d7 100644 --- a/rtgui/filethumbnailbuttonset.cc +++ b/rtgui/filethumbnailbuttonset.cc @@ -47,7 +47,7 @@ FileThumbnailButtonSet::FileThumbnailButtonSet (FileBrowserEntry* myEntry) { unTrashIcon = safe_create_from_png ("undelete-thumbnail.png"); processIcon = safe_create_from_png ("processing-thumbnail.png"); - colorLabelIcon_0 = safe_create_from_png ("nocolorlabel.png"); + colorLabelIcon_0 = safe_create_from_png ("cglabel0.png"); //("nocolorlabel.png"); colorLabelIcon_1 = safe_create_from_png ("clabel1.png"); colorLabelIcon_2 = safe_create_from_png ("clabel2.png"); colorLabelIcon_3 = safe_create_from_png ("clabel3.png"); @@ -57,18 +57,18 @@ FileThumbnailButtonSet::FileThumbnailButtonSet (FileBrowserEntry* myEntry) { } add (new LWButton (processIcon, 6, myEntry, LWButton::Left, LWButton::Center, M("FILEBROWSER_POPUPPROCESS"))); - add (new LWButton (unRankIcon, 0, myEntry, LWButton::Left, LWButton::Center, M("FILEBROWSER_POPUPUNRANK"))); + add (new LWButton (unRankIcon, 0, myEntry, LWButton::Left, LWButton::Center, M("FILEBROWSER_UNRANK_TOOLTIP"))); for (int i=0; i<5; i++) add (new LWButton (rankIcon, i+1, myEntry, LWButton::Left)); add (new LWButton (trashIcon, 7, myEntry, LWButton::Right, LWButton::Center, M("FILEBROWSER_POPUPTRASH"))); - add (new LWButton (colorLabelIcon_0, 8, myEntry, LWButton::Right, LWButton::Center, M("FILEBROWSER_POPUPCOLORLABEL"))); + add (new LWButton (colorLabelIcon_0, 8, myEntry, LWButton::Right, LWButton::Center, M("FILEBROWSER_COLORLABEL_TOOLTIP"))); - buttons[2]->setToolTip (M("FILEBROWSER_POPUPRANK1")); - buttons[3]->setToolTip (M("FILEBROWSER_POPUPRANK2")); - buttons[4]->setToolTip (M("FILEBROWSER_POPUPRANK3")); - buttons[5]->setToolTip (M("FILEBROWSER_POPUPRANK4")); - buttons[6]->setToolTip (M("FILEBROWSER_POPUPRANK5")); + buttons[2]->setToolTip (M("FILEBROWSER_RANK1_TOOLTIP")); + buttons[3]->setToolTip (M("FILEBROWSER_RANK2_TOOLTIP")); + buttons[4]->setToolTip (M("FILEBROWSER_RANK3_TOOLTIP")); + buttons[5]->setToolTip (M("FILEBROWSER_RANK4_TOOLTIP")); + buttons[6]->setToolTip (M("FILEBROWSER_RANK5_TOOLTIP")); } void FileThumbnailButtonSet::setRank (int stars) {