swatches.cpp revision e4ea18631426457c841561f28b359038a43a5cfb
/**
* @file
* Color swatches dialog.
*/
/* Authors:
* Jon A. Cruz
* John Bintz
* Abhishek Sharma
*
* Copyright (C) 2005 Jon A. Cruz
* Copyright (C) 2008 John Bintz
*
* Released under GNU GPL, read the file 'COPYING' for more information
*/
#include <errno.h>
#include <map>
#include <algorithm>
#include <set>
#include "swatches.h"
#include <gtkmm/radiomenuitem.h>
#include "color-item.h"
#include "desktop.h"
#include "desktop-handles.h"
#include "desktop-style.h"
#include "document.h"
#include "document-private.h"
#include "document-undo.h"
#include "inkscape.h"
#include "inkscape.h"
#include "io/resource.h"
#include "message-context.h"
#include "path-prefix.h"
#include "preferences.h"
#include "sp-item.h"
#include "sp-gradient-fns.h"
#include "sp-gradient.h"
#include "sp-gradient-vector.h"
#include "style.h"
#include "widgets/desktop-widget.h"
#include "widgets/gradient-vector.h"
#include "widgets/eek-preview.h"
#include "display/cairo-utils.h"
#include "sp-gradient-reference.h"
#include "dialog-manager.h"
#include "selection.h"
#include "verbs.h"
#include "gradient-chemistry.h"
#include "xml/node-observer.h"
#include "sp-pattern.h"
#include "icon-size.h"
#include "filedialog.h"
#include "sp-stop.h"
#include "svg/svg-color.h"
#include "sp-radial-gradient.h"
#include "color-rgba.h"
#include "ui/tools/tool-base.h"
#include "svg/css-ostringstream.h"
#include <queue>
#ifdef WIN32
#include <windows.h>
#endif
//lazy!
namespace Inkscape {
namespace UI {
namespace Dialogs {
#define SWATCHES_FILE_NAME "swatches.svg"
str++;
}
while ( *str ) {
str++;
}
str--;
*str-- = 0;
}
return ret;
}
static void skipWhitespace( char*& str ) {
str++;
}
}
val = 0;
str++;
}
return retval;
}
static char * SwatchFile;
static SPDocument * SwatchDocument;
static unsigned int page_suffix;
static void loadPalletFile()
{
if (!SwatchDocument) {
if (!SwatchDocument) {
}
}
}
static void addStop( Inkscape::XML::Node *parent, Glib::ustring const &color, gfloat opacity, gchar const *offset )
{
#ifdef SP_GR_VERBOSE
#endif
{
gchar *tmp = g_strdup_printf( "stop-color:%s;stop-opacity:%f;", color.c_str(), opacity < 0.0 ? 0.0 : (opacity > 1.0 ? 1.0 : opacity) );
}
}
{
/*Load the pallet file here*/
char block[1024];
if ( f ) {
if ( result ) {
bool inHeader = true;
bool hasErr = false;
do {
do {
if ( result ) {
if ( block[0] == '#' ) {
// ignore comment
} else {
// very simple check for header versus entry
ptr++;
}
// blank line. skip it.
// should be an entry link
inHeader = false;
if ( *ptr ) {
int r = 0;
int g = 0;
int b = 0;
if ( !hasErr ) {
}
if ( !hasErr ) {
}
if (n != NULL) {
}
}
if ( !hasErr ) {
// Add the entry now
}
} else {
hasErr = true;
}
} else {
if ( !inHeader ) {
// Hmmm... probably bad. Not quite the format we want?
hasErr = true;
} else {
if ( sep ) {
*sep = 0;
if ( *name ) {
{
}
} else {
// error
hasErr = true;
}
} else {
// error
hasErr = true;
}
}
}
}
}
if ( !hasErr ) {
if (SP_IS_GROUP(obj)) {
}
#endif // ENABLE_MAGIC_COLORS
} else {
delete page;
}
}
}
fclose(f);
}
/* end loading the pallet file*/
}
return ret;
}
{
return *new SwatchesPanel();
}
public:
{
_repr->addObserver(*this);
}
~StopWatcher() {
_repr->removeObserver(*this);
}
virtual void notifyChildAdded( Inkscape::XML::Node &/*node*/, Inkscape::XML::Node &/*child*/, Inkscape::XML::Node */*prev*/ ){}
virtual void notifyChildRemoved( Inkscape::XML::Node &/*node*/, Inkscape::XML::Node &/*child*/, Inkscape::XML::Node */*prev*/ ){}
virtual void notifyChildOrderChanged( Inkscape::XML::Node &/*node*/, Inkscape::XML::Node &/*child*/, Inkscape::XML::Node */*old_prev*/, Inkscape::XML::Node */*new_prev*/ ){}
virtual void notifyContentChanged( Inkscape::XML::Node &/*node*/, Util::ptr_shared<char> /*old_content*/, Util::ptr_shared<char> /*new_content*/ ) {}
virtual void notifyAttributeChanged( Inkscape::XML::Node &/*node*/, GQuark name, Util::ptr_shared<char> /*old_value*/, Util::ptr_shared<char> /*new_value*/ ) {
_pnl->_defsChanged( );
}
}
};
public:
{
_repr->addObserver(*this);
}
~GradientWatcher() {
_repr->removeObserver(*this);
}
virtual void notifyChildAdded( Inkscape::XML::Node &/*node*/, Inkscape::XML::Node &/*child*/, Inkscape::XML::Node */*prev*/ )
{
_pnl->_defsChanged( );
}
}
virtual void notifyChildRemoved( Inkscape::XML::Node &/*node*/, Inkscape::XML::Node &/*child*/, Inkscape::XML::Node */*prev*/ )
{
_pnl->_defsChanged( );
}
}
virtual void notifyChildOrderChanged( Inkscape::XML::Node &/*node*/, Inkscape::XML::Node &/*child*/, Inkscape::XML::Node */*old_prev*/, Inkscape::XML::Node */*new_prev*/ )
{
_pnl->_defsChanged( );
}
}
virtual void notifyContentChanged( Inkscape::XML::Node &/*node*/, Util::ptr_shared<char> /*old_content*/, Util::ptr_shared<char> /*new_content*/ ) {}
virtual void notifyAttributeChanged( Inkscape::XML::Node &/*node*/, GQuark name, Util::ptr_shared<char> /*old_value*/, Util::ptr_shared<char> /*new_value*/ ) {
_pnl->_defsChanged( );
}
}
};
public:
{
_repr->addObserver(*this);
}
~SwatchWatcher() {
_repr->removeObserver(*this);
}
virtual void notifyChildAdded( Inkscape::XML::Node &/*node*/, Inkscape::XML::Node &child, Inkscape::XML::Node */*prev*/ )
{
SPObject *childobj = _builtIn ? SwatchDocument->getObjectByRepr(&child) : (_pnl->_currentDocument ? _pnl->_currentDocument->getObjectByRepr(&child) : 0);
if (childobj && ((SP_IS_GRADIENT(childobj) && SP_GRADIENT(childobj)->hasStops()) || SP_IS_GROUP(childobj))) {
if (_builtIn) {
_pnl->_swatchesChanged( );
} else {
_pnl->_defsChanged( );
}
}
}
}
virtual void notifyChildRemoved( Inkscape::XML::Node &/*node*/, Inkscape::XML::Node &child, Inkscape::XML::Node */*prev*/ )
{
if (_builtIn) {
_pnl->_swatchesChanged( );
} else {
_pnl->_defsChanged( );
}
}
}
virtual void notifyChildOrderChanged( Inkscape::XML::Node &/*node*/, Inkscape::XML::Node &child, Inkscape::XML::Node */*old_prev*/, Inkscape::XML::Node */*new_prev*/ )
{
SPObject *childobj = _builtIn ? SwatchDocument->getObjectByRepr(&child) : (_pnl->_currentDocument ? _pnl->_currentDocument->getObjectByRepr(&child) : 0);
if (childobj && ((SP_IS_GRADIENT(childobj) && SP_GRADIENT(childobj)->hasStops()) || SP_IS_GROUP(childobj))) {
if (_builtIn) {
_pnl->_swatchesChanged( );
} else {
_pnl->_defsChanged( );
}
}
}
}
virtual void notifyContentChanged( Inkscape::XML::Node &/*node*/, Util::ptr_shared<char> /*old_content*/, Util::ptr_shared<char> /*new_content*/ ) {}
virtual void notifyAttributeChanged( Inkscape::XML::Node &/*node*/, GQuark name, Util::ptr_shared<char> /*old_value*/, Util::ptr_shared<char> /*new_value*/ ) {
if (_builtIn) {
_pnl->_swatchesChanged( );
} else {
_pnl->_defsChanged( );
}
}
}
bool _builtIn;
};
{
public:
{
}
virtual ~ModelColumns() {}
};
{
public:
{
}
virtual ~ModelColumnsDoc() {}
};
{
} else {
}
}
}
{
} else {
}
}
}
}
{
if (_currentDocument) {
if (recurse) {
} else {
}
}
}
}
{
//# Get the current directory for finding files
{
}
//# Test if the open_path directory exists
open_path = "";
#ifdef WIN32
//# If no open path, default to our win32 documents folder
{
// The path to the My Documents folder is read from the
// value "HKEY_CURRENT_USER\Software\Windows\CurrentVersion\Explorer\Shell Folders\Personal"
"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders",
{
{
if(utf8path)
{
}
}
}
}
#endif
//# If no open path, default to our home directory
{
open_path = g_get_home_dir();
}
//# Create a dialog
_("Select file to open"));
//# Show the dialog
//# Save the folder the user selected for later
if (!success)
{
delete openDialogInstance;
return;
}
//# User selected something. Get name and type
//# We no longer need the file dialog object - delete it
delete openDialogInstance;
{
if ( newFileName.size() > 0)
else
g_warning( "ERROR CONVERTING OPEN FILENAME TO UTF-8" );
if (addToBI) {
do {
}
if (SP_IS_GROUP(it)) {
if (page) {
}
if (addToDoc) {
}
}
}
if (page) {
}
} else {
if (addToBI) {
if (addToDoc) {
_addSwatchButtonClicked(g, false);
}
} else {
}
}
}
}
}
{
if (_currentDesktop && _currentDocument) {
if (it) {
if (SP_IS_GRADIENT(server)) {
olds->deleteObject();
}
}
if (!_noLink.get_active()) {
sp_item_set_gradient(it, sp_gradient_ensure_vector_normalized(swatch), SP_IS_RADIALGRADIENT(swatch) ? SP_GRADIENT_TYPE_RADIAL : SP_GRADIENT_TYPE_LINEAR, Inkscape::FOR_FILL);
}
}
}
olds->deleteObject();
}
addStop(swatch->getRepr(), it->style->fill.value.color.toString(), SP_SCALE24_TO_FLOAT(it->style->fill_opacity.value), "0");
if (!_noLink.get_active()) {
}
}
}
}
}
}
{
if (_currentDesktop && _currentDocument) {
if (it) {
if (SP_IS_GRADIENT(server)) {
olds->deleteObject();
}
}
if (!_noLink.get_active()) {
sp_item_set_gradient(it, sp_gradient_ensure_vector_normalized(swatch), SP_IS_RADIALGRADIENT(swatch) ? SP_GRADIENT_TYPE_RADIAL : SP_GRADIENT_TYPE_LINEAR, Inkscape::FOR_STROKE);
}
}
}
olds->deleteObject();
}
addStop(swatch->getRepr(), it->style->stroke.value.color.toString(), SP_SCALE24_TO_FLOAT(it->style->stroke_opacity.value), "0");
if (!_noLink.get_active()) {
}
}
}
}
}
}
{
if (_currentDocument && swatch) {
}
if (next) {
}
}
}
{
if (_currentDocument && swatch) {
g = next;
}
}
if (g) {
g = g->getPrev();
}
}
}
{
if (_currentDocument) {
if (swatch->isReferenced()) {
} else {
swatch->deleteObject(false);
}
}
}
{
if (_currentDocument) {
if (swatch) {
if (_noLink.get_active()) {
ColorRGBA rgba(swatch->getFirstStop()->getEffectiveColor().toRGBA32(swatch->getFirstStop()->opacity));
} else {
// for (GSList const * it = _currentDesktop->selection->itemList(); it != NULL; it = it->next) {
// sp_desktop_apply_css_recursive(SP_ITEM(it->data), css, true);
// sp_item_set_gradient(SP_ITEM(it->data), normalized, SP_IS_RADIALGRADIENT(normalized) ? SP_GRADIENT_TYPE_RADIAL : SP_GRADIENT_TYPE_LINEAR, isStroke ? Inkscape::FOR_STROKE : Inkscape::FOR_FILL);
// }
}
} else {
// for (GSList const * it = _currentDesktop->selection->itemList(); it != NULL; it = it->next) {
// sp_desktop_apply_css_recursive(SP_ITEM(it->data), css, true);
// sp_item_set_gradient(SP_ITEM(it->data), normalized, SP_IS_RADIALGRADIENT(normalized) ? SP_GRADIENT_TYPE_RADIAL : SP_GRADIENT_TYPE_LINEAR, isStroke ? Inkscape::FOR_STROKE : Inkscape::FOR_FILL);
// }
}
} else {
}
if (isStroke) {
} else {
}
}
}
{
if (_currentDesktop) {
Glib::ustring us = Glib::ustring::compose("<b>%1</b>", swatch ? (swatch->label() ? swatch->label() : swatch->getId()) : _("[None]"));
mi = Gtk::manage(new Gtk::MenuItem(swatch ? (swatch->label() ? swatch->label() : swatch->getId()) : _("[None]")));
if (namelbl) {
}
mi->set_sensitive(false);
mi->signal_activate().connect_notify(sigc::bind<SPGradient*, bool>(sigc::mem_fun(*this, &SwatchesPanel::_setSelectionSwatch), swatch, false));
mi->signal_activate().connect_notify(sigc::bind<SPGradient*, bool>(sigc::mem_fun(*this, &SwatchesPanel::_setSelectionSwatch), swatch, true));
if (swatch) {
mi->signal_activate().connect_notify(sigc::bind<SPGradient*>(sigc::mem_fun(*this, &SwatchesPanel::SetSelectedFill), swatch));
mi->signal_activate().connect_notify(sigc::bind<SPGradient*>(sigc::mem_fun(*this, &SwatchesPanel::SetSelectedStroke), swatch));
mi->signal_activate().connect_notify(sigc::bind<SPGradient*>(sigc::mem_fun(*this, &SwatchesPanel::MoveSwatchUp), swatch));
mi->signal_activate().connect_notify(sigc::bind<SPGradient*>(sigc::mem_fun(*this, &SwatchesPanel::MoveSwatchDown), swatch));
mi->signal_activate().connect_notify(sigc::bind<SPGradient*>(sigc::mem_fun(*this, &SwatchesPanel::RemoveSwatch), swatch));
}
}
}
}
{
if (_currentDocument && page) {
}
if (next) {
}
}
}
{
if (_currentDocument && page) {
if (SP_IS_GROUP(next)) {
g = next;
}
}
if (g) {
g = g->getPrev();
}
}
}
{
if (_currentDocument && page) {
if (SP_IS_GRADIENT(obj)) {
if (grad->isReferenced()) {
}
}
}
}
page->deleteObject(false);
}
}
{
if (_currentDesktop && _currentDocument) {
if (it) {
if (SP_IS_GRADIENT(server)) {
if (_noLink.get_active()) {
if (page) {
} else {
}
if (page) {
} else {
}
sp_item_set_gradient(it, sp_gradient_ensure_vector_normalized(newgrad), SP_IS_RADIALGRADIENT(newgrad) ? SP_GRADIENT_TYPE_RADIAL : SP_GRADIENT_TYPE_LINEAR, Inkscape::FOR_FILL);
} else {
}
}
}
addStop(grad, it->style->fill.value.color.toString(), SP_SCALE24_TO_FLOAT(it->style->fill_opacity.value), "0");
if (page) {
} else {
}
SPGradient* normalized = sp_gradient_ensure_vector_normalized(SP_GRADIENT(_currentDocument->getObjectByRepr(grad)));
if (!_noLink.get_active()) {
}
}
}
}
}
}
{
if (_currentDesktop && _currentDocument) {
if (it) {
if (SP_IS_GRADIENT(server)) {
if (_noLink.get_active()) {
if (page) {
} else {
}
if (page) {
} else {
}
sp_item_set_gradient(it, sp_gradient_ensure_vector_normalized(newgrad), SP_IS_RADIALGRADIENT(newgrad) ? SP_GRADIENT_TYPE_RADIAL : SP_GRADIENT_TYPE_LINEAR, Inkscape::FOR_STROKE);
} else {
}
}
}
addStop(grad, it->style->stroke.value.color.toString(), SP_SCALE24_TO_FLOAT(it->style->stroke_opacity.value), "0");
if (page) {
} else {
}
SPGradient* normalized = sp_gradient_ensure_vector_normalized(SP_GRADIENT(_currentDocument->getObjectByRepr(grad)));
if (!_noLink.get_active()) {
}
}
}
}
}
}
{
if (popUpImportMenu) {
}
}
void SwatchesPanel::NewGroupBI()
{
if (_currentDocument) {
do {
}
}
void SwatchesPanel::NewGroup()
{
if (_currentDocument) {
do {
}
}
void SwatchesPanel::SaveAs()
{
if (_currentDocument) {
do {
if (SP_IS_GRADIENT(it)) {
}
}
}
}
}
}
{
if (_currentDocument) {
do {
if (SP_IS_GRADIENT(it)) {
}
}
}
}
}
{
Glib::ustring us = Glib::ustring::compose("<b>%1</b>", page ? (page->label() ? page->label() : page->getId()) : _("[Base]"));
mi = Gtk::manage(new Gtk::MenuItem(page ? (page->label() ? page->label() : page->getId()) : _("[Base]")));
if (namelbl) {
}
mi->set_sensitive(false);
mi->signal_activate().connect_notify(sigc::bind<SPGroup*>(sigc::mem_fun(*this, &SwatchesPanel::AddSelectedFill), page));
mi->signal_activate().connect_notify(sigc::bind<SPGroup*>(sigc::mem_fun(*this, &SwatchesPanel::AddSelectedStroke), page));
if (page) {
mi->signal_activate().connect_notify(sigc::bind<SPGroup*>(sigc::mem_fun(*this, &SwatchesPanel::MoveUp), page));
mi->signal_activate().connect_notify(sigc::bind<SPGroup*>(sigc::mem_fun(*this, &SwatchesPanel::MoveDown), page));
mi->signal_activate().connect_notify(sigc::bind<SPGroup*>(sigc::mem_fun(*this, &SwatchesPanel::Duplicate), page));
mi->signal_activate().connect_notify(sigc::bind<SPGroup*>(sigc::mem_fun(*this, &SwatchesPanel::Remove), page));
} else {
}
}
void SwatchesPanel::_defsChanged()
{
if (_storeDoc) {
}
while (!docWatchers.empty()) {
delete w;
}
for (std::vector<Gtk::Widget *>::iterator c = tableChildren.begin(); c != tableChildren.end(); ++c) {
_insideTable.remove(**c);
}
if (_currentDocument) {
if (_showlabels) {
eb->signal_button_press_event().connect_notify(sigc::bind<SPGroup*>(sigc::mem_fun(*this, &SwatchesPanel::_lblClick), NULL));
}
item->signal_button_press_event().connect_notify(sigc::bind<SPGradient *>(sigc::mem_fun(*this, &SwatchesPanel::_swatchClicked), NULL));
_insideTable.attach( *item, _showlabels ? 1 : 0, _showlabels ? 2 : 1, 0, 1, Gtk::FILL/*|Gtk::EXPAND*/, Gtk::FILL/*|Gtk::EXPAND*/ );
unsigned int i = 1;
if (SP_IS_GRADIENT(it)) {
docWatchers.push_back(w);
}
if (_storeDoc) {
}
item->signal_button_press_event().connect_notify(sigc::bind<SPGradient *>(sigc::mem_fun(*this, &SwatchesPanel::_swatchClicked), grad));
if (_showlabels) {
_insideTable.attach( *item, 1 + (i % 20), 2 + (i % 20), i / 20, i / 20 + 1, Gtk::FILL/*|Gtk::EXPAND*/, Gtk::FILL/*|Gtk::EXPAND*/ );
} else {
}
i++;
}
}
}
}
if (SP_IS_GROUP(it)) {
docWatchers.push_back(w);
if (_showlabels) {
i += 20 - (i % 20);
eb->signal_button_press_event().connect_notify(sigc::bind<SPGroup*>(sigc::mem_fun(*this, &SwatchesPanel::_lblClick), SP_GROUP(it)));
_insideTable.attach( *eb, 0, 1, i / 20, i / 20 + 1, Gtk::FILL/*|Gtk::EXPAND*/, Gtk::FILL/*|Gtk::EXPAND*/ , 5, 0);
}
if (_storeDoc) {
}
if (SP_IS_GRADIENT(cit)) {
docWatchers.push_back(w);
}
}
item = Gtk::manage(new ColorItem(grad, cit->label() ? cit->label() : cit->getId(), _currentDesktop));
item->signal_button_press_event().connect_notify(sigc::bind<SPGradient *>(sigc::mem_fun(*this, &SwatchesPanel::_swatchClicked), grad));
if (_showlabels) {
_insideTable.attach( *item, 1 + (i % 20), 2 + (i % 20), i / 20, i / 20 + 1, Gtk::FILL/*|Gtk::EXPAND*/, Gtk::FILL/*|Gtk::EXPAND*/ );
} else {
}
i++;
}
}
}
}
}
}
}
}
{
if (_store) {
Gtk::TreeModel::iterator iter = parentRow ? _store->append(parentRow->children()) : _store->append();
}
r = &row;
} else {
r = NULL;
}
bool hasswatches = false;
{
if (SP_IS_GROUP(obj)) {
if (!m) {
m->show_all();
mi->set_submenu(*m);
if (namelbl) {
}
basemi->signal_activate().connect(sigc::bind<SPGroup*, bool>(sigc::mem_fun(*this, &SwatchesPanel::_addSwatchButtonClicked), group, true));
}
} else if (SP_IS_GRADIENT(obj)) {
hasswatches = true;
}
}
if (!m) {
mi->signal_activate().connect(sigc::bind<SPGroup*, bool>(sigc::mem_fun(*this, &SwatchesPanel::_addSwatchButtonClicked), group, false));
} else if (hasswatches) {
Glib::ustring us = Glib::ustring::compose("<b>%1</b>", group->label() ? group->label() : group->getId());
Gtk::MenuItem* basemi = manage(new Gtk::MenuItem(group->label() ? group->label() : group->getId()));
if (namelbl) {
}
basemi->signal_activate().connect(sigc::bind<SPGroup*, bool>(sigc::mem_fun(*this, &SwatchesPanel::_addSwatchButtonClicked), group, false));
}
return mi;
}
void SwatchesPanel::_swatchesChanged()
{
while (!rootWatchers.empty()) {
delete w;
}
}
if (_store) {
}
{
if (SP_IS_GROUP(obj)) {
}
}
mi->signal_activate().connect(sigc::bind<bool, bool>(sigc::mem_fun(*this, &SwatchesPanel::_importButtonClicked), true, false));
mi->signal_activate().connect(sigc::bind<bool, bool>(sigc::mem_fun(*this, &SwatchesPanel::_importButtonClicked), true, true));
}
void SwatchesPanel::_styleButton( Gtk::Button& btn, SPDesktop *desktop, unsigned int code, char const* iconName, char const* fallback )
{
bool set = false;
if ( iconName ) {
gtk_widget_show( child );
set = true;
}
if ( desktop ) {
if ( verb ) {
gtk_widget_show( child );
set = true;
}
}
}
if ( !set ) {
}
}
if (popUpMenu) {
}
}
}
void SwatchesPanel::NoLinkToggled() {
}
{
static unsigned doubleclick = 0;
doubleclick = 1;
}
doubleclick = 0;
int x2 = 0;
int y2 = 0;
// Double click on the Layer name, enable editing
_text_rendererBI->property_editable() = true;
grab_focus();
}
}
return false;
}
{
case GDK_KEY_Return:
case GDK_KEY_KP_Enter:
case GDK_KEY_F2: {
if (obj) {
// Edit the layer label
_text_rendererBI->property_editable() = true;
grab_focus();
return true;
}
}
}
case GDK_KEY_Delete: {
if (iter) {
if (obj) {
obj->deleteObject(false);
}
}
return true;
}
break;
}
return false;
}
{
_text_rendererBI->property_editable() = false;
}
void SwatchesPanel::_handleEditingCancelled()
{
_text_rendererBI->property_editable() = false;
}
{
if ( row && SwatchDocument) {
if ( obj ) {
}
}
}
}
{
group->setExpanded(false);
{
}
}
void SwatchesPanel::_setExpanded(const Gtk::TreeModel::iterator& iter, const Gtk::TreeModel::Path& /*path*/, bool isexpanded)
{
{
if (isexpanded)
{
}
else
{
}
}
}
void SwatchesPanel::_deleteButtonClicked()
{
if (iter) {
if (obj) {
obj->deleteObject(false);
}
}
}
{
static unsigned doubleclick = 0;
// TODO - fix to a better is-popup function
if (SP_IS_GRADIENT(obj)) {
} else if (SP_IS_GROUP(obj)) {
} else {
}
} else {
}
}
doubleclick = 1;
}
doubleclick = 0;
int x2 = 0;
int y2 = 0;
// Double click on the Layer name, enable editing
_text_rendererDoc->property_editable() = true;
grab_focus();
}
}
return false;
}
void SwatchesPanel::_deleteButtonClickedDoc()
{
if (iter) {
if (SP_IS_GRADIENT(obj)) {
} else if (SP_IS_GROUP(obj)) {
}
}
}
{
case GDK_KEY_Return:
case GDK_KEY_KP_Enter:
case GDK_KEY_F2: {
if (obj) {
// Edit the layer label
_text_rendererDoc->property_editable() = true;
grab_focus();
return true;
}
}
}
case GDK_KEY_Delete: {
return true;
}
break;
}
return false;
}
{
if ( row && SwatchDocument) {
if ( obj ) {
}
}
}
}
{
_text_rendererDoc->property_editable() = false;
}
{
_text_rendererDoc->property_editable() = false;
}
/*
* Drap and drop within the tree
* Save the drag source and drop target SPObjects and if its a drag between layers or into (sublayer) a layer
*/
bool SwatchesPanel::_handleDragDrop(const Glib::RefPtr<Gdk::DragContext>& context, int x, int y, guint time)
{
bool _dnd_top = false;
_dnd_into = false;
if (!itersel) {
return true;
}
if (!_dnd_source) {
return true;
}
// Are we before, inside or after the drop layer
} else {
// Dragging to the "end"
// Drop into parent
_dnd_into = true;
} else {
_dnd_top = true;
// Drop into the top level
_dnd_target = NULL;
}
}
}
if (!_dnd_top) {
if (obj) {
_dnd_target = obj;
}
}
}
}
if (_dnd_source != _dnd_target) {
if (target_ref != our_ref) {
if (!target_ref) {
} else {
}
} else if (_dnd_into) {
// Move this inside of the target at the end
// Change in parent, need to remove and add
} else {
// Same parent, just move
}
}
}
return true;
}
/*
* Drap and drop within the tree
* Save the drag source and drop target SPObjects and if its a drag between layers or into (sublayer) a layer
*/
bool SwatchesPanel::_handleDragDropDoc(const Glib::RefPtr<Gdk::DragContext>& context, int x, int y, guint time)
{
bool _dnd_top = false;
_dnd_into = false;
if (!itersel) {
return true;
}
if (!_dnd_source) {
return true;
}
// Are we before, inside or after the drop layer
} else {
// Dragging to the "end"
// Drop into parent
_dnd_into = true;
} else {
_dnd_top = true;
// Drop into the top level
_dnd_target = NULL;
}
}
}
if (!_dnd_top) {
if (obj) {
_dnd_target = obj;
if (SP_IS_GRADIENT(obj)) {
_dnd_into = false;
if (SP_IS_GROUP(_dnd_source)) {
}
} else if (SP_IS_GROUP(_dnd_source)) {
_dnd_into = false;
}
}
}
}
}
if (_dnd_source != _dnd_target) {
if (target_ref != our_ref) {
if (!target_ref) {
} else {
}
} else if (_dnd_into) {
// Move this inside of the target at the end
// Change in parent, need to remove and add
} else {
// Same parent, just move
}
}
_("Moved Swatches"));
}
return true;
}
/**
* Constructor
*/
_scroller(),
_insideV(),
_insideH(),
_buttonsRow(),
_outsideV(),
_noLink(_("Don't Link")),
_store(0),
_scrollerBI(),
_editBI(),
_editBIV(),
_storeDoc(0),
_scrollerDoc(),
_editDoc(),
_editDocV(),
_notebook(),
rootWatcher(0),
docWatcher(0),
_currentDesktop(0),
{
if (_showlabels) {
} else {
}
btn->signal_button_press_event().connect_notify( sigc::mem_fun(*this, &SwatchesPanel::_addButtonClicked) );
// btn = manage( new Gtk::Button() );
// _styleButton( *btn, SP_ACTIVE_DESKTOP, SP_VERB_LAYER_NEW, GTK_STOCK_DISCONNECT, C_("Unlink", "New") );
// _buttonsRow.pack_end(*btn, Gtk::PACK_SHRINK);
if (_showlabels) {
{
_editDoc.set_headers_visible(false);
_editDoc.set_reorderable(true);
btn->signal_button_press_event().connect_notify( sigc::mem_fun(*this, &SwatchesPanel::_addButtonClicked));
_styleButton( *btn, SP_ACTIVE_DESKTOP, SP_VERB_LAYER_DELETE, GTK_STOCK_DELETE, _("Delete Swatch") );
btn->signal_button_press_event().connect_notify( sigc::hide(sigc::mem_fun(*this, &SwatchesPanel::_deleteButtonClickedDoc)));
_text_rendererDoc->signal_edited().connect( sigc::mem_fun(*this, &SwatchesPanel::_handleEditedDoc) );
_text_rendererDoc->signal_editing_canceled().connect( sigc::mem_fun(*this, &SwatchesPanel::_handleEditingCancelledDoc) );
_editDoc.signal_button_press_event().connect( sigc::mem_fun(*this, &SwatchesPanel::_handleButtonEventDoc), false );
_editDoc.signal_button_release_event().connect( sigc::mem_fun(*this, &SwatchesPanel::_handleButtonEventDoc), false );
_editDoc.signal_key_press_event().connect( sigc::mem_fun(*this, &SwatchesPanel::_handleKeyEventDoc), false );
_editDoc.signal_drag_drop().connect( sigc::mem_fun(*this, &SwatchesPanel::_handleDragDropDoc), false);
}
{
mi->signal_activate().connect_notify(sigc::bind<bool, bool>(sigc::mem_fun(*this, &SwatchesPanel::_importButtonClicked), false, true));
_editBI.set_headers_visible(false);
_editBI.set_reorderable(true);
btn->signal_button_press_event().connect_notify(sigc::mem_fun(*this, &SwatchesPanel::_addBIButtonClicked));
_styleButton( *btn, SP_ACTIVE_DESKTOP, SP_VERB_LAYER_DELETE, GTK_STOCK_DELETE, _("Delete Swatch") );
btn->signal_button_press_event().connect_notify( sigc::hide(sigc::mem_fun(*this, &SwatchesPanel::_deleteButtonClicked)));
_text_rendererBI->signal_editing_canceled().connect( sigc::mem_fun(*this, &SwatchesPanel::_handleEditingCancelled) );
_editBI.signal_button_press_event().connect( sigc::mem_fun(*this, &SwatchesPanel::_handleButtonEvent), false );
_editBI.signal_button_release_event().connect( sigc::mem_fun(*this, &SwatchesPanel::_handleButtonEvent), false );
_editBI.signal_key_press_event().connect( sigc::mem_fun(*this, &SwatchesPanel::_handleKeyEvent), false );
_editBI.signal_row_collapsed().connect( sigc::bind<bool>(sigc::mem_fun(*this, &SwatchesPanel::_setExpanded), false));
_editBI.signal_row_expanded().connect( sigc::bind<bool>(sigc::mem_fun(*this, &SwatchesPanel::_setExpanded), true));
}
} else {
//_outsideV.pack_end(_scroller, Gtk::PACK_SHRINK);
//_getContents()->pack_end(_outsideV, Gtk::PACK_SHRINK);
}
}
{
if (rootWatcher) {
delete rootWatcher;
}
if (docWatcher) {
delete docWatcher;
}
}
{
if ( desktop != _currentDesktop ) {
if ( _currentDesktop ) {
}
if ( desktop ) {
//_currentDesktop->selection->connectChanged(sigc::hide(sigc::mem_fun(*this, &SwatchesPanel::_updateFromSelection)));
_documentConnection = desktop->connectDocumentReplaced(sigc::mem_fun(*this, &SwatchesPanel::_setDocument));
} else {
_setDocument(0, 0);
}
}
}
{
if ( document != _currentDocument ) {
if (docWatcher) {
delete docWatcher;
docWatcher = NULL;
}
if (_currentDocument) {
}
_defsChanged();
}
}
} //namespace Dialogs
} //namespace UI
} //namespace Inkscape
//really lazy!
{
bool intercepted = false;
ColorRGBA color(gradient->getFirstStop()->getEffectiveColor().toRGBA32(gradient->getFirstStop()->opacity));
gchar b[64];
sp_svg_write_color(b, sizeof(b), rgba);
if (fill) {
} else {
}
}
if (!intercepted) {
sp_item_set_gradient(SP_ITEM(it->data), gradient, SP_IS_RADIALGRADIENT(gradient) ? SP_GRADIENT_TYPE_RADIAL : SP_GRADIENT_TYPE_LINEAR, !fill ? Inkscape::FOR_STROKE : Inkscape::FOR_FILL);
}
}
}
/*
Local Variables:
mode:c++
c-file-style:"stroustrup"
c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
indent-tabs-mode:nil
fill-column:99
End:
*/
// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :