From 10ebd2f7c49f795c48a27d31f44de564b25550d6 Mon Sep 17 00:00:00 2001 From: Oliver Duis Date: Wed, 1 Dec 2010 20:53:06 +0100 Subject: [PATCH] Main file catalog now scrolls to first selected image on returning from filmstrip; see issue #360 --- rtgui/rtwindow.cc | 26 +++++------------ rtgui/thumbbrowserbase.cc | 53 ++++++++++------------------------- rtgui/thumbbrowserentrybase.h | 1 + 3 files changed, 23 insertions(+), 57 deletions(-) diff --git a/rtgui/rtwindow.cc b/rtgui/rtwindow.cc index 344680cef..d880ff507 100644 --- a/rtgui/rtwindow.cc +++ b/rtgui/rtwindow.cc @@ -61,7 +61,6 @@ RTWindow::RTWindow () { hbf->set_spacing (2); hbf->show_all (); mainNB->append_page (*fpanel, *hbf); - fpanel->signal_expose_event().connect( sigc::mem_fun(*this, &RTWindow::on_expose_event_fpanel) ); bpanel = new BatchQueuePanel (); bpanel->setParent (this); @@ -85,8 +84,6 @@ RTWindow::RTWindow () { hbe->show_all (); mainNB->append_page (*epanel, *hbe); mainNB->set_current_page (mainNB->page_num (*fpanel)); - epanel->signal_expose_event().connect( sigc::mem_fun(*this, &RTWindow::on_expose_event_epanel) ); - signal_key_press_event().connect( sigc::mem_fun(*this, &RTWindow::keyPressed) ); @@ -124,7 +121,6 @@ RTWindow::RTWindow () { } void RTWindow::on_realize () { - Gtk::Window::on_realize (); fpanel->setAspect(); @@ -145,10 +141,16 @@ bool RTWindow::on_window_state_event(GdkEventWindowState* event) { } void RTWindow::on_mainNB_switch_page(GtkNotebookPage* page, guint page_num) { + bool singleTabMode = !options.tabbedUI && !EditWindow::isMultiDisplayEnabled(); + if (page_num > 1) { + if (singleTabMode) MoveFileBrowserToEditor(); + EditorPanel *ep = (EditorPanel *)mainNB->get_nth_page(page_num); ep->setAspect(); - } + } else { + if (singleTabMode) MoveFileBrowserToMain(); + } } void RTWindow::addEditorPanel (EditorPanel* ep, const std::string &name) { @@ -367,17 +369,3 @@ void RTWindow::MoveFileBrowserToEditor() } } -bool RTWindow::on_expose_event_epanel(GdkEventExpose* event) -{ - if(!options.tabbedUI && !EditWindow::isMultiDisplayEnabled()) - MoveFileBrowserToEditor(); - return false; // Gtk::VBox::on_expose_event(event); -} - - -bool RTWindow::on_expose_event_fpanel(GdkEventExpose* event) -{ - if(!options.tabbedUI && !EditWindow::isMultiDisplayEnabled()) - MoveFileBrowserToMain(); - return false; // Gtk::HPaned::on_expose_event(event); -} diff --git a/rtgui/thumbbrowserbase.cc b/rtgui/thumbbrowserbase.cc index 99ca1a4f5..56e4b9358 100644 --- a/rtgui/thumbbrowserbase.cc +++ b/rtgui/thumbbrowserbase.cc @@ -1,8 +1,6 @@ /* * This file is part of RawTherapee. * - * Copyright (c) 2004-2010 Gabor Horvath - * * RawTherapee is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or @@ -269,23 +267,19 @@ ThumbBrowserBase::Internal::Internal () : ofsX(0), ofsY(0), parent(NULL), dirty( } void ThumbBrowserBase::Internal::setParent (ThumbBrowserBase* p) { - parent = p; } void ThumbBrowserBase::Internal::setPosition (int x, int y) { - ofsX = x; ofsY = y; } bool ThumbBrowserBase::Internal::on_key_press_event (GdkEventKey* event) { - return parent->keyPressed (event); } bool ThumbBrowserBase::Internal::on_button_press_event (GdkEventButton* event) { - grab_focus (); parent->eventTime = event->time; @@ -300,11 +294,11 @@ bool ThumbBrowserBase::Internal::on_button_press_event (GdkEventButton* event) { gdk_window_invalidate_rect (window->gobj(), &rect, true); gdk_window_process_updates (window->gobj(), true); + return true; } void ThumbBrowserBase::buttonPressed (int x, int y, int button, GdkEventType type, int state, int clx, int cly, int clw, int clh) { - ThumbBrowserEntryBase* fileDescr = NULL; bool handled = false; for (int i=0; igetStartX(); - hscroll.set_value (MIN(h, hscroll.get_adjustment()->get_upper())); + // Scroll to selected position if going into ribbon mode or back + // Tab mode is horizontal, file browser is vertical + if (!selected.empty()) { + if (inTabMode) { + int h=selected[0]->getStartX(); + hscroll.set_value (MIN(h, hscroll.get_adjustment()->get_upper())); + } else { + int v=selected[0]->getStartY(); + vscroll.set_value (MIN(v, vscroll.get_adjustment()->get_upper())); + } } + + } void ThumbBrowserBase::initEntry (ThumbBrowserEntryBase* entry) { - - entry->setOffset ((int)(hscroll.get_value()), (int)(vscroll.get_value())); + entry->setOffset ((int)(hscroll.get_value()), (int)(vscroll.get_value())); } -void ThumbBrowserBase::getScrollPosition (double& h, double& v) { +void ThumbBrowserBase::getScrollPosition (double& h, double& v) { h = hscroll.get_value (); v = vscroll.get_value (); } void ThumbBrowserBase::setScrollPosition (double h, double v) { - hscroll.set_value (h>hscroll.get_adjustment()->get_upper() ? hscroll.get_adjustment()->get_upper() : h); vscroll.set_value (v>vscroll.get_adjustment()->get_upper() ? vscroll.get_adjustment()->get_upper() : v); } @@ -566,27 +566,4 @@ int ThumbBrowserBase::getEffectiveHeight() { } -/*void PreviewImgUpdater::processCustomOrder () { - - // find first filtered entry, if any - std::list::iterator i; - for (i=jqueue.begin (); i!=jqueue.end(); i++) - if (!(*i)->filtered) - break; - if (i==jqueue.end()) - i = jqueue.begin(); - - ThumbBrowserEntryBase* current = *i; - jqueue.erase (i); - - current->updateImg (); - if (parent) { - gdk_threads_enter (); - parent->queue_draw (); - if (parent->get_window()) - gdk_window_process_updates (parent->get_window()->gobj(), true); - gdk_threads_leave (); - } -} -*/ diff --git a/rtgui/thumbbrowserentrybase.h b/rtgui/thumbbrowserentrybase.h index 9b06dbb3d..06552a774 100644 --- a/rtgui/thumbbrowserentrybase.h +++ b/rtgui/thumbbrowserentrybase.h @@ -104,6 +104,7 @@ protected: int getEffectiveHeight () { return fnlabh+dtlabh+exlabh+textGap+exp_height; } int getStartX () { return startx; } + int getStartY () { return starty; } bool inside (int x, int y); bool insideWindow (int x, int y, int w, int h);