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
#ifndef NOTEBOOK_H
00028
#define NOTEBOOK_H
00029
#include <vdk/widcontain.h>
00030
#include <vdk/dlist.h>
00031
#include <vdk/vdkprops.h>
00032
extern char *book_open_xpm[];
00033
extern char *book_closed_xpm[];
00034
00035
class VDKPixmap;
00036
class VDKLabel;
00037
class VDKBox;
00038
class VDKForm;
00039
class VDKNotebook;
00040
class PageList;
00041
class VDKTabPage;
00042
typedef VDKList<VDKTabPage> PList;
00043
typedef VDKListiterator<VDKTabPage> PListIterator;
00044
#define PageListIterator PListIterator
00045
00046
00047
typedef VDKReadWriteValueProp<VDKNotebook,int> NoteBookIntProp;
00048
00049
class ActivePageProperty:
public NoteBookIntProp
00050 {
00051
00052
public:
00053 ActivePageProperty();
00054 ActivePageProperty(
00055
char* name,
00056
VDKNotebook* object,
00057
void (VDKNotebook::*write)(
int) = NULL,
00058
int (VDKNotebook::*read)(
void) = NULL
00059 );
00060
virtual ~ActivePageProperty();
00061 operator int();
00062
void operator=(
int page);
00063
void operator++();
00064
void operator--();
00065
void operator++(
int);
00066
void operator--(
int);
00067 };
00068
00069
00070
00071
class NotebookTabPosProperty:
public NoteBookIntProp
00072 {
00073
00074
public:
00075 NotebookTabPosProperty();
00076 NotebookTabPosProperty(
00077
char* name,
00078
VDKNotebook* object,
00079
void (VDKNotebook::*write)(
int) = NULL,
00080
int (VDKNotebook::*read)(
void) = NULL
00081 );
00082
virtual ~NotebookTabPosProperty();
00083
void operator = (
int pos);
00084 };
00089
class VDKTabPage
00090 {
00091
00092 GtkWidget *tab;
00093 GdkPixmap *open;
00094 GdkPixmap *closed;
00095 GdkBitmap *open_mask;
00096 GdkBitmap *closed_mask;
00097
friend class PageList;
00098
friend class VDKNotebook;
00099
VDKObject* child;
00100
VDKObject* book;
00101
00102
public:
00103
00104
00108
VDKLabel* TabLabel;
00112
VDKObject* Child() {
return child; }
00116 VDKTabPage(
VDKObject* owner,
00117
VDKObject* child,
00118
const char *label,
00119
char **pixmap_closed,
00120
char **pixmap_open);
00121
virtual ~VDKTabPage() {}
00122 };
00127 class PageList:
public PList
00128 {
00129
friend class VDKNotebook;
00130
VDKNotebook *book;
00131
public:
00135
PageList(
VDKNotebook* book = NULL): PList(), book(book) {}
00136 ~
PageList();
00140
void AddPage(
VDKObject* child,
00141
const char *label,
00142
char **pixmap_closed,
00143
char **pixmap_open);
00148 VDKTabPage*
operator[](
int n);
00152 int size() {
return PList::size() ; }
00153 };
00165 class VDKNotebook:
public VDKObjectContainer
00166 {
00167
static void PageSwitch(GtkWidget *widget,
00168 GtkNotebookPage *page,
00169
int pagenum,
00170 gpointer gp);
00171
protected:
00172
00173
public:
00174
00184 PageList Pages;
00194 ActivePageProperty
ActivePage;
00198 NotebookTabPosProperty
TabPosition;
00202 VDKReadWriteValueProp<VDKNotebook,bool>
Scrollable;
00206 VDKReadWriteValueProp<VDKNotebook,bool>
PopUp;
00210 VDKReadOnlyValueProp<VDKNotebook,int>
PreviousActivePage;
00211
00216
VDKNotebook(
VDKForm* owner = NULL);
00220
virtual ~VDKNotebook();
00226 void Add(
VDKObject* obj,
int ,
int ,
int ,
int )
00227 {
AddPage(obj,
""); }
00239
void AddPage(
VDKObject* obj,
00240
const char *label,
00241
char **pixmap_closed = NULL,
00242
char **pixmap_open = NULL);
00252
void RemovePage(
int page,
bool removechild =
true);
00253
bool GetScrollable()
00254 {
return Scrollable; }
00255
void SetScrollable(
bool flag)
00256 {
00257 gtk_notebook_set_show_tabs (GTK_NOTEBOOK(widget), flag);
00258 gtk_notebook_set_scrollable (GTK_NOTEBOOK(widget), flag);
00259 }
00260
bool GetPopUp()
00261 {
return PopUp; }
00262
void SetPopUp(
bool flag)
00263 {
00264
if (flag)
00265 gtk_notebook_popup_enable (GTK_NOTEBOOK(widget));
00266
else
00267 gtk_notebook_popup_disable (GTK_NOTEBOOK(widget));
00268 }
00269
int GetPreviousActivePage()
00270 {
return gtk_notebook_current_page(GTK_NOTEBOOK(widget)); }
00271
#ifdef USE_SIGCPLUSPLUS
00272
VDKSignal1<void,int> OnPageSwitch;
00273
#endif // USE_SIGCPLUSPLUS
00274
};
00275
#endif
00276
00277
00278