Codebase list granule / HEAD src / AppearancePrefs.cpp
HEAD

Tree @HEAD (Download .tar.gz)

AppearancePrefs.cpp @HEADraw · history · blame

// -*- c++ -*-
// generated by glade--
//------------------------------------------------------------------------------
// $Id: AppearancePrefs.cpp,v 1.14 2008/08/16 03:13:08 vlg Exp $
//------------------------------------------------------------------------------
//                            AppearancePrefs.cpp
//------------------------------------------------------------------------------
//  Copyright (c) 2006 by Vladislav Grinchenko
//
//  This program 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  
//  2 of the License, or (at your option) any later version.      
//------------------------------------------------------------------------------
//
// Date   : Sun Sep 3 2006
//
//------------------------------------------------------------------------------

#include <gtkmm/label.h>
#include <gtkmm/frame.h>
#include <gtkmm/box.h>
#include <gtkmm/scrolledwindow.h>

#include "Granule-main.h"
#include "GrappConf.h"
#include "PrefWindow.h"
#include "AppearancePrefs.h"
#include "TextAlignment.h"
#include "FontsSelectorUI.h"
#include "ColorsSelectorUI.h"

#include "Intern.h"             // i18n macros

using sigc::mem_fun;
using sigc::bind;

/**-----------------------------------------------------------------------------
 *   Class AppearancePrefs methods
 **-----------------------------------------------------------------------------
 */
AppearancePrefs::
AppearancePrefs (PrefWindow& pwin_) 
	: 
	Gtk::VBox (false, 0),
	m_pref_window (pwin_)
{  
	trace_with_mask("AppearancePrefs::AppearancePrefs",GUITRACE);

#if defined(IS_HILDON) || defined(IS_PDA)
	set_border_width(0);
#else
	set_border_width(14);
#endif

	Gtk::ScrolledWindow* scrollw = Gtk::manage (new Gtk::ScrolledWindow);

	scrollw->set_flags       (Gtk::CAN_FOCUS);
	scrollw->set_shadow_type (Gtk::SHADOW_NONE);
	scrollw->set_policy      (Gtk::POLICY_AUTOMATIC, Gtk::POLICY_ALWAYS);

#ifdef GLIBMM_PROPERTIES_ENABLED
	scrollw->property_window_placement ().set_value (Gtk::CORNER_TOP_LEFT);
#else
	scrollw->set_property ("window_placement", Gtk::CORNER_TOP_LEFT);
#endif

	/** Holds Fonts and Text Alignment
	 */
	Gtk::VBox* vbox = Gtk::manage (new Gtk::VBox (false, 0));

	/** Fonts View Widget
	 */
	m_fonts_selector = Gtk::manage (new FontsSelectorUI ());

	/** Colors View Widget
	 */
	m_colors_selector = Gtk::manage (new ColorsSelectorUI ());
	m_colors_selector->set_active (FRMCLR, false);

	/** Text Alignment (View) Widget
	 */
	m_text_alignment = Gtk::manage (new TextAlignment (pwin_));

	/** Warning label
	 */
	Gtk::HBox* warning_hbox = Gtk::manage (new Gtk::HBox (false, 0));
	Gtk::Label* warning_label = Gtk::manage (new Gtk::Label);
	warning_label->set_use_markup ();
	warning_label->set_markup (
			   "<span size=\"large\" weight=\"heavy\">NOTE:</span>\n"
			   "      Any changes in Appearance settings\n"
			   "      require immediate application restart.");
	warning_hbox->pack_start (*warning_label, Gtk::PACK_SHRINK, 4);

	/** Pack everything
	 */
	vbox->pack_start (*warning_hbox,      Gtk::PACK_SHRINK, 2);
	vbox->pack_start (*m_fonts_selector,  Gtk::PACK_SHRINK, 4);
	vbox->pack_start (*m_colors_selector, Gtk::PACK_SHRINK, 4);
	vbox->pack_start (*m_text_alignment,  Gtk::PACK_SHRINK, 4);

	scrollw->add (*vbox);
	pack_start (*scrollw);

	/** Set callbacks
	 */
	for (int t = 0; t < FONT_ENTRY_SZ; t++) 
	{
	    m_fonts_selector->
			font_entry (TextFontType (t)).m_entry->signal_changed().connect (
				mem_fun (m_pref_window, &PrefWindow::changed_cb));
	}

	for (int t = 0; t < COLOR_ENTRY_SZ; t++) 
	{
	    m_colors_selector->
			color_entry (TextColorType (t)).m_entry->signal_changed().connect (
				mem_fun (m_pref_window, &PrefWindow::changed_cb));
	}
	
	show_all ();
}

void
AppearancePrefs::
changed_cb ()
{ 
	m_pref_window.changed (); 
}

void
AppearancePrefs::
load_from_config ()
{
	trace_with_mask("AppearancePrefs::load_from_config",GUITRACE);

	CONFIG->fonts_db ().update_view (m_fonts_selector);
	CONFIG->text_colors_db ().update_view (m_colors_selector);

	m_text_alignment->load_appearance (CONFIG->app_db ());
}

void
AppearancePrefs::
save_to_config ()
{
	trace_with_mask("AppearancePrefs::save_to_config",GUITRACE);

	CONFIG->fonts_db ().fetch_from_view (m_fonts_selector);
	CONFIG->text_colors_db ().fetch_from_view (m_colors_selector);

	m_text_alignment->save_appearance (CONFIG->app_db ());
}