rawTherapee/rtgui/saveasdlg.cc

142 lines
4.0 KiB
C++

/*
* 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
* (at your option) any later version.
*
* RawTherapee is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with RawTherapee. If not, see <http://www.gnu.org/licenses/>.
*/
#include "saveasdlg.h"
#include <multilangmgr.h>
extern Options options;
SaveAsDialog::SaveAsDialog (Glib::ustring initialDir) {
Gtk::VBox* vbox = get_vbox ();
fchooser = new Gtk::FileChooserWidget (Gtk::FILE_CHOOSER_ACTION_SAVE);
fchooser->set_current_folder (initialDir);
filter_jpg.set_name(M("SAVEDLG_JPGFILTER"));
filter_jpg.add_pattern("*.jpg");
filter_tif.set_name(M("SAVEDLG_JPGFILTER"));
filter_tif.add_pattern("*.tif");
filter_png.set_name(M("SAVEDLG_JPGFILTER"));
filter_png.add_pattern("*.png");
vbox->pack_start (*fchooser);
Gtk::HSeparator* hsep1 = new Gtk::HSeparator ();
vbox->pack_start (*hsep1, Gtk::PACK_SHRINK, 2);
// Output Options
// ~~~~~~~~~~~~~~
formatOpts = new SaveFormatPanel ();
formatOpts->init (options.saveFormat);
formatOpts->setListener (this);
vbox->pack_start (*formatOpts, Gtk::PACK_SHRINK, 4);
Gtk::HSeparator* hsep2 = new Gtk::HSeparator ();
vbox->pack_start (*hsep2, Gtk::PACK_SHRINK, 2);
// queue/immediate
// ~~~~~~~~~~~~~
immediately = new Gtk::RadioButton (M("SAVEDLG_SAVEIMMEDIATELY"));
putToQueueHead = new Gtk::RadioButton (M("SAVEDLG_PUTTOQUEUEHEAD"));
putToQueueTail = new Gtk::RadioButton (M("SAVEDLG_PUTTOQUEUETAIL"));
vbox->pack_start (*immediately, Gtk::PACK_SHRINK, 4);
vbox->pack_start (*putToQueueHead, Gtk::PACK_SHRINK, 4);
vbox->pack_start (*putToQueueTail, Gtk::PACK_SHRINK, 4);
immediately->set_active (true);
Gtk::RadioButton::Group g = immediately->get_group();
putToQueueHead->set_group (g);
putToQueueTail->set_group (g);
// buttons
// ~~~~~~
Gtk::Button* ok = new Gtk::Button (M("GENERAL_OK"));
Gtk::Button* cancel = new Gtk::Button (M("GENERAL_CANCEL"));
ok->set_image (*(new Gtk::Image (Gtk::StockID("gtk-ok"), Gtk::ICON_SIZE_BUTTON)));
cancel->set_image (*(new Gtk::Image (Gtk::StockID("gtk-cancel"), Gtk::ICON_SIZE_BUTTON)));
ok->signal_clicked().connect( sigc::mem_fun(*this, &SaveAsDialog::okPressed) );
cancel->signal_clicked().connect( sigc::mem_fun(*this, &SaveAsDialog::cancelPressed) );
get_action_area()->pack_end (*ok, Gtk::PACK_SHRINK, 4);
get_action_area()->pack_end (*cancel, Gtk::PACK_SHRINK, 4);
set_border_width (4);
show_all_children ();
}
bool SaveAsDialog::getImmediately () {
return immediately->get_active ();
}
bool SaveAsDialog::getToHeadOfQueue () {
return putToQueueHead->get_active ();
}
bool SaveAsDialog::getToTailOfQueue () {
return putToQueueTail->get_active ();
}
Glib::ustring SaveAsDialog::getFileName () {
return fname;
}
Glib::ustring SaveAsDialog::getDirectory () {
return fchooser->get_current_folder ();
}
SaveFormat SaveAsDialog::getFormat () {
return formatOpts->getFormat ();
}
void SaveAsDialog::okPressed () {
fname = fchooser->get_filename();
hide ();
}
void SaveAsDialog::cancelPressed () {
fname = "";
hide ();
}
void SaveAsDialog::formatChanged (Glib::ustring f) {
if (f=="jpg")
fchooser->set_filter (filter_jpg);
else if (f=="png")
fchooser->set_filter (filter_png);
else if (f=="tif")
fchooser->set_filter (filter_tif);
}
void SaveAsDialog::setInitialFileName (Glib::ustring fname) {
fchooser->set_current_name(fname);
}