Main file catalog now scrolls to first selected image on returning from filmstrip; see issue #360

This commit is contained in:
Oliver Duis 2010-12-01 20:53:06 +01:00
parent a66758ceff
commit 10ebd2f7c4
3 changed files with 23 additions and 57 deletions

View File

@ -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);
}

View File

@ -1,8 +1,6 @@
/*
* This file is part of RawTherapee.
*
* Copyright (c) 2004-2010 Gabor Horvath <hgabor@rawtherapee.com>
*
* 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; i<fd.size(); i++)
@ -535,25 +529,31 @@ void ThumbBrowserBase::enableTabMode(bool enable) {
redraw ();
// Scroll to selected position if going into ribbon mode
if (inTabMode && !selected.empty()) {
int h=selected[0]->getStartX();
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<ThumbBrowserEntryBase*>::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 ();
}
}
*/

View File

@ -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);