00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
#ifndef VDKOBJ_H
00029
#define VDKOBJ_H
00030
#include <gtk/gtk.h>
00031
#include <vdk/vdktypes.h>
00032
#include <vdk/dlist.h>
00033
#include <vdk/vdkutils.h>
00034
#include <vdk/rawobj.h>
00035
#include <vdk/vdkprops.h>
00036
#include <vdk/vdkstring.h>
00037
00038
#ifdef USE_SIGCPLUSPLUS
00039
# include <vdk/sigc_addon.h>
00040
# include <vdk/sigc_events.h>
00041
# include <vdk/sigc_eventsignals.h>
00042
#endif
00043
00044
class VDKForm;
00045
class VDKTooltip;
00046
class VDKFont;
00047
class VDKObject;
00051
enum { object_class, form_class , container_class};
00052
00053
00054
00055
typedef VDKList<VDKObject> ItemList;
00056
typedef VDKListiterator<VDKObject> ItemListIterator;
00057
00062 struct VDKObjectSignal {
00063
void* obj;
00064
int signal;
00065 };
00066
00071 class VDKObjectSignalUnit
00072 {
00073
public:
00074
void* owner;
00075
void* obj;
00076
VDKString signal;
00077
VDKObjectSignalUnit(
void* owner,
void *obj,
char* signal):
00078 owner(owner),obj(obj),signal(signal) {}
00079 ~
VDKObjectSignalUnit() {}
00080 };
00084
typedef VDKList<VDKObjectSignalUnit> SignalUnitList;
00085
typedef VDKListiterator<VDKObjectSignalUnit> SignalUnitListIterator;
00086
00091 class VDKObjectEventUnit
00092 {
00093
public:
00094
void* owner;
00095
void* obj;
00096
VDKString signal;
00097
VDKObjectEventUnit(
void* owner,
void *obj,
char* signal):
00098 owner(owner),obj(obj),signal(signal) {}
00099 ~
VDKObjectEventUnit() {}
00100 };
00104
typedef VDKList<VDKObjectEventUnit> EventUnitList;
00105
typedef VDKListiterator<VDKObjectEventUnit> EventUnitListIterator;
00106
00107
00108
00109
00110
00111
00112
typedef VDKReadWriteValueProp<VDKObject,VDKPoint> SizeOProp;
00113
00114
class SizeObjectProp:
public SizeOProp
00115 {
00116
public:
00117 SizeObjectProp(){}
00118 SizeObjectProp(
char* name,
VDKObject* object,
00119
void (VDKObject::*write)(
VDKPoint) = NULL,
00120 VDKPoint (VDKObject::*read)(
void) = NULL) : SizeOProp(name,object,VDKPoint(0,0),write,read) {}
00121
void operator = (VDKPoint);
00122 operator VDKPoint();
00123 };
00124
00125
00126
00127
00128
00129
00130
typedef VDKList<VDKRawObject> RawList;
00131
typedef VDKListiterator<VDKRawObject> RawListIterator;
00132
00136
#ifndef USE_SIGCPLUSPLUS
00137 class VDKObject :
public VDKNotCopyAble
00138 #else
00139 class
VDKObject :
public SigC::Object,
public VDKNotCopyAble
00140 #endif
00141 {
00142
00143
public:
00144
00145
00146
00156 VDKReadWriteValueProp<VDKObject,VDKRgb>
NormalBackground;
00157 VDKReadWriteValueProp<VDKObject,VDKRgb> PrelightBackground;
00158 VDKReadWriteValueProp<VDKObject,VDKRgb> InsensitiveBackground;
00159 VDKReadWriteValueProp<VDKObject,VDKRgb> ActiveBackground;
00160 VDKReadWriteValueProp<VDKObject,VDKRgb> SelectedBackground;
00161 VDKReadWriteValueProp<VDKObject,VDKRgb> Foreground;
00168 VDKReadWriteValueProp<VDKObject,VDKFont*>
Font;
00172 SizeObjectProp
Usize;
00176 VDKReadWriteValueProp<VDKObject,bool>
Enabled;
00180 VDKReadWriteValueProp<VDKObject,VDKCursorType>
Cursor;
00184 VDKReadWriteValueProp<VDKObject,bool>
Visible;
00185
int Tag;
00186
00187
00188
00189
void SetNormalBackground(
VDKRgb c) {
00190
SetBackground(c,GTK_STATE_NORMAL);
00191 }
00192
void SetPrelightBackground(
VDKRgb c) {
00193 SetBackground(c,GTK_STATE_PRELIGHT);
00194 }
00195
void SetInsensitiveBackground(
VDKRgb c) {
00196
SetBackground(c,GTK_STATE_INSENSITIVE);
00197 }
00198
void SetActiveBackground(
VDKRgb c) {
00199
SetBackground(c,GTK_STATE_ACTIVE);
00200 }
00201
void SetSelectedBackground(
VDKRgb c) {
00202
SetBackground(c,GTK_STATE_SELECTED);
00203 }
00207
VDKRgb
00208
GetBackground(GtkStateType state = GTK_STATE_NORMAL);
00212
VDKRgb
00213
GetForeground(GtkStateType state = GTK_STATE_NORMAL);
00214
00215
private:
00216
00217
00218
00219
friend class VDKRawObject;
00220
00221
00222
00223
00224
VDKTooltip* tip;
00225
protected:
00226 ItemList items;
00227 ItemList garbages;
00228 RawList raws;
00229 SignalUnitList suList;
00230 EventUnitList euList;
00234 VDKObjectSignal s_clicked,
s_pressed,
s_released,
s_enter,
s_leave,
00235
s_list_select,
s_list_unselect,
s_list_click_column,
s_realize,
00236
s_toggled,
s_value_changed,
s_child_attached,
s_child_detached;
00237
VDKForm* owner;
00241 GtkWidget*
widget;
00249 GtkWidget*
sigwid;
00253 VDKObject*
parent;
00256
static int VDKEventPipe(GtkWidget* w, GdkEvent* event,
void* obj);
00259
void _setBackground_(GtkWidget* wid,
00260
int red,
int green,
int blue,
00261 GtkStateType state);
00264
void _setForeground_(GtkWidget* wid,
00265
int red,
int green,
int blue,
00266 GtkStateType state);
00269
void _setFont_(GtkWidget* wid,
VDKFont* f);
00272
void ConnectDefaultEvents();
00275
void ConnectDefaultSignals();
00278
void SignalEmit(
int signal,
int level);
00282
virtual void ShowWidget(
bool visible);
00283
00284
public:
00288
VDKObject(
VDKForm* owner = NULL);
00292
VDKObject(
VDKForm* owner, GtkWidget* widget);
00296
virtual ~VDKObject();
00303
bool Destroy();
00307 virtual int isA() {
return object_class; }
00311 VDKForm*
Owner() {
00312
return owner;
00313 }
00317
virtual GtkWidget*
Widget();
00321 GtkWidget*
ConnectingWidget();
00334 GtkWidget*
WrappedWidget();
00338
virtual void SetFont(
VDKFont* f);
00342 VDKFont*
GetFont()
00343 {
00344
return Font;
00345 }
00350
void SetVisible(
bool visible);
00354 bool GetVisible()
00355 {
00356
return GTK_WIDGET_VISIBLE(
widget);
00357 }
00361
void SetCursor(VDKCursorType);
00365 VDKCursorType
GetCursor()
00366 {
00367
return Cursor;
00368 }
00374
virtual void SetForeground(
VDKRgb color,
00375 GtkStateType state = GTK_STATE_NORMAL);
00376
00377
void SetNormalForeground(
VDKRgb color)
00378 {
00379 SetForeground(color);
00380 }
00386
virtual void SetBackground(
VDKRgb color,
00387 GtkStateType state = GTK_STATE_NORMAL);
00393 void SetSize(
int w,
int h)
00394 {
00395
if(GTK_IS_WIDGET(
widget))
00396 gtk_widget_set_usize(GTK_WIDGET(
widget),w,h);
00397 }
00403 void SetUsize(VDKPoint s)
00404 {
00405 SetSize(s.
X(),s.
Y());
00406 }
00407
00408
00409
00410
00411
00412
virtual void Enable(
bool flag =
true);
00413
00414
00415
00416
bool GetEnabled()
00417 {
00418
return Enabled;
00419 }
00423
virtual void SetTip(
char* );
00434
virtual void Add(
VDKObject* obj,
int justify = l_justify,
00435
int expand = TRUE,
int fill = TRUE ,
00436
int padding = 0);
00440 ItemList&
Items()
00441 {
00442
return items;
00443 }
00447 ItemList& Garbages()
00448 {
00449
return garbages;
00450 }
00454 RawList& Raws()
00455 {
00456
return raws;
00457 }
00461
void Draw(GdkRectangle* area = NULL);
00467 virtual void Setup() {}
00472
void SignalEmit(
int signal);
00477
void SignalEmit(
char* sig);
00482 void SignalEmitParent(
int signal) {
00483 SignalEmit(signal,Parent_level);
00484 }
00489
void SignalEmitParent(
char* sig);
00493
void GrabFocus();
00497
void AddItem(
VDKObject* item);
00501
void RemoveItem(
VDKObject* item);
00505
void RemoveItems();
00506
00507
00508
00512 VDKObject*
Parent(
VDKObject* p = NULL) {
00513
if(p)
parent = p;
return parent;
00514 }
00515
00519
static void VDKSignalPipe(GtkWidget* w,
void* obj);
00523
virtual int VDKObjectSignalResponse(GtkWidget* ,
int ,
void*,
bool)
00524 {
00525
return FALSE;
00526 }
00530
virtual int VDKObjectEventResponse(GtkWidget* , GdkEvent*,
void*,
bool)
00531 {
00532
return FALSE;
00533 }
00534
00535
virtual int ObjectSignalDetach(
int ,
int )
00536 {
00537
return -1;
00538 }
00539
virtual bool ObjectSignalAttach(
int )
00540 {
00541
return false;
00542 }
00543
virtual int ObjectEventDetach(VDKEvent )
00544 {
00545
return -1;
00546 }
00547
virtual bool ObjectEventAttach(
int )
00548 {
00549
return false;
00550 }
00551
protected:
00552
virtual int VDKObjectSignalResponseTableSize()
00553 {
00554
return 0;
00555 }
00556
virtual int VDKObjectEventResponseTableSize()
00557 {
00558
return 0;
00559 }
00560
00561
00562
00563
public:
00567
virtual int VDKSignalResponse(GtkWidget* ,
int ,
void*,
void *,
bool)
00568 {
00569
return 0;
00570 }
00574
virtual int VDKEventResponse(GtkWidget* , GdkEvent* ,
void*,
void*,
bool )
00575 {
00576
return 0;
00577 }
00578
virtual int SignalDetach(
VDKObject* ,
int )
00579 {
00580
return -1;
00581 }
00582
virtual bool SignalAttach(
int )
00583 {
00584
return false;
00585 }
00586
virtual int EventDetach(
VDKObject* ,VDKEvent )
00587 {
00588
return -1;
00589 }
00590
virtual bool EventAttach(
int )
00591 {
00592
return false;
00593 }
00594
protected:
00598
virtual int VDKSignalResponseTableSize()
00599 {
00600
return 0;
00601 }
00605
virtual int VDKEventResponseTableSize()
00606 {
00607
return 0;
00608 }
00609
00610
00611
00612
public:
00627 int SignalConnect(
VDKObject* obj,
00628
char* signal,
00629
bool (VDKObject::*method)(
VDKObject*),
00630
bool gtk =
true,
00631
bool after =
false)
00632 {
00633
return -1;
00634 }
00648 int SignalConnect(
char* signal ,
00649
bool (VDKObject::*method)(
VDKObject*),
00650
bool gtk =
true,
00651
bool after =
false)
00652 {
00653
return -1;
00654 }
00655
00656
virtual int VDKSignalUnitResponse(GtkWidget* ,
char* ,
void*)
00657 {
00658
return 0;
00659 }
00664 bool SignalDisconnect(
int connection)
00665 {
00666
return false;
00667 }
00668
00672
virtual bool FindSignalAtClassLevel(
VDKObject* ,
char* )
00673
00674 {
00675
return false;
00676 }
00677
00681
00682
virtual bool FindSignalAtParentLevel(
VDKObject* ,
char* )
00683 {
00684
return false;
00685 }
00686
protected:
00687
00688
00692
static void VDKSignalUnitPipe(GtkWidget* ,
void* );
00693
00694
00695
00696
public:
00700
00701
virtual bool FindEventAtClassLevel(
VDKObject* ,
char* )
00702 {
00703
return false;
00704 }
00708
00709
virtual bool FindEventAtParentLevel(
VDKObject* ,
char* )
00710 {
00711
return false;
00712 }
00716
virtual int VDKEventUnitResponse(GtkWidget* ,
char* ,
00717 GdkEvent* ,
void*) {
00718
return 0;
00719 }
00729 int EventConnect(
VDKObject* obj,
00730
char* event,
00731
bool (VDKObject::*method) (
VDKObject* , GdkEvent*),
00732
bool after =
false)
00733 {
00734
return -1;
00735
00736 }
00745 int EventConnect(
char* ,
bool (VDKObject::*) (
VDKObject* , GdkEvent*),
00746
bool after =
false)
00747 {
00748
return -1;
00749 }
00754 bool EventDisconnect(
int connection)
00755 {
00756
return false;
00757 }
00758
virtual int VDKSignalResponseListSize() {
00759
return 0;
00760 }
00761
protected:
00762
00763
00767
static int VDKEventUnitPipe(GtkWidget* , GdkEvent*,
void* );
00768
00769
#ifdef USE_SIGCPLUSPLUS
00770
public:
00772 VDKRawEventSignal OnRawEvent;
00774 VDKButtonSignal OnButtonEvent;
00776 VDKKeySignal OnKeyEvent;
00778 VDKKeyFocusSignal OnKeyFocusEvent;
00780 VDKPointerFocusSignal OnPointerFocusEvent;
00782 VDKPointerSignal OnPointerEvent;
00784 VDKMapSignal OnMapEvent;
00786 VDKGeometrySignal OnGeometryEvent;
00788 VDKPaintSignal OnPaintEvent;
00789
#endif // USE_SIGCPLUSPLUS
00790
};
00791
#endif
00792
00793
00794
00795
00796
00797
00798
00799