Gtk3 by Hombre, issue 2807

This commit is contained in:
Morgan Hardwood
2015-08-12 16:07:19 +02:00
parent 91f67f0cb6
commit 56a0805bc7
133 changed files with 3950 additions and 2626 deletions

View File

@@ -17,6 +17,7 @@
* along with RawTherapee. If not, see <http://www.gnu.org/licenses/>.
*/
#include <gtkmm.h>
#include "rtwindow.h"
#include "options.h"
#include "preferences.h"
@@ -133,10 +134,8 @@ RTWindow::RTWindow ()
}
set_title_decorated("");
property_allow_shrink() = true;
set_default_size(options.windowWidth, options.windowHeight);
set_modal(false);
set_resizable(true);
if (options.windowMaximized) {
maximize();
@@ -176,28 +175,25 @@ RTWindow::RTWindow ()
fpanel->setParent (this);
// decorate tab
Gtk::Grid* fpanelLabelGrid = Gtk::manage (new Gtk::Grid ());
setExpandAlignProperties(fpanelLabelGrid, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER);
Gtk::Label* fpl = Gtk::manage (new Gtk::Label( Glib::ustring(" ") + M("MAIN_FRAME_EDITOR") ));
if (options.mainNBVertical) {
mainNB->set_tab_pos (Gtk::POS_LEFT);
Gtk::VBox* vbf = Gtk::manage (new Gtk::VBox ());
vbf->pack_start (*Gtk::manage (new Gtk::Image (Gtk::Stock::DIRECTORY, Gtk::ICON_SIZE_MENU)));
Gtk::Label* l = Gtk::manage(new Gtk::Label (Glib::ustring(" ") + M("MAIN_FRAME_FILEBROWSER")));
l->set_angle (90);
vbf->pack_start (*l);
vbf->set_spacing (2);
vbf->set_tooltip_markup (M("MAIN_FRAME_FILEBROWSER_TOOLTIP"));
vbf->show_all ();
mainNB->append_page (*fpanel, *vbf);
fpl->set_angle (90);
fpanelLabelGrid->attach_next_to(*fpl, Gtk::POS_BOTTOM, 1, 1);
fpanelLabelGrid->attach_next_to(*Gtk::manage (new RTImage ("gtk-directory.png")), *fpl, Gtk::POS_TOP, 1, 1);
} else {
Gtk::HBox* hbf = Gtk::manage (new Gtk::HBox ());
hbf->pack_start (*Gtk::manage (new Gtk::Image (Gtk::Stock::DIRECTORY, Gtk::ICON_SIZE_MENU)));
hbf->pack_start (*Gtk::manage (new Gtk::Label (M("MAIN_FRAME_FILEBROWSER"))));
hbf->set_spacing (2);
hbf->set_tooltip_markup (M("MAIN_FRAME_FILEBROWSER_TOOLTIP"));
hbf->show_all ();
mainNB->append_page (*fpanel, *hbf);
fpanelLabelGrid->attach_next_to(*fpl, Gtk::POS_LEFT, 1, 1);
fpanelLabelGrid->attach_next_to(*Gtk::manage (new RTImage ("gtk-directory.png")), *fpl, Gtk::POS_RIGHT, 1, 1);
}
fpanelLabelGrid->set_tooltip_markup (M("MAIN_FRAME_FILEBROWSER_TOOLTIP"));
fpanelLabelGrid->show_all ();
mainNB->append_page (*fpanel, *fpanelLabelGrid);
bpanel = Gtk::manage ( new BatchQueuePanel (fpanel->fileCatalog) );
bpanel->setParent (this);
@@ -215,90 +211,86 @@ RTWindow::RTWindow ()
epanel->setParent (this);
// decorate tab
Gtk::Grid* editorLabelGrid = Gtk::manage (new Gtk::Grid ());
setExpandAlignProperties(editorLabelGrid, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER);
Gtk::Label* el = Gtk::manage (new Gtk::Label( Glib::ustring(" ") + M("MAIN_FRAME_EDITOR") ));
if (options.mainNBVertical) {
Gtk::VBox* vbe = Gtk::manage (new Gtk::VBox ());
vbe->pack_start (*Gtk::manage (new RTImage ("rt-logo.png")));
Gtk::Label* l = Gtk::manage (new Gtk::Label( Glib::ustring(" ") + M("MAIN_FRAME_EDITOR") ));
//l->set_markup(Glib::ustring("<b>Editor</b>")); Bold difficult to read
l->set_angle (90);
vbe->pack_start (*l);
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);
el->set_angle (90);
editorLabelGrid->attach_next_to(*el, Gtk::POS_BOTTOM, 1, 1);
editorLabelGrid->attach_next_to(*Gtk::manage (new RTImage ("rt-logo.png")), *el, Gtk::POS_TOP, 1, 1);
} else {
Gtk::HBox* hbe = Gtk::manage (new Gtk::HBox ());
hbe->pack_start (*Gtk::manage (new RTImage ("rt-logo.png")));
hbe->pack_start (*Gtk::manage (new Gtk::Label( Glib::ustring(" ") + M("MAIN_FRAME_EDITOR") )));
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);
editorLabelGrid->attach_next_to(*el, Gtk::POS_LEFT, 1, 1);
editorLabelGrid->attach_next_to(*Gtk::manage (new RTImage ("rt-logo.png")), *el, Gtk::POS_RIGHT, 1, 1);
}
editorLabelGrid->set_tooltip_markup (M("MAIN_FRAME_EDITOR_TOOLTIP"));
editorLabelGrid->show_all ();
epanel->tbTopPanel_1_visible(true); //show the toggle Top Panel button
mainNB->append_page (*epanel, *editorLabelGrid);
mainNB->set_current_page (mainNB->page_num (*fpanel));
Gtk::VBox* mainBox = Gtk::manage (new Gtk::VBox ());
mainBox->pack_start (*mainNB);
//Gtk::VBox* mainBox = Gtk::manage (new Gtk::VBox ());
//mainBox->pack_start (*mainNB);
// filling bottom box
iFullscreen = new RTImage ("fullscreen.png");
iFullscreen_exit = new RTImage ("fullscreen-exit.png");
Gtk::LinkButton* rtWeb = Gtk::manage (new Gtk::LinkButton ("http://rawtherapee.com"));
//Gtk::LinkButton* rtWeb = Gtk::manage (new Gtk::LinkButton ("http://rawtherapee.com")); // unused... but fail to be linked anyway !?
//Gtk::Button* preferences = Gtk::manage (new Gtk::Button (M("MAIN_BUTTON_PREFERENCES")+"..."));
Gtk::Button* preferences = Gtk::manage (new Gtk::Button ());
preferences->set_hexpand(false);
preferences->set_vexpand(false);
preferences->set_halign(Gtk::ALIGN_CENTER);
preferences->set_valign(Gtk::ALIGN_CENTER);
preferences->set_image (*Gtk::manage(new RTImage ("gtk-preferences.png")));
preferences->set_tooltip_markup (M("MAIN_BUTTON_PREFERENCES"));
preferences->signal_clicked().connect( sigc::mem_fun(*this, &RTWindow::showPreferences) );
//btn_fullscreen = Gtk::manage( new Gtk::Button(M("MAIN_BUTTON_FULLSCREEN")));
btn_fullscreen = Gtk::manage( new Gtk::Button());
btn_fullscreen->set_hexpand(false);
btn_fullscreen->set_vexpand(false);
btn_fullscreen->set_halign(Gtk::ALIGN_CENTER);
btn_fullscreen->set_valign(Gtk::ALIGN_CENTER);
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) );
#if GTKMM_MINOR_VERSION >= 20
setExpandAlignProperties(&prProgBar, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER);
prProgBar.set_show_text(true);
Gtk::Grid* actionGrid = Gtk::manage (new Gtk::Grid ());
setExpandAlignProperties(actionGrid, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER);
if (options.mainNBVertical) {
Gtk::VBox* bottomVBox = Gtk::manage (new Gtk::VBox ());
bottomVBox->pack_start (prProgBar, Gtk::PACK_SHRINK, 1);
bottomVBox->pack_end (*preferences, Gtk::PACK_SHRINK, 0);
bottomVBox->pack_end (*btn_fullscreen, Gtk::PACK_EXPAND_WIDGET, 1);
prProgBar.set_orientation(Gtk::PROGRESS_BOTTOM_TO_TOP);
mainNB->set_action_widget( bottomVBox, Gtk::PACK_END);
bottomVBox->show_all();
actionGrid->attach_next_to(*btn_fullscreen, Gtk::POS_BOTTOM, 1, 1);
actionGrid->attach_next_to(*preferences, *btn_fullscreen, Gtk::POS_TOP, 1, 1);
actionGrid->attach_next_to(prProgBar, *preferences, Gtk::POS_TOP, 1, 1);
prProgBar.set_orientation(Gtk::ORIENTATION_VERTICAL);
//prProgBar.set_halign(Gtk::ALIGN_FILL); prProgBar.set_valign(Gtk::ALIGN_FILL);
mainNB->set_action_widget(actionGrid, Gtk::PACK_END);
} else {
Gtk::HBox* bottomHBox = Gtk::manage (new Gtk::HBox ());
bottomHBox->pack_end (*btn_fullscreen, Gtk::PACK_SHRINK, 1);
bottomHBox->pack_end (*preferences, Gtk::PACK_SHRINK, 0);
bottomHBox->pack_start (prProgBar, Gtk::PACK_EXPAND_WIDGET, 1);
mainNB->set_action_widget( bottomHBox, Gtk::PACK_END);
bottomHBox->show_all();
actionGrid->attach_next_to(*btn_fullscreen, Gtk::POS_RIGHT, 1, 1);
actionGrid->attach_next_to(*preferences, *btn_fullscreen, Gtk::POS_LEFT, 1, 1);
actionGrid->attach_next_to(prProgBar, *preferences, Gtk::POS_LEFT, 1, 1);
prProgBar.set_orientation(Gtk::ORIENTATION_HORIZONTAL);
//prProgBar.set_halign(Gtk::ALIGN_FILL); prProgBar.set_valign(Gtk::ALIGN_FILL);
mainNB->set_action_widget(actionGrid, Gtk::PACK_END);
}
#else
Gtk::HBox* bottomBox = Gtk::manage (new Gtk::HBox ());
bottomBox->pack_end (*btn_fullscreen, Gtk::PACK_SHRINK, 1);
bottomBox->pack_end (*preferences, Gtk::PACK_SHRINK, 0);
bottomBox->pack_start (prProgBar, Gtk::PACK_EXPAND_WIDGET, 1);
mainBox->pack_start (*bottomBox, Gtk::PACK_SHRINK, 1);
#endif
actionGrid->show_all();
pldBridge = new PLDBridge(static_cast<rtengine::ProgressListener*>(this));
Glib::RefPtr<Gtk::RcStyle> style = Gtk::RcStyle::create ();
style->set_xthickness (0);
style->set_ythickness (0);
rtWeb->modify_style (style);
add (*mainBox);
//add (*mainBox);
add (*mainNB);
show_all ();
}
if (!isSingleTabMode() && !simpleEditor) {
epanel->hide_all();
epanel->hide();
}
}
@@ -350,7 +342,7 @@ void RTWindow::on_realize ()
fpanel->setAspect();
}
cursorManager.init (get_window());
mainWindowCursorManager.init(get_window());
// Check if first run of this version, then display the Release Notes text
if (options.version != versionString) {
@@ -404,7 +396,7 @@ bool RTWindow::on_window_state_event(GdkEventWindowState* event)
return true;
}
void RTWindow::on_mainNB_switch_page(GtkNotebookPage* page, guint page_num)
void RTWindow::on_mainNB_switch_page(Gtk::Widget* widget, guint page_num)
{
if(!on_delete_has_run) {
if(isEditorPanel(page_num)) {
@@ -454,11 +446,8 @@ void RTWindow::addEditorPanel (EditorPanel* ep, const std::string &name)
closeb->set_relief (Gtk::RELIEF_NONE);
closeb->set_focus_on_click (false);
// make the button as small as possible
Glib::RefPtr<Gtk::RcStyle> style = Gtk::RcStyle::create ();
style->set_xthickness (0);
style->set_ythickness (0);
printf("TODO: make #tabClose as smalla s possible through css\n");
closeb->modify_style (style);
closeb->signal_clicked().connect( sigc::bind (sigc::mem_fun(*this, &RTWindow::remEditorPanel) , ep));
hb->pack_end (*closeb);
hb->set_spacing (2);
@@ -544,13 +533,13 @@ bool RTWindow::keyPressed (GdkEventKey* event)
#if defined(__APPLE__)
bool apple_cmd = event->state & GDK_MOD2_MASK;
if (event->keyval == GDK_q && apple_cmd) {
if (event->keyval == GDK_KEY_q && apple_cmd) {
try_quit = true;
}
#else
if (event->keyval == GDK_q && ctrl) {
if (event->keyval == GDK_KEY_q && ctrl) {
try_quit = true;
}
@@ -562,7 +551,7 @@ bool RTWindow::keyPressed (GdkEventKey* event)
}
}
if(event->keyval == GDK_F11) {
if(event->keyval == GDK_KEY_F11) {
toggle_fullscreen();
}
@@ -574,22 +563,22 @@ bool RTWindow::keyPressed (GdkEventKey* event)
if (ctrl) {
switch(event->keyval) {
case GDK_F2: // file browser panel
case GDK_KEY_F2: // file browser panel
mainNB->set_current_page (mainNB->page_num (*fpanel));
return true;
case GDK_F3: // batch queue panel
case GDK_KEY_F3: // batch queue panel
mainNB->set_current_page (mainNB->page_num (*bpanel));
return true;
case GDK_F4: //single tab mode, editor panel
case GDK_KEY_F4: //single tab mode, editor panel
if (isSingleTabMode() && epanel) {
mainNB->set_current_page (mainNB->page_num (*epanel));
}
return true;
case GDK_w: //multi-tab mode, close editor panel
case GDK_KEY_w: //multi-tab mode, close editor panel
if (!isSingleTabMode() &&
mainNB->get_current_page() != mainNB->page_num(*fpanel) &&
mainNB->get_current_page() != mainNB->page_num(*bpanel)) {