I have a problem to connect a signal to an object who I derived from SigC::Object: it looks like insensible to any kind of event, and i don't understand why! This object contain in it a lot of canvas primitives who draw a diagram. I group all primitivies to move all ones by group. It doesn't work! Why? Wish you give me a way to "light" my object? I use libgnomecanvas 2.0.1, libsigc 1.2.5 e GCC 3.3.3 on Fedora Core 2. Many thanks... ...sorry for my English... I try to improve it!!! -- Rocker alias "Davide Anastasia" "Everything you know is wrong" Linux User #341094 P.S. I send you my source... You can find probably my problem in ModelClassObject costructor.
//
// File: ModelClassObject.cc
// Created by: Davide "Rocker" Anastasia <s242248 studenti ing unipi it>
// Created on: Thu Jul 29 00:39:16 2004
//
#define SIDE_BORDER 15
#define UP_DOWN_BORDER 6
#define SIZE_FONT 16
#define LIFE_LINE 40
#define LIFE_TIME 200
#define LIFE_TIME_BORDER 6
#define TEXT_TO_LINE 1
#define ANCHOR_DIM 3
#include "ModelClassObject.h"
#include "CanvasMgr.h"
#include "DragBox.h"
#include "macro.cc"
#include "AnchorBox.h"
#include <iostream>
// CanvasMgr is derived from Gnome::Canvas::Canvas
ModelClassObject::ModelClassObject(CanvasMgr* mgr, int id) :
ModelObjBase(mgr, id)
{
// This group contain all element who make a model element
my_self_group_ = manage( new Gnome::Canvas::Group( *mgr->root() ) );
// This signal don't work... why???
my_self_group_->signal_event().connect(slot(*this, &ModelClassObject::onOver));
// Text label
label_ = manage( new Gnome::Canvas::Text(*my_self_group_) );
label_->property_text() = ":Untitled";
label_->property_x() = SIDE_BORDER + label_->property_text_width()/2;
label_->property_y() = UP_DOWN_BORDER + label_->property_text_height()/2;
label_->property_font() = "Sans SIZE_FONT";
label_->property_fill_color() = "black";
underline_points_ = new Gnome::Canvas::Points();
underline_points_->push_back(Gnome::Art::Point(SIDE_BORDER, UP_DOWN_BORDER+label_->property_text_height()+TEXT_TO_LINE));
underline_points_->push_back(Gnome::Art::Point(SIDE_BORDER+label_->property_text_width(), UP_DOWN_BORDER+label_->property_text_height()+TEXT_TO_LINE));
underline_line_ = manage( new Gnome::Canvas::Line(*my_self_group_, *underline_points_) );
setIsObject(true);
// vars
double right_box_pos = SIDE_BORDER*2 + label_->property_text_width();
double bottom_box_pos = UP_DOWN_BORDER*2 + label_->property_text_height();
// name class box
box_ = manage( new Gnome::Canvas::Rect(*my_self_group_,
0, 0,
right_box_pos, bottom_box_pos) );
box_->property_outline_color() = "black";
// time line
upper_points_ = new Gnome::Canvas::Points();
upper_points_->push_back(Gnome::Art::Point(right_box_pos/2,bottom_box_pos));
upper_points_->push_back(Gnome::Art::Point(right_box_pos/2,bottom_box_pos + LIFE_LINE));
upper_line_ = manage( new Gnome::Canvas::Line(*my_self_group_, *upper_points_) );
upper_line_->property_line_style() = Gdk::LINE_ON_OFF_DASH; // Linea tratteggiata!
upper_line_->property_fill_color() = "black";
upper_line_->property_width_pixels() = 1;
// life box
lifetime_box_ = manage ( new Gnome::Canvas::Rect(*my_self_group_,
right_box_pos/2 - LIFE_TIME_BORDER, bottom_box_pos + LIFE_LINE,
right_box_pos/2 + LIFE_TIME_BORDER, bottom_box_pos + LIFE_LINE + LIFE_TIME) );
lifetime_box_->property_outline_color() = "black";
// time line
lower_points_ = new Gnome::Canvas::Points();
lower_points_->push_back(Gnome::Art::Point(right_box_pos/2,bottom_box_pos + LIFE_LINE + LIFE_TIME));
lower_points_->push_back(Gnome::Art::Point(right_box_pos/2,bottom_box_pos + LIFE_LINE*2 + LIFE_TIME));
lower_line_ = manage( new Gnome::Canvas::Line(*my_self_group_, *lower_points_) );
lower_line_->property_line_style() = Gdk::LINE_ON_OFF_DASH; // Linea tratteggiata!
lower_line_->property_fill_color() = "black";
// DragBox... to change form of diagram
// db_box_ = manage( new DragBox(*my_self_group_) );
// db_box_->move_drag_box(right_box_pos, bottom_box_pos);
db_lifeline_up_ = manage( new DragBox(*my_self_group_) );
db_lifeline_up_->move_drag_box(right_box_pos/2 - LIFE_TIME_BORDER, bottom_box_pos + LIFE_LINE);
db_lifeline_down_ = manage( new DragBox(*my_self_group_) );
db_lifeline_down_->move_drag_box(right_box_pos/2 + LIFE_TIME_BORDER, bottom_box_pos + LIFE_LINE + LIFE_TIME);
anchor_ = manage( new AnchorBox(my_self_group_, H) );
}
ModelClassObject::~ModelClassObject()
{
delete lower_points_;
delete upper_points_;
}
void
ModelClassObject::setIsObject(bool var)
{
if ( var == true ) {
underline_line_->property_fill_color() = "black";
is_object_ = true;
} else {
underline_line_->property_fill_color().reset_value();
is_object_ = false;
}
}
bool
ModelClassObject::getIsObject() {
return is_object_;
}
void
ModelClassObject::move(double x, double y)
{
my_self_group_->move(x, y);
}
void
ModelClassObject::moveTo(double x, double y)
{
my_self_group_->property_x() = x;
my_self_group_->property_y() = y;
}
#ifdef _DEBUG
bool
ModelClassObject::onOver(GdkEvent* event)
{
std::cout << "OnOver" << std::endl;
return 1;
}
#endif
//
// File: ModelClassObject.h
// Created by: Davide "Rocker" Anastasia <s242248 studenti ing unipi it>
// Created on: Thu Jul 29 00:39:16 2004
//
// Questa classe definisce la forma di una classe o di un oggetto nel diagramma
// La sola differenza tra l'una e l'altra è la sottolineatura della label.
#ifndef _MODELCLASSOBJECT_H_
#define _MODELCLASSOBJECT_H_
#include <libgnomecanvasmm/canvas.h>
#include <libgnomecanvasmm/group.h>
#include <libgnomecanvasmm/text.h>
#include <libgnomecanvasmm/line.h>
#include <libgnomecanvasmm/rect.h>
#include "ModelObjBase.h"
#include "CanvasMgr.h"
#include "DragBox.h"
#include "macro.cc"
#include "AnchorBox.h"
class AnchorBox;
class ModelClassObject : virtual public ModelObjBase
{
public:
ModelClassObject(CanvasMgr*, int);
~ModelClassObject();
// Gestione delle proprietÃ
void setIsConcurrent(bool);
bool getIsConcurrent();
void setIsObject(bool);
bool getIsObject();
// Gestione degli eventi
bool on_item_event(GdkEvent*);
// Gestione del movimento
void move(double, double);
void moveTo(double, double);
#ifdef _DEBUG
bool onOver(GdkEvent*);
#endif
virtual void getXMI() {};
virtual void getSVG() {};
virtual void update() {};
protected:
Gnome::Canvas::Group* my_self_group_;
Gnome::Canvas::Rect* box_;
Gnome::Canvas::Text* label_;
Gnome::Canvas::Points* underline_points_;
Gnome::Canvas::Line* underline_line_;
Gnome::Canvas::Points* upper_points_;
Gnome::Canvas::Line* upper_line_;
Gnome::Canvas::Rect* lifetime_box_;
Gnome::Canvas::Points* lower_points_;
Gnome::Canvas::Line* lower_line_;
DragBox* db_box_;
DragBox* db_lifeline_up_;
DragBox* db_lifeline_down_;
// Definisco se l'oggetto è una classe o un oggetto e se è o no concorrente
bool is_concurrent_;
bool is_object_;
AnchorBox* anchor_;
};
#endif //_MODELCLASSOBJECT_H_
//
// File: ModelObjBase.cc
// Created by: Davide "Rocker" Anastasia <s242248 studenti ing unipi it>
// Created on: Sun May 30 23:55:33 2004
//
#include "ModelObjBase.h"
#include "CanvasMgr.h"
ModelObjBase::ModelObjBase(CanvasMgr* canvas, int id)
{
my_manager_ = canvas;
myId = id;
}
ModelObjBase::~ModelObjBase()
{
}
//
// File: ModelObjBase.h
// Created by: Davide "Rocker" Anastasia <s242248 studenti ing unipi it>
// Created on: Sun May 30 23:55:33 2004
//
#ifndef _MODELOBJBASE_H_
#define _MODELOBJBASE_H_
#include <libgnomecanvasmm.h>
#include <gtkmm.h>
//#include <sigc++/sigc++.h>
#include "CanvasMgr.h"
class CanvasMgr;
class ModelObjBase : public virtual SigC::Object
// : public Gtk::EventBox
{
public:
ModelObjBase(CanvasMgr*, int);
virtual ~ModelObjBase();
// ModelObjBase interface
virtual void getXMI() = 0; // Da definire il tipo di ritorno!
virtual void getSVG() = 0; // Da definire il tipo di ritorno!
// Probabilmente il tipo di ritorno di queste
// due funzioni è un oggetto di Xerces-C++
virtual void update() = 0;
// virtual bool on_item_event(GdkEvent*) = 0;
protected:
CanvasMgr* my_manager_;
int myId;
};
#endif //_MODELOBJBASE_H_
Attachment:
signature.asc
Description: Questa parte del messaggio =?ISO-8859-1?Q?=E8?= firmata