X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fdockmanager.cpp;fp=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fdockmanager.cpp;h=0000000000000000000000000000000000000000;hb=a095981e18cc37a8ecc7cd237cc22b9c10329264;hp=8a5198ca22c6f684b2e8e553ff05cc35062163d0;hpb=9459638ad6797b8139f1e9f0715c96076dbf0890;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/dockmanager.cpp b/synfig-studio/trunk/src/gtkmm/dockmanager.cpp deleted file mode 100644 index 8a5198c..0000000 --- a/synfig-studio/trunk/src/gtkmm/dockmanager.cpp +++ /dev/null @@ -1,328 +0,0 @@ -/* === S Y N F I G ========================================================= */ -/*! \file dockmanager.cpp -** \brief Template File -** -** $Id$ -** -** \legal -** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley -** Copyright (c) 2007, 2008 Chris Moore -** -** This package 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. -** -** This package 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. -** \endlegal -*/ -/* ========================================================================= */ - -/* === H E A D E R S ======================================================= */ - -#ifdef USING_PCH -# include "pch.h" -#else -#ifdef HAVE_CONFIG_H -# include -#endif - -#include "dockmanager.h" -#include -#include "dockable.h" -#include "dockdialog.h" -#include -#include -#include - -#include "general.h" - -#endif - -/* === U S I N G =========================================================== */ - -using namespace std; -using namespace etl; -using namespace synfig; -using namespace studio; - -/* === M A C R O S ========================================================= */ - -/* === P R O C E D U R E S ================================================= */ - -class studio::DockSettings : public synfigapp::Settings -{ - DockManager* dock_manager; - -public: - DockSettings(DockManager* dock_manager):dock_manager(dock_manager) - { - synfigapp::Main::settings().add_domain(this,"dock"); - } - - virtual ~DockSettings() - { - synfigapp::Main::settings().remove_domain("dock"); - } -#define SCALE_FACTOR (1280) - virtual bool get_value(const synfig::String& key_, synfig::String& value)const - { - int screen_w(Gdk::screen_width()); - int screen_h(Gdk::screen_height()); - - if(key_.size()>6 && String(key_.begin(),key_.begin()+6)=="dialog")try - { - synfig::String key(key_.begin()+7,key_.end()); - synfig::String::size_type separator=key.find_first_of('.'); - int id(atoi(synfig::String(key.begin(),key.begin()+separator).c_str())); - key=synfig::String(key.begin()+separator+1,key.end()); - - DockDialog& dock_dialog(dock_manager->find_dock_dialog(id)); - - if(key=="contents_size") - { - dock_dialog.rebuild_sizes(); - vector::const_iterator iter(dock_dialog.get_dock_book_sizes().begin()); - vector::const_iterator end(dock_dialog.get_dock_book_sizes().end()); - value.clear(); - for(;iter!=end;++iter) - value+=strprintf("%d ",(*iter)*SCALE_FACTOR/screen_h); - return true; - } - if(key=="pos") - { - int x,y; dock_dialog.get_position(x,y); - value=strprintf("%d %d",x*SCALE_FACTOR/screen_w,y*SCALE_FACTOR/screen_h); - return true; - } - if(key=="size") - { - int x,y; dock_dialog.get_size(x,y); - value=strprintf("%d %d",x*SCALE_FACTOR/screen_w,y*SCALE_FACTOR/screen_h); - return true; - } - if(key=="contents") - { - value=dock_dialog.get_contents(); - return true; - } - if(key=="comp_selector") - { - value=dock_dialog.get_composition_selector()?"1":"0"; - return true; - } - }catch (...) { return false; } - return synfigapp::Settings::get_value(key_,value); - } - - virtual bool set_value(const synfig::String& key_,const synfig::String& value) - { - int screen_w(Gdk::screen_width()); - int screen_h(Gdk::screen_height()); - - if(key_.size()>6 && String(key_.begin(),key_.begin()+6)=="dialog") - { - synfig::String key(key_.begin()+7,key_.end()); - synfig::String::size_type separator=key.find_first_of('.'); - int id(atoi(synfig::String(key.begin(),key.begin()+separator).c_str())); - key=synfig::String(key.begin()+separator+1,key.end()); - - DockDialog& dock_dialog(dock_manager->find_dock_dialog(id)); - - if(key=="contents_size") - { - try { - int width, height; - Gtk::IconSize::lookup(Gtk::IconSize(4),width,height); - vector data; - String::size_type n=0; - String value_(value); - while(value_.size() && value_.size()>n){ - value_=String(value_.begin()+n,value_.end()); - int size; - if(!strscanf(value_,"%d",&size)) - break; - if (size > SCALE_FACTOR) size = SCALE_FACTOR - 150; - if (size < 0) size = 0; - size=size*screen_h/SCALE_FACTOR; - - // prevent errors like this, by allowing space for at least the dockable's icon: - // ** CRITICAL **: clearlooks_style_draw_box_gap: assertion `height >= -1' failed - if (size < height + 9) size = height + 9; - - data.push_back(size); - - n=value_.find(" "); - if(n==String::npos) - break; - n++; - } - dock_dialog.set_dock_book_sizes(data); - } - catch(...) - { - synfig::error("Exception caught!!!"); - return false; - } - return true; - } - if(key=="pos") - { - int x,y; - if(!strscanf(value,"%d %d",&x, &y)) - return false; - if (x > SCALE_FACTOR) x = SCALE_FACTOR - 150; if (x < 0) x = 0; - if (y > SCALE_FACTOR) y = SCALE_FACTOR - 150; if (y < 0) y = 0; - x=x*screen_w/SCALE_FACTOR; - y=y*screen_h/SCALE_FACTOR; - if(getenv("SYNFIG_WINDOW_POSITION_X_OFFSET")) - x += atoi(getenv("SYNFIG_WINDOW_POSITION_X_OFFSET")); - if(getenv("SYNFIG_WINDOW_POSITION_Y_OFFSET")) - y += atoi(getenv("SYNFIG_WINDOW_POSITION_Y_OFFSET")); - dock_dialog.move(x,y); - return true; - } - if(key=="size") - { - int x,y; - if(!strscanf(value,"%d %d",&x, &y)) - return false; - if (x > SCALE_FACTOR) x = 150; if (x < 0) x = 0; - if (y > SCALE_FACTOR) y = 150; if (y < 0) y = 0; - x=x*screen_w/SCALE_FACTOR; - y=y*screen_h/SCALE_FACTOR; - dock_dialog.set_default_size(x,y); - dock_dialog.resize(x,y); - return true; - } - if(key=="contents") - { - dock_dialog.set_contents(value); - return true; - } - if(key=="comp_selector") - { - if(value.empty() || value[0]=='0') - dock_dialog.set_composition_selector(false); - else - dock_dialog.set_composition_selector(true); - return true; - } - } - return synfigapp::Settings::set_value(key_,value); - } - - virtual KeyList get_key_list()const - { - synfigapp::Settings::KeyList ret(synfigapp::Settings::get_key_list()); - - std::list::const_iterator iter; - for(iter=dock_manager->dock_dialog_list_.begin();iter!=dock_manager->dock_dialog_list_.end();++iter) - { - ret.push_back(strprintf("dialog.%d.contents",(*iter)->get_id())); - ret.push_back(strprintf("dialog.%d.comp_selector",(*iter)->get_id())); - ret.push_back(strprintf("dialog.%d.pos",(*iter)->get_id())); - ret.push_back(strprintf("dialog.%d.size",(*iter)->get_id())); - ret.push_back(strprintf("dialog.%d.contents_size",(*iter)->get_id())); - } - return ret; - } -}; - -/* === M E T H O D S ======================================================= */ - -DockManager::DockManager(): - dock_settings(new DockSettings(this)) -{ -} - -DockManager::~DockManager() -{ - while(!dock_dialog_list_.empty()) - { - dock_dialog_list_.back()->close(); - } - while(!dockable_list_.empty()) - { - Dockable* dockable(dockable_list_.back()); - // synfig::info("DockManager::~DockManager(): Deleting dockable \"%s\"",dockable->get_name().c_str()); - dockable_list_.pop_back(); - delete dockable; - } -} - -void -DockManager::register_dockable(Dockable& x) -{ - dockable_list_.push_back(&x); - // synfig::info("DockManager::register_dockable(): Registered dockable \"%s\"",dockable_list_.back()->get_name().c_str()); - signal_dockable_registered()(&x); -} - -bool -DockManager::unregister_dockable(Dockable& x) -{ - std::list::iterator iter; - for(iter=dockable_list_.begin();iter!=dockable_list_.end();++iter) - { - if(&x==*iter) - { - x.detach(); - dockable_list_.erase(iter); - synfig::info("DockManager::unregister_dockable(): \"%s\" has been Unregistered",x.get_name().c_str()); - return true; - } - } - return false; -} - -Dockable& -DockManager::find_dockable(const synfig::String& x) -{ - std::list::iterator iter; - for(iter=dockable_list_.begin();iter!=dockable_list_.end();++iter) - if((*iter)->get_name()==x) - return **iter; - - throw std::runtime_error("DockManager::find_dockable(): not found"); -} - -void -DockManager::present(synfig::String x) -{ - try - { - find_dockable(x).present(); - } - catch(...) - { - } -} - -DockDialog& -DockManager::find_dock_dialog(int id) -{ - std::list::iterator iter; - for(iter=dock_dialog_list_.begin();iter!=dock_dialog_list_.end();++iter) - if((*iter)->get_id()==id) - return **iter; - - DockDialog* dock_dialog(new DockDialog()); - dock_dialog->set_id(id); - dock_dialog->show(); - return *dock_dialog; -} - -const DockDialog& -DockManager::find_dock_dialog(int id)const -{ - std::list::const_iterator iter; - for(iter=dock_dialog_list_.begin();iter!=dock_dialog_list_.end();++iter) - if((*iter)->get_id()==id) - return **iter; - - throw std::runtime_error("DockManager::find_dock_dialog(int id)const: not found"); -}