From d1a479a4bc5659370bd91763c04997a9862b0043 Mon Sep 17 00:00:00 2001 From: michael Date: Mon, 17 Jan 2011 16:34:07 -0500 Subject: [PATCH] UI enhancement: toggle panels, shortcuts, new icons, slimmer layout --- rtdata/images/FullScreen_exit.png | Bin 0 -> 694 bytes rtdata/images/crossed_arrows_out_45_02.png | Bin 0 -> 3248 bytes rtdata/images/fullscreen.png | Bin 0 -> 698 bytes rtdata/images/panel_to_bottom.png | Bin 0 -> 297 bytes rtdata/images/panel_to_left.png | Bin 692 -> 301 bytes rtdata/images/panel_to_right.png | Bin 699 -> 294 bytes rtdata/images/panel_to_top.png | Bin 0 -> 294 bytes rtdata/languages/default | 9 +- rtgui/editorpanel.cc | 196 ++++++++++++++++++--- rtgui/editorpanel.h | 19 ++ rtgui/filecatalog.cc | 79 +++++++-- rtgui/filecatalog.h | 14 +- rtgui/filepanel.h | 6 +- rtgui/rtwindow.cc | 31 +++- rtgui/rtwindow.h | 2 + rtgui/toolbar.cc | 4 +- 16 files changed, 305 insertions(+), 55 deletions(-) create mode 100644 rtdata/images/FullScreen_exit.png create mode 100644 rtdata/images/crossed_arrows_out_45_02.png create mode 100644 rtdata/images/fullscreen.png create mode 100644 rtdata/images/panel_to_bottom.png create mode 100644 rtdata/images/panel_to_top.png diff --git a/rtdata/images/FullScreen_exit.png b/rtdata/images/FullScreen_exit.png new file mode 100644 index 0000000000000000000000000000000000000000..2aeab4f80551689e2bd65db9c14daca9142e4e7d GIT binary patch literal 694 zcmV;n0!jUeP)KLZ*U+0v@6o#Kk zBy~|skq9maHzpVb!A%szeAFnH;fC8TlHlg{&NR8$`@v*xZFhqH4E+Z#x^m|~@B=Bh z_D6`z#6^szN*C?3dS~Xmobz%9%J006+AeKEk~$mo+Hx=)$+gd{Be=?au7%MwSKE(w z06f3j3Vfybi-4cs5CA8)JipuGe5^;gbs(z16K$puh-bj77cO@oz5`Xe6LdiQ05--e zdUr+J!EgknOF(tJ(ARjGpDr!D|DP|)O23{XeRIWa~#y{{)KzG{r2)dWg(O$aW00{~0MP{{R30 c0RR630QTw`{F0`G6951J07*qoM6N<$f;EXQlmGw# literal 0 HcmV?d00001 diff --git a/rtdata/images/crossed_arrows_out_45_02.png b/rtdata/images/crossed_arrows_out_45_02.png new file mode 100644 index 0000000000000000000000000000000000000000..a5f90bf30bc4273c47593dbe981c112abb7a1249 GIT binary patch literal 3248 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 delta 645 zcmV;00($+X0=oqviBL{Q4GJ0x0000DNk~Le0000L0000G2nGNE0QuT9C6OURe*!^C zL_t(|+N_gZNRv?*$A9NdCEdGMEd((c)cfjhBxVtHvCWq)#6BE_UCgt9cro-LYe=|QnKXS0O zb+60idb1{UW@aXliDL_k$y^?rUR*eOf2hda)%7|OiQEi_!@oTq&xgFwKp?OJtR$03 zDY6$8YMO?oX(**3B3PD%Wm%M!8%vKz9+WhWL(8|zfQ+@q5m(#PQd@ESW zcJA`kM46#`P16joS$-f8e@GPC>;P16%WA6#(O8s%O$A6&IDh3@Vn>Z*XnJyT{ME#S ze_g1vz5&n4GqJ2|OV{=2o!hsnW51%-h2B0hWCr_vFP}dX5i{@fQ>j!Y{POAD+rxm$ z)}8eYfktP2gH$;jXMvr$JR*V;k-vW*C;{TYPZ3#Koq$qmJ5U8g fL?oPV9)AV^ZdMFY diff --git a/rtdata/images/panel_to_top.png b/rtdata/images/panel_to_top.png new file mode 100644 index 0000000000000000000000000000000000000000..fadb526be53e2d35a3890c3c2601c4580b7627fa GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^{2(?58;~rMGjRk`oCO|{#S9GG!XV7ZFl&wkP*5S+ zBgmJ5p&h8RhnIm-?k@vF`XUAfy9fqG4|fIzJ|CbOt~uN0h63p|o-U3d6}Oh0-}EVaXNfKc!$~*c8{qpC%gq&4H68)7Rc{-_RdbO<5U{^@y~SQq1`S=rb`Jf{IzB4=9_nBJ6r5px7l>g^O^hJ m-@b8ed4F78M}N#eIfk{}-;XAzNp%3-&EVCtrl+S MAIN_BUTTON_SENDTOEDITOR;Send to editor MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Edit current image in external editor Ctrl+E +MAIN_BUTTON_SHOWHIDESIDEPANELS_TOOLTIP;Show/hide all side panels m MAIN_BUTTON_UNFULLSCREEN;Exit fullscreen MAIN_FRAME_BATCHQUEUE;Batch Queue MAIN_FRAME_BATCHQUEUE_TOOLTIP; Batch Queue Ctrl-F3 @@ -360,14 +361,16 @@ MAIN_TAB_TAGGING;Tagging MAIN_TAB_TRANSFORM;Transform 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) H +MAIN_TOOLTIP_HIDEHP;Show/hide the left panel (including the history) l MAIN_TOOLTIP_INDCLIPPEDH;Clipped highlight indication (Key <) MAIN_TOOLTIP_INDCLIPPEDS;Clipped shadow indication (Key >) MAIN_TOOLTIP_PREFERENCES;Set preferences MAIN_TOOLTIP_QINFO;Quick info on the image I MAIN_TOOLTIP_SAVE;Save image to the default folder MAIN_TOOLTIP_SAVEAS;Save image to a selected folder -MAIN_TOOLTIP_SHOWHIDELP1;Show/hide the left panel H +MAIN_TOOLTIP_SHOWHIDELP1;Show/hide the left panel l +MAIN_TOOLTIP_SHOWHIDERP1;Show/hide the right panel Alt-l +MAIN_TOOLTIP_SHOWHIDETP1;Show/hide the top panel Shift-l MAIN_TOOLTIP_TOGGLE;Toggle before/after view B NAVIGATOR_B_NA;B = n/a NAVIGATOR_B_VALUE;B = %1 @@ -579,7 +582,7 @@ SAVEDLG_SAVESPP;Save processing parameters with image SAVEDLG_TIFFFILTER;TIFF files SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF TOOLBAR_TOOLTIP_CROP;Crop selection C -TOOLBAR_TOOLTIP_HAND;Hand tool N +TOOLBAR_TOOLTIP_HAND;Hand tool H TOOLBAR_TOOLTIP_STRAIGHTEN;Straight line selection S TOOLBAR_TOOLTIP_WB;Spot white balance W TP_CACORRECTION_BLUE;Blue diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc index 53f4e93db..588d2a81b 100644 --- a/rtgui/editorpanel.cc +++ b/rtgui/editorpanel.cc @@ -44,7 +44,7 @@ EditorPanel::EditorPanel (FilePanel* filePanel) : beforePreviewHandler(NULL), be // build GUI // build left side panel leftbox = new Gtk::VBox (); - leftbox->set_border_width (4); + leftbox->set_border_width (2); leftbox->set_size_request(100,250); histogramPanel = Gtk::manage (new HistogramPanel ()); @@ -59,7 +59,7 @@ EditorPanel::EditorPanel (FilePanel* filePanel) : beforePreviewHandler(NULL), be navigator = Gtk::manage (new Navigator ()); navigator->previewWindow->set_size_request (-1, 150); - leftbox->pack_start (*navigator, Gtk::PACK_SHRINK, 4); + leftbox->pack_start (*navigator, Gtk::PACK_SHRINK, 2); history = Gtk::manage (new History ()); leftbox->pack_start (*history); @@ -86,6 +86,7 @@ EditorPanel::EditorPanel (FilePanel* filePanel) : beforePreviewHandler(NULL), be Gtk::VSeparator* vsepz = Gtk::manage (new Gtk::VSeparator ()); Gtk::VSeparator* vsepi = Gtk::manage (new Gtk::VSeparator ()); Gtk::VSeparator* vseph = Gtk::manage (new Gtk::VSeparator ()); + Gtk::VSeparator* vsep1 = Gtk::manage (new Gtk::VSeparator ()); hidehp = Gtk::manage (new Gtk::ToggleButton ()); @@ -102,8 +103,25 @@ EditorPanel::EditorPanel (FilePanel* filePanel) : beforePreviewHandler(NULL), be hidehp->set_image (*iHistoryShow); } + tbTopPanel_1 = new Gtk::ToggleButton (); + iTopPanel_1_Show = new Gtk::Image(argv0+"/images/panel_to_bottom.png"); + iTopPanel_1_Hide = new Gtk::Image(argv0+"/images/panel_to_top.png"); + tbTopPanel_1->set_relief(Gtk::RELIEF_NONE); + tbTopPanel_1->set_active (true); + tbTopPanel_1->set_tooltip_markup (M("MAIN_TOOLTIP_SHOWHIDETP1")); + tbTopPanel_1->set_image (*iTopPanel_1_Hide); + + tbRightPanel_1 = new Gtk::ToggleButton (); + iRightPanel_1_Show = new Gtk::Image(argv0+"/images/panel_to_left.png"); + iRightPanel_1_Hide = new Gtk::Image(argv0+"/images/panel_to_right.png"); + tbRightPanel_1->set_relief(Gtk::RELIEF_NONE); + tbRightPanel_1->set_active (true); + tbRightPanel_1->set_tooltip_markup (M("MAIN_TOOLTIP_SHOWHIDERP1")); + tbRightPanel_1->set_image (*iRightPanel_1_Hide); + Gtk::VSeparator* vsepcl = Gtk::manage (new Gtk::VSeparator ()); Gtk::VSeparator* vsepz2 = Gtk::manage (new Gtk::VSeparator ()); + Gtk::VSeparator* vsepz3 = Gtk::manage (new Gtk::VSeparator ()); iarea = new ImageAreaPanel (); @@ -115,8 +133,11 @@ EditorPanel::EditorPanel (FilePanel* filePanel) : beforePreviewHandler(NULL), be toolBarPanel->pack_start (*vsepi, Gtk::PACK_SHRINK, 2); toolBarPanel->pack_start (*tpc->getToolBar(), Gtk::PACK_SHRINK, 1); toolBarPanel->pack_start (*vsept, Gtk::PACK_SHRINK, 2); - toolBarPanel->pack_end (*tpc->coarse, Gtk::PACK_SHRINK, 4); - toolBarPanel->pack_end (*vsepcl, Gtk::PACK_SHRINK, 4); + + toolBarPanel->pack_end (*tbTopPanel_1, Gtk::PACK_SHRINK, 1); + toolBarPanel->pack_end (*vsep1, Gtk::PACK_SHRINK, 2); + toolBarPanel->pack_end (*tpc->coarse, Gtk::PACK_SHRINK, 2); + toolBarPanel->pack_end (*vsepcl, Gtk::PACK_SHRINK, 2); toolBarPanel->pack_end (*iarea->imageArea->indClippedPanel, Gtk::PACK_SHRINK, 0); toolBarPanel->pack_end (*vsepz, Gtk::PACK_SHRINK, 2); @@ -126,16 +147,16 @@ EditorPanel::EditorPanel (FilePanel* filePanel) : beforePreviewHandler(NULL), be beforeAfterBox = Gtk::manage (new Gtk::HBox()); beforeAfterBox->pack_start (*afterBox); - editbox->pack_start (*toolBarPanel, Gtk::PACK_SHRINK); + editbox->pack_start (*toolBarPanel, Gtk::PACK_SHRINK,0); editbox->pack_start (*beforeAfterBox); // build right side panel vboxright = new Gtk::VBox (false, 0); vboxright->set_size_request(100,250); - vboxright->set_border_width (4); - vboxright->pack_start (*histogramPanel, Gtk::PACK_SHRINK, 4); - vboxright->pack_start (*ppframe, Gtk::PACK_SHRINK, 4); + vboxright->set_border_width (2); + vboxright->pack_start (*histogramPanel, Gtk::PACK_SHRINK, 2); + vboxright->pack_start (*ppframe, Gtk::PACK_SHRINK, 2); // main notebook vboxright->pack_start (*tpc->toolPanelNotebook); @@ -176,16 +197,28 @@ EditorPanel::EditorPanel (FilePanel* filePanel) : beforePreviewHandler(NULL), be green = new Gtk::Image (argv0+"/images/green.png"); red->show (); green->show (); - statusBox->pack_end (*green, Gtk::PACK_SHRINK, 4); - iops->pack_start(*statusBox, Gtk::PACK_SHRINK, 4); + statusBox->pack_end (*green, Gtk::PACK_SHRINK, 2); + iops->pack_start(*statusBox, Gtk::PACK_SHRINK, 2); + + // tbRightPanel_1 + iops->pack_end (*tbRightPanel_1, Gtk::PACK_SHRINK,0); + + // ShowHideSidePanels + tbShowHideSidePanels = new Gtk::ToggleButton (); + iShowHideSidePanels = new Gtk::Image(argv0+"/images/crossed_arrows_out_45_02.png"); + tbShowHideSidePanels->set_relief(Gtk::RELIEF_NONE); + tbShowHideSidePanels->set_active (false); + tbShowHideSidePanels->set_tooltip_markup (M("MAIN_BUTTON_SHOWHIDESIDEPANELS_TOOLTIP")); + tbShowHideSidePanels->set_image (*iShowHideSidePanels); + iops->pack_end (*tbShowHideSidePanels, Gtk::PACK_SHRINK,0); + iops->pack_end (*vsepz2, Gtk::PACK_SHRINK,1); // Zoom panel iops->pack_end (*iarea->imageArea->zoomPanel, Gtk::PACK_SHRINK, 1); - iops->pack_end (*vsepz2, Gtk::PACK_SHRINK, 2); + iops->pack_end (*vsepz3, Gtk::PACK_SHRINK, 2); - - editbox->pack_start (*Gtk::manage(new Gtk::HSeparator()), Gtk::PACK_SHRINK, 4); - editbox->pack_start (*iops, Gtk::PACK_SHRINK, 4); + editbox->pack_start (*Gtk::manage(new Gtk::HSeparator()), Gtk::PACK_SHRINK, 0); + editbox->pack_start (*iops, Gtk::PACK_SHRINK, 0); editbox->show_all (); // build screen @@ -249,10 +282,12 @@ EditorPanel::EditorPanel (FilePanel* filePanel) : beforePreviewHandler(NULL), be info->signal_toggled().connect( sigc::mem_fun(*this, &EditorPanel::info_toggled) ); beforeAfter->signal_toggled().connect( sigc::mem_fun(*this, &EditorPanel::beforeAfterToggled) ); hidehp->signal_toggled().connect( sigc::mem_fun(*this, &EditorPanel::hideHistoryActivated) ); + tbTopPanel_1->signal_toggled().connect( sigc::mem_fun(*this, &EditorPanel::tbTopPanel_1_toggled) ); + tbRightPanel_1->signal_toggled().connect( sigc::mem_fun(*this, &EditorPanel::tbRightPanel_1_toggled) ); saveimgas->signal_pressed().connect( sigc::mem_fun(*this, &EditorPanel::saveAsPressed) ); queueimg->signal_pressed().connect( sigc::mem_fun(*this, &EditorPanel::queueImgPressed) ); sendtogimp->signal_pressed().connect( sigc::mem_fun(*this, &EditorPanel::sendToGimpPressed) ); - + ShowHideSidePanelsconn = tbShowHideSidePanels->signal_toggled().connect ( sigc::mem_fun(*this, &EditorPanel::toggleSidePanels), true); } EditorPanel::~EditorPanel () { @@ -569,7 +604,7 @@ void EditorPanel::refreshProcessingState (bool inProcessing) { if (inProcessing) { if (processingStartedTime==0) processingStartedTime = ::time(NULL); - statusBox->pack_end (*red, Gtk::PACK_SHRINK, 4); + statusBox->pack_end (*red, Gtk::PACK_SHRINK, 2); } else { if (processingStartedTime!=0) { time_t curTime= ::time(NULL); @@ -579,7 +614,7 @@ void EditorPanel::refreshProcessingState (bool inProcessing) { processingStartedTime = 0; } - statusBox->pack_end (*green, Gtk::PACK_SHRINK, 4); + statusBox->pack_end (*green, Gtk::PACK_SHRINK, 2); } } @@ -671,12 +706,96 @@ void EditorPanel::hideHistoryActivated () { else { hidehp->set_image (*iHistoryShow); } + + tbShowHideSidePanels_managestate(); +} + + +void EditorPanel::tbRightPanel_1_toggled () { +/* + removeIfThere (hpanedr, vboxright, false); + if (tbRightPanel_1->get_active()){ + hpanedr->pack2(*vboxright, false, true); + tbRightPanel_1->set_image (*iRightPanel_1_Hide); + } + else { + tbRightPanel_1->set_image (*iRightPanel_1_Show); + } + tbShowHideSidePanels_managestate(); + */ + if (vboxright){ + if (tbRightPanel_1->get_active()){ + vboxright->show(); + tbRightPanel_1->set_image (*iRightPanel_1_Hide); + } + else{ + vboxright->hide(); + tbRightPanel_1->set_image (*iRightPanel_1_Show); + } + tbShowHideSidePanels_managestate(); + } +} + +void EditorPanel::tbTopPanel_1_visible (bool visible){ + if (visible) + tbTopPanel_1->show(); + else + tbTopPanel_1->hide(); +} + +void EditorPanel::tbTopPanel_1_toggled () { + + if (catalogPane){ // catalogPane does not exist in multitab mode + tbTopPanel_1_Active = tbTopPanel_1->get_active(); + + if (tbTopPanel_1_Active){ + catalogPane->show(); + tbTopPanel_1->set_image (*iTopPanel_1_Hide); + } + else { + catalogPane->hide(); + tbTopPanel_1->set_image (*iTopPanel_1_Show); + } + + tbShowHideSidePanels_managestate(); + } } bool EditorPanel::handleShortcutKey (GdkEventKey* event) { bool ctrl = event->state & GDK_CONTROL_MASK; bool shift = event->state & GDK_SHIFT_MASK; + bool alt = event->state & GDK_MOD1_MASK; + + + // Editor Layout + switch(event->keyval) { + case GDK_L: + tbTopPanel_1->set_active (!tbTopPanel_1->get_active()); // toggle top panel + if (ctrl) hidehp->set_active (!hidehp->get_active()); // toggle History (left panel) + if (alt) tbRightPanel_1->set_active (!tbRightPanel_1->get_active()); // toggle right panel + return true; + case GDK_l: + if (!shift && !alt /*&& !ctrl*/){ + hidehp->set_active (!hidehp->get_active()); // toggle History (left panel) + return true; + } + if (alt && !ctrl){ // toggle right panel + tbRightPanel_1->set_active (!tbRightPanel_1->get_active()); + return true; + } + if (alt && ctrl){ // toggle left and right panels + hidehp->set_active (!hidehp->get_active()); + tbRightPanel_1->set_active (!tbRightPanel_1->get_active()); + return true; + } + case GDK_m: // Maximize preview panel: hide top AND right AND history panels + if (!ctrl) 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) { // Normal @@ -688,10 +807,6 @@ bool EditorPanel::handleShortcutKey (GdkEventKey* event) { tpc->coarse->rotateLeft(); return true; - case GDK_h: - case GDK_H: - hidehp->set_active (!hidehp->get_active()); - return true; case GDK_i: case GDK_I: info->set_active (!info->get_active()); @@ -711,11 +826,10 @@ bool EditorPanel::handleShortcutKey (GdkEventKey* event) { case GDK_1: iarea->imageArea->zoomPanel->zoom11Clicked(); return true; + case GDK_f: - case GDK_F: iarea->imageArea->zoomPanel->zoomFitClicked(); return true; - case GDK_less: iarea->imageArea->indClippedPanel->toggleClipped(true); return true; @@ -1156,3 +1270,39 @@ void EditorPanel::histogramChanged (unsigned int* rh, unsigned int* gh, unsigned histogramPanel->histogramChanged (rh, gh, bh, lh); tpc->updateCurveBackgroundHistogram (bcrgb, bcl); } + +bool EditorPanel::CheckSidePanelsVisibility(){ + if(tbTopPanel_1->get_active()==false && tbRightPanel_1->get_active()==false && hidehp->get_active()==false) + return false; + else + return true; +} +void EditorPanel::toggleSidePanels(){ + // Maximize preview panel: + // toggle top AND right AND history panels + + bool bAllSidePanelsVisible; + bAllSidePanelsVisible= CheckSidePanelsVisibility(); + + tbTopPanel_1->set_active (!bAllSidePanelsVisible); + tbRightPanel_1->set_active (!bAllSidePanelsVisible); + hidehp->set_active (!bAllSidePanelsVisible); +} + +void EditorPanel::toggleSidePanelsZoomFit(){ + toggleSidePanels(); + + // fit image preview + // !!! TODO this does not want to work... seems to have an effect on a subsequent key press + // iarea->imageArea->zoomPanel->zoomFitClicked(); +} + +void EditorPanel::tbShowHideSidePanels_managestate(){ + bool bAllSidePanelsVisible; + bAllSidePanelsVisible = CheckSidePanelsVisibility(); + ShowHideSidePanelsconn.block (true); + + tbShowHideSidePanels->set_active (!bAllSidePanelsVisible); + + ShowHideSidePanelsconn.block (false); +} diff --git a/rtgui/editorpanel.h b/rtgui/editorpanel.h index ade69f5ca..8ce26ad63 100644 --- a/rtgui/editorpanel.h +++ b/rtgui/editorpanel.h @@ -54,6 +54,12 @@ class EditorPanel : public Gtk::VBox, Gtk::Label *progressLabel; Gtk::ToggleButton* info; Gtk::ToggleButton* hidehp; + Gtk::ToggleButton* tbShowHideSidePanels; + Gtk::ToggleButton* tbTopPanel_1; + Gtk::ToggleButton* tbRightPanel_1; + bool tbTopPanel_1_Active; + bool tbRightPanel_1_Active; + //bool bAllSidePanelsVisible; Gtk::ToggleButton* beforeAfter; Gtk::HPaned* hpanedl; Gtk::HPaned* hpanedr; @@ -61,6 +67,9 @@ class EditorPanel : public Gtk::VBox, Gtk::Image* red; Gtk::Image* green; Gtk::Image *iHistoryShow, *iHistoryHide; + Gtk::Image *iTopPanel_1_Show, *iTopPanel_1_Hide; + Gtk::Image *iRightPanel_1_Show, *iRightPanel_1_Hide; + Gtk::Image *iShowHideSidePanels; Gtk::VBox* leftbox, *vboxright; Gtk::Button* queueimg; @@ -109,6 +118,8 @@ class EditorPanel : public Gtk::VBox, time_t processingStartedTime; + sigc::connection ShowHideSidePanelsconn; + public: EditorPanel (FilePanel* filePanel = NULL); @@ -145,11 +156,19 @@ class EditorPanel : public Gtk::VBox, // event handlers void info_toggled (); void hideHistoryActivated (); + void tbRightPanel_1_toggled (); + void tbTopPanel_1_toggled (); void beforeAfterToggled (); void saveAsPressed (); void queueImgPressed (); void sendToGimpPressed (); + void tbTopPanel_1_visible (bool visible); + bool CheckSidePanelsVisibility(); + void tbShowHideSidePanels_managestate(); + void toggleSidePanels(); + void toggleSidePanelsZoomFit(); + void saveProfile (); Glib::ustring getShortName (); Glib::ustring getFileName (); diff --git a/rtgui/filecatalog.cc b/rtgui/filecatalog.cc index d49f648ff..38a81405e 100644 --- a/rtgui/filecatalog.cc +++ b/rtgui/filecatalog.cc @@ -90,7 +90,7 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) : tbLeftPanel_1->set_active (true); tbLeftPanel_1->set_tooltip_markup (M("MAIN_TOOLTIP_SHOWHIDELP1")); tbLeftPanel_1->set_image (*iLeftPanel_1_Hide); - tbLeftPanel_1->signal_toggled().connect( sigc::mem_fun(*this, &FileCatalog::tbLeftPanel_1_Activated) ); + tbLeftPanel_1->signal_toggled().connect( sigc::mem_fun(*this, &FileCatalog::tbLeftPanel_1_toggled) ); buttonBar->pack_start (*tbLeftPanel_1, Gtk::PACK_SHRINK); buttonBar->pack_start (*(new Gtk::VSeparator), Gtk::PACK_SHRINK); @@ -208,6 +208,17 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) : buttonBar->pack_start (*hbBrowsePath, Gtk::PACK_EXPAND_WIDGET,4); buttonBrowsePath->signal_clicked().connect( sigc::mem_fun(*this, &FileCatalog::buttonBrowsePathPressed) ); + tbRightPanel_1 = new Gtk::ToggleButton (); + iRightPanel_1_Show = new Gtk::Image(argv0+"/images/panel_to_left.png"); + iRightPanel_1_Hide = new Gtk::Image(argv0+"/images/panel_to_right.png"); + + tbRightPanel_1->set_relief(Gtk::RELIEF_NONE); + tbRightPanel_1->set_active (true); + tbRightPanel_1->set_tooltip_markup (M("MAIN_TOOLTIP_SHOWHIDERP1")); + tbRightPanel_1->set_image (*iRightPanel_1_Hide); + tbRightPanel_1->signal_toggled().connect( sigc::mem_fun(*this, &FileCatalog::tbRightPanel_1_toggled) ); + buttonBar->pack_end (*tbRightPanel_1, Gtk::PACK_SHRINK); + buttonBar->pack_end (*coarsePanel, Gtk::PACK_SHRINK); buttonBar->pack_end (*Gtk::manage(new Gtk::VSeparator), Gtk::PACK_SHRINK, 4); buttonBar->pack_end (*toolBar, Gtk::PACK_SHRINK); @@ -961,28 +972,73 @@ void FileCatalog::tbLeftPanel_1_visible (bool visible){ else tbLeftPanel_1->hide(); } -void FileCatalog::tbLeftPanel_1_Activated () { +void FileCatalog::tbRightPanel_1_visible (bool visible){ + if (visible) + tbRightPanel_1->show(); + else + tbRightPanel_1->hide(); +} +void FileCatalog::tbLeftPanel_1_toggled () { removeIfThere (filepanel->dirpaned, filepanel->placespaned, false); - if (tbLeftPanel_1->get_active()) + if (tbLeftPanel_1->get_active()){ filepanel->dirpaned->pack1 (*filepanel->placespaned, false, true); - - tbLeftPanel_1_Active = tbLeftPanel_1->get_active(); - - if (tbLeftPanel_1_Active){ - tbLeftPanel_1->set_image (*iLeftPanel_1_Hide); + tbLeftPanel_1->set_image (*iLeftPanel_1_Hide); } else { tbLeftPanel_1->set_image (*iLeftPanel_1_Show); } - } + +void FileCatalog::tbRightPanel_1_toggled () { + if (tbRightPanel_1->get_active()){ + filepanel->rightBox->show(); + tbRightPanel_1->set_image (*iRightPanel_1_Hide); + } + else{ + filepanel->rightBox->hide(); + tbRightPanel_1->set_image (*iRightPanel_1_Show); + } +} + +bool FileCatalog::CheckSidePanelsVisibility(){ + if(tbLeftPanel_1->get_active()==false && tbRightPanel_1->get_active()==false) + return false; + else + return true; +} +void FileCatalog::toggleSidePanels(){ + // toggle left AND right panels + + bool bAllSidePanelsVisible; + bAllSidePanelsVisible= CheckSidePanelsVisibility(); + + tbLeftPanel_1->set_active (!bAllSidePanelsVisible); + tbRightPanel_1->set_active (!bAllSidePanelsVisible); +} + bool FileCatalog::handleShortcutKey (GdkEventKey* event) { bool ctrl = event->state & GDK_CONTROL_MASK; bool shift = event->state & GDK_SHIFT_MASK; + bool alt = event->state & GDK_MOD1_MASK; modifierKey = event->state; + // GUI Layout + switch(event->keyval) { + case GDK_l: + if (!alt)tbLeftPanel_1->set_active (!tbLeftPanel_1->get_active()); // toggle left panel + if (alt && !ctrl) tbRightPanel_1->set_active (!tbRightPanel_1->get_active()); // toggle right panel + if (alt && ctrl) { + tbLeftPanel_1->set_active (!tbLeftPanel_1->get_active()); // toggle left panel + tbRightPanel_1->set_active (!tbRightPanel_1->get_active()); // toggle right panel + } + return true; + case GDK_m: + if (!ctrl) toggleSidePanels(); + return true; + } + switch(event->keyval) { case GDK_1: categoryButtonToggled(bRank[0]); @@ -1025,11 +1081,6 @@ bool FileCatalog::handleShortcutKey (GdkEventKey* event) { case GDK_bracketleft: coarsePanel->rotateLeft(); return true; - - case GDK_h: - case GDK_H: - tbLeftPanel_1->set_active (!tbLeftPanel_1->get_active()); - return true; case GDK_i: case GDK_I: exifInfo->set_active (!exifInfo->get_active()); diff --git a/rtgui/filecatalog.h b/rtgui/filecatalog.h index 1a731c295..798760488 100644 --- a/rtgui/filecatalog.h +++ b/rtgui/filecatalog.h @@ -75,7 +75,7 @@ class FileCatalog : public Gtk::VBox, Gtk::HBox* buttonBar; Gtk::HBox* buttonBar2; Gtk::ToggleButton* tbLeftPanel_1; - bool tbLeftPanel_1_Active; + Gtk::ToggleButton* tbRightPanel_1; Gtk::ToggleButton* bDir; Gtk::ToggleButton* bUnRanked; Gtk::ToggleButton* bRank[5]; @@ -84,7 +84,9 @@ class FileCatalog : public Gtk::VBox, Gtk::ToggleButton* exifInfo; sigc::connection bCateg[8]; Gtk::Image* iranked[5], *igranked[5]; - Gtk::Image *iTrashEmpty, *iTrashFull, *iRightArrow_red, *iRightArrow, *iLeftPanel_1_Show, *iLeftPanel_1_Hide; + Gtk::Image *iTrashEmpty, *iTrashFull; + Gtk::Image *iRightArrow_red, *iRightArrow; + Gtk::Image *iLeftPanel_1_Show, *iLeftPanel_1_Hide, *iRightPanel_1_Show, *iRightPanel_1_Hide; Gtk::Entry* BrowsePath; Gtk::Button* buttonBrowsePath; sigc::connection BrowsePathconn; @@ -187,15 +189,19 @@ class FileCatalog : public Gtk::VBox, void zoomOut (); void buttonBrowsePathPressed (); - void tbLeftPanel_1_Activated (); + + void tbLeftPanel_1_toggled (); void tbLeftPanel_1_visible (bool visible); + void tbRightPanel_1_toggled (); + void tbRightPanel_1_visible (bool visible); void openNextImage () { fileBrowser->openNextImage(); } void openPrevImage () { fileBrowser->openPrevImage(); } bool handleShortcutKey (GdkEventKey* event); - + bool CheckSidePanelsVisibility(); + void toggleSidePanels(); }; #endif diff --git a/rtgui/filepanel.h b/rtgui/filepanel.h index a3412adb9..f392f1e7b 100644 --- a/rtgui/filepanel.h +++ b/rtgui/filepanel.h @@ -42,7 +42,7 @@ class FilePanel : public Gtk::HPaned, PlacesBrowser* placesBrowser; RecentBrowser* recentBrowser; // FileCatalog* fileCatalog; // filecatalog is the file browser with the button bar above it - Gtk::HBox* rightBox; + Gtk::VPaned* tpcPaned; BatchToolPanelCoordinator* tpc; History* history; @@ -58,7 +58,9 @@ class FilePanel : public Gtk::HPaned, Gtk::Paned* placespaned; Gtk::HPaned* dirpaned; - DirBrowser* dirBrowser; + Gtk::HBox* rightBox; + + DirBrowser* dirBrowser; FilterPanel* filterPanel; FileCatalog* fileCatalog; Gtk::Paned *ribbonPane; diff --git a/rtgui/rtwindow.cc b/rtgui/rtwindow.cc index 62c3c3344..584ef333b 100644 --- a/rtgui/rtwindow.cc +++ b/rtgui/rtwindow.cc @@ -119,6 +119,7 @@ RTWindow::RTWindow () vbe->set_spacing (2); vbe->set_tooltip_markup (M("MAIN_FRAME_EDITOR_TOOLTIP")); vbe->show_all (); + epanel->tbTopPanel_1_visible(true); //show the toggle Top Panel button mainNB->append_page (*epanel, *vbe); } else { Gtk::HBox* hbe = Gtk::manage (new Gtk::HBox ()); @@ -127,6 +128,7 @@ RTWindow::RTWindow () hbe->set_spacing (2); hbe->set_tooltip_markup (M("MAIN_FRAME_EDITOR_TOOLTIP")); hbe->show_all (); + epanel->tbTopPanel_1_visible(true); //show the toggle Top Panel button mainNB->append_page (*epanel, *hbe); } @@ -140,19 +142,27 @@ RTWindow::RTWindow () mainBox->pack_start (*bottomBox, Gtk::PACK_SHRINK, 1); // filling bottom box + iFullScreen = new Gtk::Image(argv0+"/images/fullscreen.png"); + iFullScreen_exit = new Gtk::Image(argv0+"/images/fullscreen_exit.png"); + Gtk::LinkButton* rtWeb = Gtk::manage (new Gtk::LinkButton ("http://rawtherapee.com")); - Gtk::Button* preferences = Gtk::manage (new Gtk::Button (M("MAIN_BUTTON_PREFERENCES")+"...")); + //Gtk::Button* preferences = Gtk::manage (new Gtk::Button (M("MAIN_BUTTON_PREFERENCES")+"...")); + Gtk::Button* preferences = Gtk::manage (new Gtk::Button ()); preferences->set_image (*Gtk::manage(new Gtk::Image (Gtk::StockID("gtk-preferences"), Gtk::ICON_SIZE_BUTTON))); + preferences->set_tooltip_markup (M("MAIN_BUTTON_PREFERENCES")); preferences->signal_clicked().connect( sigc::mem_fun(*this, &RTWindow::showPreferences) ); is_fullscreen = false; - btn_fullscreen = Gtk::manage( new Gtk::Button(M("MAIN_BUTTON_FULLSCREEN"))); + //btn_fullscreen = Gtk::manage( new Gtk::Button(M("MAIN_BUTTON_FULLSCREEN"))); + btn_fullscreen = Gtk::manage( new Gtk::Button()); + btn_fullscreen->set_tooltip_markup (M("MAIN_BUTTON_FULLSCREEN")); + btn_fullscreen->set_image (*iFullScreen); btn_fullscreen->signal_clicked().connect( sigc::mem_fun(*this, &RTWindow::toggle_fullscreen) ); bottomBox->pack_start (*preferences, Gtk::PACK_SHRINK, 0); - bottomBox->pack_end (*btn_fullscreen, Gtk::PACK_SHRINK, 4); - bottomBox->pack_start (*rtWeb, Gtk::PACK_SHRINK, 4); + bottomBox->pack_end (*btn_fullscreen, Gtk::PACK_SHRINK, 1); + bottomBox->pack_start (*rtWeb, Gtk::PACK_SHRINK, 1); bottomBox->pack_start (prLabel ); prLabel.set_alignment(Gtk::ALIGN_RIGHT); - bottomBox->pack_start (prProgBar, Gtk::PACK_SHRINK, 4); + bottomBox->pack_start (prProgBar, Gtk::PACK_SHRINK, 1); pldBridge = new PLDBridge(&prLabel,&prProgBar); @@ -240,6 +250,7 @@ void RTWindow::addEditorPanel (EditorPanel* ep, const std::string &name) { epanels[ name ] = ep; filesEdited.insert ( name ); fpanel->refreshEditedState (filesEdited); + ep->tbTopPanel_1_visible(false); //hide the toggle Top Panel button } } @@ -371,11 +382,15 @@ void RTWindow::toggle_fullscreen () { if (is_fullscreen) { unfullscreen(); is_fullscreen = false; - btn_fullscreen->set_label(M("MAIN_BUTTON_FULLSCREEN")); + //btn_fullscreen->set_label(M("MAIN_BUTTON_FULLSCREEN")); + btn_fullscreen->set_tooltip_markup(M("MAIN_BUTTON_FULLSCREEN")); + btn_fullscreen->set_image (*iFullScreen); } else { fullscreen(); is_fullscreen = true; - btn_fullscreen->set_label(M("MAIN_BUTTON_UNFULLSCREEN")); + //btn_fullscreen->set_label(M("MAIN_BUTTON_UNFULLSCREEN")); + btn_fullscreen->set_tooltip_markup(M("MAIN_BUTTON_UNFULLSCREEN")); + btn_fullscreen->set_image (*iFullScreen_exit); } } @@ -402,6 +417,7 @@ void RTWindow::MoveFileBrowserToMain() fpanel->ribbonPane->add(*fCatalog); fCatalog->enableTabMode(false); fCatalog->tbLeftPanel_1_visible(true); + fCatalog->tbRightPanel_1_visible(true); } } @@ -415,6 +431,7 @@ void RTWindow::MoveFileBrowserToEditor() fCatalog->enableTabMode(true); fCatalog->refreshHeight(); fCatalog->tbLeftPanel_1_visible(false); + fCatalog->tbRightPanel_1_visible(false); } } diff --git a/rtgui/rtwindow.h b/rtgui/rtwindow.h index 26ae3be85..42a82546b 100644 --- a/rtgui/rtwindow.h +++ b/rtgui/rtwindow.h @@ -40,6 +40,8 @@ class RTWindow : public Gtk::Window, public rtengine::ProgressListener{ bool is_fullscreen; Gtk::Button * btn_fullscreen; + Gtk::Image *iFullScreen, *iFullScreen_exit; + bool isSingleTabMode() { return !options.tabbedUI && !EditWindow::isMultiDisplayEnabled(); }; bool on_expose_event_epanel(GdkEventExpose* event); diff --git a/rtgui/toolbar.cc b/rtgui/toolbar.cc index cc3830313..52f3298be 100644 --- a/rtgui/toolbar.cc +++ b/rtgui/toolbar.cc @@ -213,8 +213,8 @@ bool ToolBar::handleShortcutKey (GdkEventKey* event) { case GDK_S: stra_pressed (); return true; - case GDK_n: - case GDK_N: + case GDK_h: + case GDK_H: hand_pressed (); return true; }