Drop old gmdb from repository

This commit is contained in:
Nirgal Vourgère
2013-07-04 12:05:40 +02:00
parent 603bfa365a
commit 36a28cdfdb
27 changed files with 0 additions and 5874 deletions

View File

@@ -1,16 +0,0 @@
if HAVE_GTK
bin_PROGRAMS = gmdb
include_HEADERS = gmdb.h gtkhlist.h debug.xpm forms.xpm macros.xpm pk.xpm \
table.xpm query.xpm code.xpm reports.xpm
gmdb_SOURCES = debug.c file.c form.c gtkhlist.c info.c macro.c main.c \
module.c query.c report.c sql.c table.c table_data.c table_def.c \
table_export.c util.c
LIBS = $(GMDB_LIBS) @LEXLIB@
INCLUDES = -I$(top_srcdir)/include $(GMDB_CFLAGS)
#LDADD = ../libmdb/libmdb.la
LDADD = ../libmdb/libmdb.la ../sql/libmdbsql.la
#if SQL
#gmdb_LDADD = ../libmdb/libmdb.la ../sql/libmdbsql.la
#endif
endif

View File

@@ -1,22 +0,0 @@
/* XPM */
static char * code_xpm[] = {
"16 16 3 1",
" c None",
". c #000000",
"+ c #777777",
" ",
" ",
" .. ",
" .++. ",
" . . . ",
" . .. ..",
" . .+ +.",
".... . .+ +. .",
" . . .+. .",
" . .+ +.+ +.",
" . .. +. .+ ..",
" . . . . . ",
" ",
" ",
" ",
" "};

View File

@@ -1,612 +0,0 @@
#include "gmdb.h"
#include "gtkhlist.h"
#include "debug.xpm"
extern GtkWidget *app;
extern MdbHandle *mdb;
typedef struct GMdbDebugTab {
GtkWidget *ctree;
GtkWidget *textbox;
GtkWidget *entry;
GtkWidget *pglabel;
int page_num;
int max_page;
int linesz;
GdkFont *font;
GdkColor black;
GdkColor white;
} GMdbDebugTab;
typedef struct GMdbDebugRange {
gint start_byte;
gint end_byte;
} GMdbDebugRange;
GMdbDebugTab *dbug;
void gmdb_debug_redraw(GtkWidget *textbox, GdkFont *font,
GdkColor *fg, GdkColor *bg, int start_byte, int end_byte);
GtkCTreeNode *gmdb_debug_add_item(GMdbDebugTab *dbug, GtkCTreeNode *parent, gchar *text, int start, int end);
void gmdb_debug_clear(GMdbDebugTab *dbug);
void gmdb_debug_dissect(GMdbDebugTab *dbug, char *fbuf, int offset, int len);
static guint16 get_uint16(unsigned char *c);
static guint32 get_uint24(unsigned char *c);
static guint32 get_uint32(unsigned char *c);
/* value to string stuff */
typedef struct GMdbValStr {
gint value;
gchar *string;
} GMdbValStr;
GMdbValStr table_types[] = {
{ 0x4e, "System Table" },
{ 0x53, "User Table" },
{ 0, NULL }
};
GMdbValStr column_types[] = {
{ 0x01, "boolean" },
{ 0x02, "byte" },
{ 0x03, "int" },
{ 0x04, "longint" },
{ 0x05, "money" },
{ 0x06, "float" },
{ 0x07, "double" },
{ 0x08, "short datetime" },
{ 0x09, "binary" },
{ 0x0a, "text" },
{ 0x0b, "OLE" },
{ 0x0c, "memo/hyperlink" },
{ 0x0d, "Unknown" },
{ 0x0f, "GUID" },
{ 0, NULL }
};
GMdbValStr object_types[] = {
{ 0x00, "Database Definition Page" },
{ 0x01, "Data Page" },
{ 0x02, "Table Definition Page" },
{ 0x03, "Index Page" },
{ 0x03, "Leaf Index Page" },
{ 0, NULL }
};
/* callbacks */
void
gmdb_debug_select_cb(GtkCTree *tree, GList *node, gint column, GMdbDebugTab *dbug)
{
GMdbDebugRange *range;
int start_row, end_row;
int start_col, end_col;
int i;
range = gtk_ctree_node_get_row_data(tree, GTK_CTREE_NODE(node));
/* container node or otherwise non-represented in the data */
if (range->start_byte == -1 || range->end_byte == -1) return;
start_row = range->start_byte / 16;
end_row = range->end_byte / 16;
start_col = 8 + (range->start_byte % 16) * 3;
end_col = 8 + (range->end_byte % 16) * 3;
/* freeze/thaw needed because of redrawing glitch...only part of text had
** correct colors, rest would come back on resize. */
gtk_text_freeze(GTK_TEXT(dbug->textbox));
if (start_row == end_row) {
gmdb_debug_redraw(dbug->textbox, dbug->font, &dbug->white, &dbug->black,
dbug->linesz * start_row + start_col,
dbug->linesz * start_row + end_col + 2);
gmdb_debug_redraw(dbug->textbox, dbug->font, &dbug->white, &dbug->black,
dbug->linesz * start_row + 59 + (range->start_byte % 16),
dbug->linesz * start_row + 59 + (range->end_byte % 16) + 1);
} else {
gmdb_debug_redraw(dbug->textbox, dbug->font, &dbug->white, &dbug->black,
dbug->linesz * start_row + start_col,
/* 55 = 8 (addr) + 15 (bytes) * 3 (%02x " ") + 2 (last byte) */
dbug->linesz * start_row + 55);
gmdb_debug_redraw(dbug->textbox, dbug->font, &dbug->white, &dbug->black,
dbug->linesz * start_row + 59 + (range->start_byte % 16),
dbug->linesz * start_row + 75);
for (i=start_row + 1; i < end_row; i++) {
gmdb_debug_redraw(dbug->textbox, dbug->font,
&dbug->white, &dbug->black,
dbug->linesz * i + 8, dbug->linesz * i + 55);
gmdb_debug_redraw(dbug->textbox, dbug->font,
&dbug->white, &dbug->black,
dbug->linesz * i + 59, dbug->linesz * i + 75);
}
gmdb_debug_redraw(dbug->textbox, dbug->font, &dbug->white, &dbug->black,
dbug->linesz * end_row + 8,
dbug->linesz * end_row + end_col + 2);
gmdb_debug_redraw(dbug->textbox, dbug->font, &dbug->white, &dbug->black,
dbug->linesz * end_row + 59,
dbug->linesz * end_row + 59 + (range->end_byte % 16) + 1);
}
gtk_text_thaw(GTK_TEXT(dbug->textbox));
}
void
gmdb_debug_unselect_cb(GtkCTree *tree, GList *node, gint column, GMdbDebugTab *dbug)
{
GMdbDebugRange *range;
int start_row, end_row;
int start_col, end_col;
int i;
range = gtk_ctree_node_get_row_data(tree, GTK_CTREE_NODE(node));
/* container node or otherwise non-represented in the data */
if (range->start_byte == -1 || range->end_byte == -1) return;
start_row = range->start_byte / 16;
end_row = range->end_byte / 16;
start_col = 8 + (range->start_byte % 16) * 3;
end_col = 8 + (range->end_byte % 16) * 3;
if (start_row == end_row) {
gmdb_debug_redraw(dbug->textbox, dbug->font, &dbug->black, &dbug->white,
dbug->linesz * start_row + start_col,
dbug->linesz * start_row + end_col + 2);
gmdb_debug_redraw(dbug->textbox, dbug->font, &dbug->black, &dbug->white,
dbug->linesz * start_row + 59 + (range->start_byte % 16),
dbug->linesz * start_row + 59 + (range->end_byte % 16) + 1);
} else {
gmdb_debug_redraw(dbug->textbox, dbug->font, &dbug->black, &dbug->white,
dbug->linesz * start_row + start_col,
/* 55 = 8 (addr) + 15 (bytes) * 3 (%02x " ") + 2 (last byte) */
dbug->linesz * start_row + 55);
gmdb_debug_redraw(dbug->textbox, dbug->font, &dbug->black, &dbug->white,
dbug->linesz * start_row + 59 + (range->start_byte % 16),
dbug->linesz * start_row + 75);
for (i=start_row + 1; i < end_row; i++) {
gmdb_debug_redraw(dbug->textbox, dbug->font,
&dbug->black, &dbug->white,
dbug->linesz * i + 8, dbug->linesz * i + 55);
gmdb_debug_redraw(dbug->textbox, dbug->font,
&dbug->black, &dbug->white,
dbug->linesz * i + 59, dbug->linesz * i + 75);
}
gmdb_debug_redraw(dbug->textbox, dbug->font, &dbug->black, &dbug->white,
dbug->linesz * end_row + 8,
dbug->linesz * end_row + end_col + 2);
gmdb_debug_redraw(dbug->textbox, dbug->font, &dbug->black, &dbug->white,
dbug->linesz * end_row + 59,
dbug->linesz * end_row + 59 + (range->end_byte % 16) + 1);
}
}
void
gmdb_debug_display_cb(GtkWidget *w, GMdbDebugTab *dbug)
{
int page;
off_t pos;
unsigned char *fbuf;
unsigned char *tbuf;
int i,j;
int length;
char line[80];
char field[10];
gmdb_debug_clear(dbug);
page = atol(gtk_entry_get_text(GTK_ENTRY(dbug->entry)));
if (page>dbug->max_page || page<0) {
gmdb_info_msg("Page entered is outside valid page range.");
}
pos = lseek(mdb->fd, 0, SEEK_CUR);
lseek(mdb->fd, page * mdb->pg_size, SEEK_SET);
fbuf = (unsigned char *) g_malloc(mdb->pg_size);
tbuf = (unsigned char *) g_malloc0( (mdb->pg_size / 16) * 80);
length = read(mdb->fd, fbuf, mdb->pg_size);
if (length<mdb->pg_size) {
}
i = 0;
while (i<length) {
sprintf(line,"%06x ", i);
for(j=0; j<16; j++) {
sprintf(field, "%02x ", fbuf[i+j]);
strcat(line,field);
}
strcat(line, " |");
for(j=0; j<16; j++) {
sprintf(field, "%c", (isprint(fbuf[i+j])) ? fbuf[i+j] : '.');
strcat(line,field);
}
strcat(line, "|\n");
i += 16;
strcat(tbuf, line);
if (!dbug->linesz) dbug->linesz = strlen(line);
}
gtk_text_insert (GTK_TEXT (dbug->textbox), dbug->font,
&dbug->black, &dbug->white,
tbuf, strlen(tbuf));
//gtk_editable_select_region(GTK_EDITABLE(dbug->textbox), 9, 15);
gmdb_debug_dissect(dbug, fbuf, 0, length);
g_free(fbuf);
g_free(tbuf);
}
/* functions */
gchar *
gmdb_val_to_str(GMdbValStr *valstr, gint val)
{
gchar *strptr;
int i = 0;
do {
strptr = valstr[i].string;
if (val == valstr[i].value) {
return strptr;
}
i++;
} while (*strptr);
return "unknown";
}
static guint16
get_uint16(unsigned char *c)
{
guint16 i;
i =c[1]; i<<=8;
i+=c[0];
return i;
}
static guint32
get_uint24(unsigned char *c)
{
guint32 l;
l =c[2]; l<<=8;
l+=c[1]; l<<=8;
l+=c[0];
return l;
}
static guint32
get_uint32(unsigned char *c)
{
guint32 l;
l =c[3]; l<<=8;
l+=c[2]; l<<=8;
l+=c[1]; l<<=8;
l+=c[0];
return l;
}
void
gmdb_debug_dissect_column(GMdbDebugTab *dbug, GtkCTreeNode *parent, char *fbuf, int offset)
{
gchar str[100];
GtkCTreeNode *node;
snprintf(str, 100, "Column Type: 0x%02x (%s)", fbuf[offset],
gmdb_val_to_str(column_types, fbuf[offset]));
gmdb_debug_add_item(dbug, parent, str, offset, offset);
snprintf(str, 100, "Column #: %d", get_uint16(&fbuf[offset+1]));
gmdb_debug_add_item(dbug, parent, str, offset+1, offset+2);
snprintf(str, 100, "VarCol Offset: %d", get_uint16(&fbuf[offset+3]));
gmdb_debug_add_item(dbug, parent, str, offset+3, offset+4);
snprintf(str, 100, "Unknown", get_uint32(&fbuf[offset+5]));
gmdb_debug_add_item(dbug, parent, str, offset+5, offset+8);
snprintf(str, 100, "Unknown", get_uint32(&fbuf[offset+9]));
gmdb_debug_add_item(dbug, parent, str, offset+9, offset+12);
snprintf(str, 100, "Variable Column: %s",
fbuf[offset+13] & 0x01 ? "No" : "Yes");
gmdb_debug_add_item(dbug, parent, str, offset+13, offset+13);
snprintf(str, 100, "Fixed Col Offset: %d", get_uint16(&fbuf[offset+14]));
gmdb_debug_add_item(dbug, parent, str, offset+14, offset+15);
snprintf(str, 100, "Column Length: %d", get_uint16(&fbuf[offset+16]));
gmdb_debug_add_item(dbug, parent, str, offset+16, offset+17);
}
void
gmdb_debug_dissect_index1(GMdbDebugTab *dbug, GtkCTreeNode *parent, char *fbuf, int offset)
{
gchar str[100];
GtkCTreeNode *node;
snprintf(str, 100, "Unknown");
gmdb_debug_add_item(dbug, parent, str, offset, offset+3);
snprintf(str, 100, "Rows in Index: %lu", get_uint32(&fbuf[offset+4]));
gmdb_debug_add_item(dbug, parent, str, offset+4, offset+7);
}
void
gmdb_debug_add_page_ptr(GMdbDebugTab *dbug, GtkCTreeNode *parent, char *fbuf, const char *label, int offset)
{
gchar str[100];
GtkCTreeNode *node;
snprintf(str, 100, "%s", label);
node = gmdb_debug_add_item(dbug, parent, str, offset, offset+3);
snprintf(str, 100, "Row Number: %u", fbuf[offset]);
gmdb_debug_add_item(dbug, node, str, offset, offset);
snprintf(str, 100, "Page Number: %lu", get_uint24(&fbuf[offset+1]));
gmdb_debug_add_item(dbug, node, str, offset+1, offset+3);
}
void
gmdb_debug_dissect_tabledef_pg(GMdbDebugTab *dbug, char *fbuf, int offset, int len)
{
gchar str[100];
guint32 i, num_idx, num_cols;
int newbase;
GtkCTreeNode *node, *container;
snprintf(str, 100, "Next TDEF Page: 0x%06x (%lu)",
get_uint32(&fbuf[offset+4]), get_uint32(&fbuf[offset+4]));
gmdb_debug_add_item(dbug, NULL, str, offset+4, offset+7);
snprintf(str, 100, "Length of Data: %lu", get_uint32(&fbuf[offset+8]));
gmdb_debug_add_item(dbug, NULL, str, offset+8, offset+11);
snprintf(str, 100, "# of Records: %lu", get_uint32(&fbuf[offset+12]));
gmdb_debug_add_item(dbug, NULL, str, offset+12, offset+15);
snprintf(str, 100, "Autonumber Value: %lu", get_uint32(&fbuf[offset+16]));
gmdb_debug_add_item(dbug, NULL, str, offset+16, offset+19);
snprintf(str, 100, "Table Type: 0x%02x (%s)", fbuf[offset+20],
gmdb_val_to_str(table_types, fbuf[offset+20]));
gmdb_debug_add_item(dbug, NULL, str, offset+20, offset+20);
num_cols = get_uint16(&fbuf[offset+21]);
snprintf(str, 100, "# of Columns: %u", num_cols);
gmdb_debug_add_item(dbug, NULL, str, offset+21, offset+22);
snprintf(str, 100, "# of VarCols: %u",
get_uint16(&fbuf[offset+23]));
gmdb_debug_add_item(dbug, NULL, str, offset+23, offset+24);
snprintf(str, 100, "# of Columns: %u",
get_uint16(&fbuf[offset+25]));
gmdb_debug_add_item(dbug, NULL, str, offset+25, offset+26);
snprintf(str, 100, "# of Index Entries: %lu",
get_uint32(&fbuf[offset+27]));
gmdb_debug_add_item(dbug, NULL, str, offset+27, offset+30);
num_idx = get_uint32(&fbuf[offset+31]);
snprintf(str, 100, "# of Real Indices: %lu", num_idx);
gmdb_debug_add_item(dbug, NULL, str, offset+31, offset+34);
gmdb_debug_add_page_ptr(dbug, NULL, fbuf, "Used Pages Pointer", offset+35);
container = gmdb_debug_add_item(dbug, NULL, "Index Entries", -1, -1);
for (i=0;i<num_idx;i++) {
snprintf(str, 100, "Index %d", i+1);
node = gmdb_debug_add_item(dbug, container, str, offset+43+(8*i), offset+43+(8*i)+7);
gmdb_debug_dissect_index1(dbug, node, fbuf, offset+43+(8*i));
}
newbase = offset + 43 + (8*i);
container = gmdb_debug_add_item(dbug, NULL, "Column Data", -1, -1);
for (i=0;i<num_cols;i++) {
snprintf(str, 100, "Column %d", i+1);
node = gmdb_debug_add_item(dbug, container, str, newbase + (18*i), newbase + (18*i) + 17);
gmdb_debug_dissect_column(dbug, node, fbuf, newbase + (18*i));
}
newbase += 18*num_cols;
container = gmdb_debug_add_item(dbug, NULL, "Column Names", -1, -1);
for (i=0;i<num_cols;i++) {
char *tmpstr;
int namelen;
namelen = fbuf[newbase];
tmpstr = g_malloc(namelen + 1);
strncpy(tmpstr, &fbuf[newbase+1], namelen);
tmpstr[namelen]=0;
snprintf(str, 100, "Column %d: %s", i+1, tmpstr);
g_free(tmpstr);
node = gmdb_debug_add_item(dbug, container, str, newbase + 1, newbase + namelen);
newbase += namelen + 1;
}
}
void gmdb_debug_dissect(GMdbDebugTab *dbug, char *fbuf, int offset, int len)
{
gchar str[100];
snprintf(str, 100, "Object Type: 0x%02x (%s)", fbuf[offset],
gmdb_val_to_str(object_types, fbuf[offset]));
gmdb_debug_add_item(dbug, NULL, str, 0, 0);
switch (fbuf[offset]) {
case 0x00:
//gmdb_debug_dissect_dbpage(dbug, fbuf, 1, len);
break;
case 0x01:
//gmdb_debug_dissect_dbpage(dbug, fbuf, 1, len);
break;
case 0x02:
gmdb_debug_dissect_tabledef_pg(dbug, fbuf, 0, len);
break;
case 0x03:
//gmdb_debug_dissect_dbpage(dbug, fbuf, 1, len);
break;
case 0x04:
//gmdb_debug_dissect_dbpage(dbug, fbuf, 1, len);
break;
}
}
gmdb_clear_node_cb(GtkWidget *ctree, GtkCTreeNode *node, gpointer data)
{
gpointer rowdata;
rowdata = gtk_ctree_node_get_row_data(GTK_CTREE(ctree), node);
g_free(rowdata);
gtk_ctree_remove_node(GTK_CTREE(ctree), node);
}
void
gmdb_debug_clear(GMdbDebugTab *dbug)
{
GtkCTreeNode *node;
gpointer data;
/* clear the tree */
gtk_ctree_post_recursive(dbug->ctree, NULL, gmdb_clear_node_cb, NULL);
/*
node = gtk_ctree_node_nth(GTK_CTREE(dbug->ctree), 0);
data = gtk_ctree_node_get_row_data(GTK_CTREE(dbug->ctree), node);
g_free(data);
gtk_ctree_remove_node(GTK_CTREE(dbug->ctree), node);
*/
/* call delete text last because remove_node fires unselect signal */
gtk_editable_delete_text(GTK_EDITABLE(dbug->textbox),0, -1);
}
GtkCTreeNode *
gmdb_debug_add_item(GMdbDebugTab *dbug, GtkCTreeNode *parent, gchar *text, int start, int end)
{
gchar *nodetext[2];
GtkCTreeNode *node;
GMdbDebugRange *range;
nodetext[0] = text;
nodetext[1] = "0";
node = gtk_ctree_insert_node(GTK_CTREE(dbug->ctree), parent, NULL, nodetext, 0, NULL, NULL, NULL, NULL, FALSE, FALSE);
range = g_malloc(sizeof(GMdbDebugRange));
range->start_byte = start;
range->end_byte = end;
gtk_ctree_node_set_row_data(GTK_CTREE(dbug->ctree), node, range);
return node;
}
void
gmdb_debug_redraw(GtkWidget *textbox,
GdkFont *font, GdkColor *fg, GdkColor *bg,
int start_byte, int end_byte)
{
gchar *text;
gtk_text_set_point(GTK_TEXT(textbox), start_byte);
text = gtk_editable_get_chars(GTK_EDITABLE(textbox), start_byte, end_byte);
gtk_text_forward_delete(GTK_TEXT(textbox), end_byte - start_byte);
gtk_text_insert (GTK_TEXT (textbox), font, fg, bg, text, strlen(text));
g_free(text);
}
void
gmdb_debug_tab_new(GtkWidget *notebook)
{
GtkWidget *tabbox;
GtkWidget *label;
GtkWidget *label1;
GtkWidget *button;
GtkWidget *pixmapwid;
GtkWidget *frame;
GtkWidget *hbox;
GtkWidget *hpane;
GtkWidget *vbox;
GtkWidget *scroll;
GtkWidget *scroll2;
GdkPixmap *pixmap;
GdkBitmap *mask;
GdkColormap *cmap;
dbug = g_malloc0(sizeof(GMdbDebugTab));
dbug->max_page = -1;
dbug->font = gdk_font_load("-*-*-medium-r-normal-*-10-*-*-*-m-*-*-*");
cmap = gdk_colormap_get_system();
gdk_color_white(cmap, &dbug->white);
gdk_color_black(cmap, &dbug->black);
vbox = gtk_vbox_new (FALSE,5);
gtk_widget_show (vbox);
hbox = gtk_hbox_new (FALSE,5);
gtk_widget_show (hbox);
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 10);
label1 = gtk_label_new ("Page Number");
gtk_widget_show (label1);
gtk_box_pack_start (GTK_BOX (hbox), label1, FALSE, FALSE, 10);
dbug->pglabel = gtk_label_new (":");
gtk_widget_show (dbug->pglabel);
gtk_box_pack_start (GTK_BOX (hbox), dbug->pglabel, FALSE, FALSE, 0);
dbug->entry = gtk_entry_new ();
gtk_widget_show (dbug->entry);
gtk_box_pack_start (GTK_BOX (hbox), dbug->entry, TRUE, TRUE, 0);
gtk_signal_connect ( GTK_OBJECT (dbug->entry),
"activate", GTK_SIGNAL_FUNC (gmdb_debug_display_cb), dbug);
button = gtk_button_new_with_label ("Display");
gtk_widget_show (button);
gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
gtk_signal_connect ( GTK_OBJECT (button),
"clicked", GTK_SIGNAL_FUNC (gmdb_debug_display_cb), dbug);
hpane = gtk_hpaned_new ();
gtk_paned_set_position(GTK_PANED(hpane), 200);
gtk_paned_set_gutter_size(GTK_PANED(hpane), 12);
gtk_widget_show(hpane);
gtk_box_pack_start (GTK_BOX (vbox), hpane, TRUE, TRUE, 10);
scroll = gtk_scrolled_window_new(NULL,NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
gtk_widget_show (scroll);
gtk_container_add(GTK_CONTAINER(hpane), scroll);
dbug->ctree = gtk_ctree_new (1, 0);
gtk_widget_show (dbug->ctree);
gtk_container_add (GTK_CONTAINER (scroll), dbug->ctree);
gtk_signal_connect ( GTK_OBJECT (dbug->ctree),
"tree-select-row", GTK_SIGNAL_FUNC (gmdb_debug_select_cb), dbug);
gtk_signal_connect ( GTK_OBJECT (dbug->ctree),
"tree-unselect-row", GTK_SIGNAL_FUNC (gmdb_debug_unselect_cb), dbug);
frame = gtk_frame_new (NULL);
gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
gtk_container_set_border_width (GTK_CONTAINER (frame), 0);
//gtk_widget_set_usize (frame, 100, 75);
gtk_widget_show (frame);
gtk_container_add (GTK_CONTAINER (hpane), frame);
scroll2 = gtk_scrolled_window_new(NULL,NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll2),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_widget_show (scroll2);
gtk_container_add(GTK_CONTAINER(frame), scroll2);
dbug->textbox = gtk_text_new (NULL,NULL);
gtk_widget_show (dbug->textbox);
gtk_container_add(GTK_CONTAINER(scroll2), dbug->textbox);
/* set selection callback for list */
//gtk_signal_connect ( GTK_OBJECT (table_hlist),
// "select-child", GTK_SIGNAL_FUNC (gmdb_table_select_cb), NULL);
/* create a picture/label box and use for tab */
tabbox = gtk_hbox_new (FALSE,5);
pixmap = gdk_pixmap_colormap_create_from_xpm_d( NULL,
gtk_widget_get_colormap(app), &mask, NULL, debug_xpm);
/* a pixmap widget to contain the pixmap */
pixmapwid = gtk_pixmap_new( pixmap, mask );
gtk_widget_show( pixmapwid );
gtk_box_pack_start (GTK_BOX (tabbox), pixmapwid, FALSE, TRUE, 0);
label = gtk_label_new ("Debug");
gtk_widget_show (label);
gtk_box_pack_start (GTK_BOX (tabbox), label, FALSE, TRUE, 0);
gtk_notebook_append_page (GTK_NOTEBOOK (notebook), vbox, tabbox);
if (mdb) gmdb_debug_init(mdb);
}
void gmdb_debug_init(MdbHandle *mdb)
{
struct stat st;
char tmpstr[100];
assert( fstat(mdb->fd, &st)!=-1 );
dbug->max_page = st.st_size/mdb->pg_size;
sprintf(tmpstr, "(0-%d):", dbug->max_page);
gtk_label_set_text(GTK_LABEL(dbug->pglabel), tmpstr);
gtk_widget_grab_focus(GTK_WIDGET(dbug->entry));
}

View File

@@ -1,23 +0,0 @@
/* XPM */
static char * debug_xpm[] = {
"16 16 4 1",
" c None",
". c #ED2D2D",
"+ c #635757",
"@ c #000000",
" ",
" ..... ",
" ... ... ",
" .. +@+ .. ",
" .... @@@ .. ",
" .@+..+@+ +@. ",
".. @+..@@ +@ .. ",
". @@..@@@ . ",
". @@..@ . ",
". @@@@@@..@@@ . ",
".. @@@@.. .. ",
" . @@@@@@.. . ",
" ..@+ @@@ +... ",
" .. .. ",
" ... ... ",
" ..... "};

View File

@@ -1,61 +0,0 @@
#include "gmdb.h"
#include <mdbtools.h>
GtkWidget *file_selector;
MdbHandle *mdb;
extern int main_show_debug;
void
gmdb_file_open(gchar *file_path)
{
mdb = mdb_open(file_path, MDB_NOFLAGS);
if (!mdb) {
gmdb_info_msg("Unable to open file.");
return;
}
sql->mdb = mdb;
mdb_read_catalog(mdb, MDB_TABLE);
gmdb_table_populate(mdb);
gmdb_query_populate(mdb);
gmdb_form_populate(mdb);
gmdb_report_populate(mdb);
gmdb_macro_populate(mdb);
gmdb_module_populate(mdb);
if (main_show_debug) gmdb_debug_init(mdb);
}
void
gmdb_file_open_cb(GtkWidget *selector, gpointer data)
{
gchar *file_path;
file_path = gtk_file_selection_get_filename (GTK_FILE_SELECTION(file_selector));
gmdb_file_open(file_path);
}
void
gmdb_file_select_cb(GtkWidget *button, gpointer data)
{
/*just print a string so that we know we got there*/
file_selector = gtk_file_selection_new("Please select a database.");
gtk_signal_connect (
GTK_OBJECT (GTK_FILE_SELECTION(file_selector)->ok_button),
"clicked", GTK_SIGNAL_FUNC (gmdb_file_open_cb), NULL);
gtk_signal_connect_object ( GTK_OBJECT (
GTK_FILE_SELECTION(file_selector)->ok_button),
"clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy),
(gpointer) file_selector);
gtk_signal_connect_object (
GTK_OBJECT (GTK_FILE_SELECTION(file_selector)->cancel_button),
"clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy),
(gpointer) file_selector);
gtk_widget_show (file_selector);
}
void
gmdb_file_close_cb(GtkWidget *button, gpointer data)
{
}

View File

@@ -1,53 +0,0 @@
#include "gmdb.h"
#include "gtkhlist.h"
GtkWidget *form_hlist;
extern GtkWidget *app;
void
gmdb_form_add_icon(gchar *text)
{
GList *glist = NULL;
GtkWidget *li;
GtkWidget *label;
GtkWidget *box;
GtkWidget *pixmapwid;
GdkPixmap *pixmap;
GdkBitmap *mask;
li = gtk_list_item_new ();
box = gtk_hbox_new (FALSE,5);
pixmap = gdk_pixmap_colormap_create_from_xpm( NULL,
gtk_widget_get_colormap(app), &mask, NULL, "table.xpm");
/* a pixmap widget to contain the pixmap */
pixmapwid = gtk_pixmap_new( pixmap, mask );
gtk_widget_show( pixmapwid );
gtk_box_pack_start (GTK_BOX (box), pixmapwid, FALSE, TRUE, 0);
label = gtk_label_new (text);
gtk_box_pack_start (GTK_BOX (box), label, FALSE, TRUE, 0);
gtk_container_add(GTK_CONTAINER(li), box);
glist = g_list_append (glist, li);
gtk_widget_show (label);
gtk_widget_show_all (li);
gtk_hlist_append_items(GTK_HLIST(form_hlist), glist);
}
void gmdb_form_populate(MdbHandle *mdb)
{
int i;
MdbCatalogEntry *entry;
/* loop over each entry in the catalog */
for (i=0; i < mdb->num_catalog; i++) {
entry = g_ptr_array_index (mdb->catalog, i);
/* if it's a form */
if (entry->object_type == MDB_FORM) {
/* add table to tab */
gmdb_form_add_icon(entry->object_name);
} /* if MDB_FORM */
} /* for */
}

View File

@@ -1,126 +0,0 @@
/* XPM */
static char * forms_xpm[] = {
"16 16 107 2",
" c None",
". c #585858",
"+ c #C47D41",
"@ c #FACB8D",
"# c #DEDEDE",
"$ c #C37B40",
"% c #FAC78C",
"& c #FE8F0C",
"* c #FFFFFF",
"= c #CECECE",
"- c #FAC689",
"; c #FE880E",
"> c #FE8801",
", c #FCFCFC",
"' c #FEFEFE",
") c #E5D6C8",
"! c #FAC98F",
"~ c #FD8810",
"{ c #FE8803",
"] c #EC7A03",
"^ c #FDFDFD",
"/ c #E7DACC",
"( c #FD850C",
"_ c #FE8703",
": c #E47604",
"< c #A54E04",
"[ c #ECDAD2",
"} c #D38F5D",
"| c #F8C58D",
"1 c #FE8406",
"2 c #FE8804",
"3 c #A34C04",
"4 c #1C0C01",
"5 c #EDEDED",
"6 c #F4D6C1",
"7 c #FFE2CD",
"8 c #EB9260",
"9 c #FA800A",
"0 c #E47702",
"a c #A04A04",
"b c #210F01",
"c c #DFDFDF",
"d c #EBB698",
"e c #FEE5CA",
"f c #F1B492",
"g c #D37043",
"h c #CF6524",
"i c #A04B0A",
"j c #231001",
"k c #E4E0D8",
"l c #EFD0B5",
"m c #FFD1B1",
"n c #C67E5D",
"o c #87542B",
"p c #5C4733",
"q c #241008",
"r c #303030",
"s c #FDFDFC",
"t c #EFB493",
"u c #F7C9AC",
"v c #C67D5A",
"w c #825234",
"x c #332E23",
"y c #474544",
"z c #BCAB90",
"A c #DCD0BF",
"B c #897862",
"C c #A36F52",
"D c #4C392C",
"E c #5B5957",
"F c #B0B0AF",
"G c #BCA88A",
"H c #FAF6F2",
"I c #A09380",
"J c #1A1812",
"K c #534F4C",
"L c #9F9C96",
"M c #C4BFB9",
"N c #DAD6D3",
"O c #E9D6BA",
"P c #BCA685",
"Q c #DAC8AB",
"R c #736A5A",
"S c #9C9488",
"T c #BDB4A4",
"U c #EEDFC8",
"V c #ECDAC0",
"W c #E9D6B9",
"X c #E7D1B0",
"Y c #BCA37F",
"Z c #F4EDE1",
"` c #F2E8D8",
" . c #F0E4D0",
".. c #EEDEC8",
"+. c #ECDABF",
"@. c #E9D6B8",
"#. c #E5CCA7",
"$. c #BCA178",
"%. c #C6C1B6",
"&. c #C4BDAC",
"*. c #C3B8A3",
"=. c #C2B39A",
"-. c #C0AF91",
";. c #BFAA88",
">. c #BEA57F",
",. c #BDA076",
"'. c #BC9E73",
" . . . . . . . . . . . . + @ ",
" . # # # # # # # # # $ % & ",
" . # * * * # * * * = $ - ; > ",
" . # * * * # , ' ) $ ! ~ { ] ",
" . # # # # # ^ / $ ! ( _ : < ",
" . # * * * # [ } | 1 2 : 3 4 ",
" . # * * * 5 6 7 8 9 0 a b ",
" . c # # # d e f g h i j ",
" . # * * k l m n o p q r ",
" . # * s t u v w x y z r ",
" . # # A B C D E F F G r ",
" . # H I J K L M N O P r ",
" . # Q R S T U V W X Y r ",
" . # Z ` ...+.@.X #.$.r ",
" . %.%.&.*.=.-.;.>.,.'.r ",
" . r r r r r r r r r r r "};

View File

@@ -1,58 +0,0 @@
#ifndef _gmdb_h_
#define _gmdb_h_
#include <assert.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <gtk/gtk.h>
#ifdef HAVE_GNOME
#include <gnome.h>
#endif
#include "mdbtools.h"
#include "mdbsql.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
void gmdb_info_msg(gchar *message);
GtkWidget *gmdb_info_new();
GtkWidget *gmdb_table_data_new(MdbCatalogEntry *entry);
GtkWidget *gmdb_table_def_new(MdbCatalogEntry *entry);
GtkWidget *gmdb_table_export_new(MdbCatalogEntry *entry);
void gmdb_file_select_cb(GtkWidget *w, gpointer data);
void gmdb_file_open_cb(GtkWidget *w, gpointer data);
void gmdb_file_close_cb(GtkWidget *w, gpointer data);
void gmdb_file_open(gchar *file_path);
void gmdb_sql_new_window_cb(GtkWidget *w, gpointer data);
void gmdb_table_populate(MdbHandle *mdb);
void gmdb_form_populate(MdbHandle *mdb);
void gmdb_query_populate(MdbHandle *mdb);
void gmdb_report_populate(MdbHandle *mdb);
void gmdb_macro_populate(MdbHandle *mdb);
void gmdb_module_populate(MdbHandle *mdb);
void gmdb_debug_init(MdbHandle *mdb);
void gmdb_table_add_tab(GtkWidget *notebook);
void gmdb_debug_tab_new(GtkWidget *notebook);
extern GtkWidget *table_hlist;
extern GtkWidget *form_hlist;
extern GtkWidget *query_hlist;
extern GtkWidget *report_hlist;
extern GtkWidget *macro_hlist;
extern GtkWidget *module_hlist;
extern MdbSQL *sql;
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -1,147 +0,0 @@
/* GTK - The GIMP Toolkit
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library 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
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/*
* Modified by the GTK+ Team and others 1997-1999. See the AUTHORS
* file for a list of people on the GTK+ Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __GTK_HLIST_H__
#define __GTK_HLIST_H__
#include <gdk/gdk.h>
#include <gtk/gtkenums.h>
#include <gtk/gtkcontainer.h>
#include <gtk/gtklistitem.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#define GTK_TYPE_HLIST (gtk_hlist_get_type ())
#define GTK_HLIST(obj) (GTK_CHECK_CAST ((obj), GTK_TYPE_HLIST, GtkHList))
#define GTK_HLIST_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_HLIST, GtkHListClass))
#define GTK_IS_HLIST(obj) (GTK_CHECK_TYPE ((obj), GTK_TYPE_HLIST))
#define GTK_IS_HLIST_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_HLIST))
typedef struct _GtkHList GtkHList;
typedef struct _GtkHListClass GtkHListClass;
struct _GtkHList
{
GtkContainer container;
GList *children;
GList *selection;
GList *undo_selection;
GList *undo_unselection;
GtkWidget *last_focus_child;
GtkWidget *undo_focus_child;
guint htimer;
guint vtimer;
gint anchor;
gint drag_pos;
GtkStateType anchor_state;
guint selection_mode : 2;
guint drag_selection:1;
guint add_mode:1;
gboolean horizontal;
guint horiz_spacing;
};
struct _GtkHListClass
{
GtkContainerClass parent_class;
void (* selection_changed) (GtkHList *list);
void (* select_child) (GtkHList *list,
GtkWidget *child);
void (* unselect_child) (GtkHList *list,
GtkWidget *child);
};
GtkType gtk_hlist_get_type (void);
GtkWidget* gtk_hlist_new (void);
void gtk_hlist_insert_items (GtkHList *list,
GList *items,
gint position);
void gtk_hlist_append_items (GtkHList *list,
GList *items);
void gtk_hlist_prepend_items (GtkHList *list,
GList *items);
void gtk_hlist_remove_items (GtkHList *list,
GList *items);
void gtk_hlist_remove_items_no_unref (GtkHList *list,
GList *items);
void gtk_hlist_clear_items (GtkHList *list,
gint start,
gint end);
void gtk_hlist_select_item (GtkHList *list,
gint item);
void gtk_hlist_unselect_item (GtkHList *list,
gint item);
void gtk_hlist_select_child (GtkHList *list,
GtkWidget *child);
void gtk_hlist_unselect_child (GtkHList *list,
GtkWidget *child);
gint gtk_hlist_child_position (GtkHList *list,
GtkWidget *child);
void gtk_hlist_set_selection_mode (GtkHList *list,
GtkSelectionMode mode);
void gtk_hlist_set_horizontal_mode (GtkHList *list,
gboolean horiz);
void gtk_hlist_extend_selection (GtkHList *list,
GtkScrollType scroll_type,
gfloat position,
gboolean auto_start_selection);
void gtk_hlist_start_selection (GtkHList *list);
void gtk_hlist_end_selection (GtkHList *list);
void gtk_hlist_select_all (GtkHList *list);
void gtk_hlist_unselect_all (GtkHList *list);
void gtk_hlist_scroll_horizontal (GtkHList *list,
GtkScrollType scroll_type,
gfloat position);
void gtk_hlist_scroll_vertical (GtkHList *list,
GtkScrollType scroll_type,
gfloat position);
void gtk_hlist_toggle_add_mode (GtkHList *list);
void gtk_hlist_toggle_focus_row (GtkHList *list);
void gtk_hlist_toggle_row (GtkHList *list,
GtkWidget *item);
void gtk_hlist_undo_selection (GtkHList *list);
void gtk_hlist_end_drag_selection (GtkHList *list);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __GTK_HLIST_H__ */

View File

@@ -1,89 +0,0 @@
#include "gmdb.h"
#include "gtkhlist.h"
extern GtkWidget *app;
extern MdbHandle *mdb;
typedef struct GMdbInfoWindow {
GtkWidget *window;
} GMdbInfoWindow;
GMdbInfoWindow *infow;
/* callbacks */
gint
gmdb_info_dismiss_cb(GtkWidget *w, gpointer data)
{
g_free(infow);
infow = NULL;
return FALSE;
}
void
gmdb_info_add_keyvalue(GtkWidget *table, gint row, gchar *key, gchar *value)
{
GtkWidget *label;
label = gtk_label_new(key);
gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_RIGHT);
gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1,
GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 0);
gtk_widget_show(label);
label = gtk_label_new(value);
gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
gtk_table_attach(GTK_TABLE(table), label, 1, 2, row, row+1,
GTK_FILL| GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 0);
gtk_widget_show(label);
}
GtkWidget *
gmdb_info_new()
{
GtkWidget *vbox;
GtkWidget *button;
GtkWidget *table;
char tmpstr[20];
struct stat st;
if (infow) {
return infow->window;
}
infow = g_malloc(sizeof(GMdbInfoWindow));
infow->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(infow->window), "File Info");
gtk_widget_set_uposition(infow->window, 300,300);
gtk_widget_show(infow->window);
gtk_signal_connect ( GTK_OBJECT (infow->window),
"destroy", GTK_SIGNAL_FUNC (gmdb_info_dismiss_cb), infow->window);
vbox = gtk_vbox_new(FALSE, 0);
gtk_widget_show(vbox);
gtk_container_add(GTK_CONTAINER(infow->window), vbox);
table = gtk_table_new(3,2,FALSE);
gtk_widget_show(table);
gmdb_info_add_keyvalue(table, 0, "File Name:", mdb->filename);
gmdb_info_add_keyvalue(table, 1, "JET Version:", mdb->jet_version == MDB_VER_JET3 ? "3 (Access 97)" : "4 (Access 2000/XP)");
assert( fstat(mdb->fd, &st)!=-1 );
sprintf(tmpstr, "%ld", st.st_size);
gmdb_info_add_keyvalue(table, 2, "File Size:", tmpstr);
sprintf(tmpstr, "%ld", st.st_size / mdb->pg_size);
gmdb_info_add_keyvalue(table, 3, "Number of Pages:", tmpstr);
sprintf(tmpstr, "%d", mdb->num_catalog);
gmdb_info_add_keyvalue(table, 4, "Number of Tables:", tmpstr);
gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 5);
button = gtk_button_new_with_label("Close");
gtk_widget_show (button);
gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 5);
gtk_signal_connect_object ( GTK_OBJECT (button),
"clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy),
GTK_OBJECT(infow->window));
return infow->window;
}

View File

@@ -1,53 +0,0 @@
#include "gmdb.h"
#include "gtkhlist.h"
GtkWidget *macro_hlist;
extern GtkWidget *app;
void
gmdb_macro_add_icon(gchar *text)
{
GList *glist = NULL;
GtkWidget *li;
GtkWidget *label;
GtkWidget *box;
GtkWidget *pixmapwid;
GdkPixmap *pixmap;
GdkBitmap *mask;
li = gtk_list_item_new ();
box = gtk_hbox_new (FALSE,5);
pixmap = gdk_pixmap_colormap_create_from_xpm( NULL,
gtk_widget_get_colormap(app), &mask, NULL, "table.xpm");
/* a pixmap widget to contain the pixmap */
pixmapwid = gtk_pixmap_new( pixmap, mask );
gtk_widget_show( pixmapwid );
gtk_box_pack_start (GTK_BOX (box), pixmapwid, FALSE, TRUE, 0);
label = gtk_label_new (text);
gtk_box_pack_start (GTK_BOX (box), label, FALSE, TRUE, 0);
gtk_container_add(GTK_CONTAINER(li), box);
glist = g_list_append (glist, li);
gtk_widget_show (label);
gtk_widget_show_all (li);
gtk_hlist_append_items(GTK_HLIST(macro_hlist), glist);
}
void gmdb_macro_populate(MdbHandle *mdb)
{
int i;
MdbCatalogEntry *entry;
/* loop over each entry in the catalog */
for (i=0; i < mdb->num_catalog; i++) {
entry = g_ptr_array_index (mdb->catalog, i);
/* if it's a macro */
if (entry->object_type == MDB_MACRO) {
/* add table to tab */
gmdb_macro_add_icon(entry->object_name);
} /* if MDB_MACRO */
} /* for */
}

View File

@@ -1,137 +0,0 @@
/* XPM */
static char * macros_xpm[] = {
"14 14 120 2",
" c None",
". c #564F44",
"+ c #554C41",
"@ c #534D44",
"# c #817867",
"$ c #756A5C",
"% c #756B5E",
"& c #70685C",
"* c #A0907A",
"= c #827766",
"- c #998A75",
"; c #C8B498",
"> c #887A68",
", c #C5B195",
"' c #887B68",
") c #A8977F",
"! c #9A8A75",
"~ c #6D6356",
"{ c #DEC7A9",
"] c #A0907B",
"^ c #C4B196",
"/ c #DDC7A8",
"( c #A1917C",
"_ c #CDB99C",
": c #D9C3A5",
"< c #A2927C",
"[ c #C5B296",
"} c #7A7165",
"| c #6E6456",
"1 c #E1C9AB",
"2 c #A89781",
"3 c #BFAD93",
"4 c #E1CAAB",
"5 c #B6A48B",
"6 c #D3BEA1",
"7 c #B4A38A",
"8 c #9B8C76",
"9 c #9C8D76",
"0 c #92836F",
"a c #897C69",
"b c #8A7C69",
"c c #5F564B",
"d c #AC9A83",
"e c #E5CEAD",
"f c #B3A188",
"g c #CBB79A",
"h c #877A67",
"i c #B3A287",
"j c #E0C9A9",
"k c #E1CBAB",
"l c #E2CBAD",
"m c #D8C2A5",
"n c #6B6255",
"o c #595349",
"p c #BDAB90",
"q c #968772",
"r c #8F806C",
"s c #D6C1A3",
"t c #B4A388",
"u c #C5B295",
"v c #B2A088",
"w c #796D5D",
"x c #978973",
"y c #90826E",
"z c #DCC6A8",
"A c #E4CDAD",
"B c #7D705F",
"C c #756C5F",
"D c #B6A48A",
"E c #C5B196",
"F c #B2A188",
"G c #9E8F78",
"H c #B3A087",
"I c #B39F86",
"J c #7A6E5D",
"K c #867866",
"L c #B09F87",
"M c #AD9C83",
"N c #E3CDAC",
"O c #E5CEAE",
"P c #9D8C76",
"Q c #796E5E",
"R c #E3CCAA",
"S c #E5CDAD",
"T c #E0CAAB",
"U c #E4CDAE",
"V c #DDC7A9",
"W c #C0AD92",
"X c #DEC8A9",
"Y c #847764",
"Z c #6B6254",
"` c #D4BFA1",
" . c #E3CCAD",
".. c #BFAC91",
"+. c #5E574C",
"@. c #A89880",
"#. c #E3CDAD",
"$. c #E3CCAC",
"%. c #786E5F",
"&. c #867A6A",
"*. c #C9B699",
"=. c #DEC7A7",
"-. c #D7C2A4",
";. c #9A8C77",
">. c #797060",
",. c #D3BFA0",
"'. c #E0C9AA",
"). c #E5CDAE",
"!. c #E2CCAB",
"~. c #928470",
"{. c #565148",
"]. c #C6B297",
"^. c #E5CEAF",
"/. c #E4CEAE",
"(. c #8E806E",
"_. c #676056",
":. c #C6B398",
"<. c #E2CDAE",
"[. c #E1CBAD",
"}. c #A49681",
" . + @ # $ % ",
"& * = - ; > , ; ' ) ! ",
"~ { ] ^ / ( _ : < [ ; } ",
"| 1 2 3 4 5 6 7 8 9 0 a b ",
"c { 0 d e f g h i j k l m n ",
"o p q r s t u v w x y z A B ",
"C D E F G H I J K L M N O P ",
"Q R O S T U V W X O O O A Y ",
"Z ` O O O O O O O O O ...+.",
" @.#.O O O O O O O $.W %. ",
" &.*.A j =.A $.O -.;.~ ",
" >.,.4 '.).O !.~. ",
" {.].O O ^./.T (. ",
" _.:.O O /.<.[.}. "};

View File

@@ -1,323 +0,0 @@
#include "gtkhlist.h"
#include <mdbtools.h>
#include <mdbsql.h>
#include "gmdb.h"
#include "code.xpm"
#include "forms.xpm"
#include "macros.xpm"
#include "query.xpm"
#include "reports.xpm"
GtkWidget *app;
MdbSQL *sql;
GtkWidget *main_notebook;
int main_show_debug;
/* called when the user closes the window */
static gint
delete_event(GtkWidget *widget, GdkEvent *event, gpointer data)
{
/* signal the main loop to quit */
gtk_main_quit();
/* return FALSE to continue closing the window */
return FALSE;
}
static void
gmdb_info_cb(GtkWidget *button, gpointer data)
{
gmdb_info_new();
}
/* show the debug tab */
static void
show_debug_cb(GtkWidget *button, gpointer data)
{
if (main_show_debug) {
main_show_debug = 0;
gtk_notebook_remove_page(GTK_NOTEBOOK(main_notebook), 6);
} else {
main_show_debug = 1;
gmdb_debug_tab_new(main_notebook);
gtk_notebook_set_page(GTK_NOTEBOOK(main_notebook), -1);
}
}
/* a callback for the buttons */
static void
gmdb_about_cb(GtkWidget *button, gpointer data)
{
const gchar *authors[] = {
"Brian Bruns",
NULL
};
#ifdef HAVE_GNOME
gtk_widget_show (gnome_about_new ("Gtk MDB Viewer", "0.1",
"Copyright 2002 Brian Bruns",
(const gchar **) authors,
_("The Gtk-MDB Viewer is the grapical interface to "
"MDB Tools. It lets you view, print and export data "
"from MDB files produced by MS Access 97/2000/XP."),
NULL));
#else
gmdb_info_msg("Gtk MDB Viewer 0.1\nCopyright 2002 Brian Bruns\n"
"The Gtk-MDB Viewer is the grapical interface to\n"
"MDB Tools. It lets you view, print and export data\n"
"from MDB files produced by MS Access 97/2000/XP.\n");
#endif
}
/* a callback for the buttons */
static void
a_callback(GtkWidget *button, gpointer data)
{
/*just print a string so that we know we got there*/
g_print("Inside Callback\n");
}
#ifdef HAVE_GNOME
GnomeUIInfo file_menu[] = {
GNOMEUIINFO_MENU_OPEN_ITEM(gmdb_file_select_cb, "Open Database..."),
GNOMEUIINFO_MENU_CLOSE_ITEM(gmdb_file_close_cb, "Close Database"),
GNOMEUIINFO_SEPARATOR,
GNOMEUIINFO_MENU_PRINT_SETUP_ITEM(a_callback, NULL),
GNOMEUIINFO_MENU_PRINT_ITEM("Print...",NULL),
GNOMEUIINFO_SEPARATOR,
GNOMEUIINFO_MENU_EXIT_ITEM(gtk_main_quit,NULL),
GNOMEUIINFO_END
};
GnomeUIInfo edit_menu[] = {
GNOMEUIINFO_MENU_UNDO_ITEM("Undo", a_callback),
GNOMEUIINFO_SEPARATOR,
GNOMEUIINFO_MENU_CUT_ITEM("Cut",a_callback),
GNOMEUIINFO_MENU_COPY_ITEM("Copy", a_callback),
GNOMEUIINFO_MENU_PASTE_ITEM("Paste", a_callback),
GNOMEUIINFO_END
};
GnomeUIInfo view_menu[] = {
GNOMEUIINFO_ITEM_NONE("File _Info","Display Information about MDB File",
gmdb_info_cb),
GNOMEUIINFO_ITEM_NONE("_Debug Tab","Show file debugger tab",
show_debug_cb),
GNOMEUIINFO_END
};
GnomeUIInfo tools_menu[] = {
GNOMEUIINFO_ITEM_NONE("S_QL Window...","Run SQL Query Tool", gmdb_sql_new_window_cb),
GNOMEUIINFO_ITEM_NONE("E_xport Schema...","Export the database schema DDL to a file",
a_callback),
GNOMEUIINFO_END
};
GnomeUIInfo help_menu[] = {
GNOMEUIINFO_MENU_ABOUT_ITEM(gmdb_about_cb, NULL),
GNOMEUIINFO_END
};
GnomeUIInfo menubar[] = {
GNOMEUIINFO_MENU_FILE_TREE(file_menu),
GNOMEUIINFO_SUBTREE("_Edit",edit_menu),
GNOMEUIINFO_SUBTREE("_View",view_menu),
GNOMEUIINFO_SUBTREE("_Tools",tools_menu),
GNOMEUIINFO_MENU_HELP_TREE(help_menu),
GNOMEUIINFO_END
};
#else
static GtkItemFactoryEntry menu_items[] = {
{ "/_File", NULL, NULL, 0, "<Branch>" },
{ "/_File/_Open", "<control>O", gmdb_file_select_cb, 0, NULL },
{ "/_File/_Close", "<control>C", gmdb_file_close_cb, 0, NULL },
{ "/_File/sep1", NULL, NULL, 0, "<Separator>" },
{ "/_File/Print Setup", NULL, NULL, 0, NULL },
{ "/_File/_Print", NULL, NULL, 0, NULL },
{ "/_File/E_xit", "<control>Q", gtk_main_quit, 0, NULL },
{ "/_Edit", NULL, NULL, 0, "<Branch>" },
{ "/_Edit/_Undo", NULL, NULL, 0, NULL },
{ "/_File/sep2", NULL, NULL, 0, "<Separator>" },
{ "/_Edit/Cu_t", NULL, NULL, 0, NULL },
{ "/_Edit/_Copy", NULL, NULL, 0, NULL },
{ "/_Edit/_Paste", NULL, NULL, 0, NULL },
{ "/_View", NULL, NULL, 0, "<Branch>" },
{ "/_View/File _Info", NULL, gmdb_info_cb, 0, NULL },
{ "/_View/_Debug Tab", NULL, show_debug_cb, 0, NULL },
{ "/_Tools", NULL, NULL, 0, "<Branch>" },
{ "/_Tools/S_QL Window...", NULL, gmdb_sql_new_window_cb, 0, NULL },
{ "/_Tools/E_xport Schema...", NULL, a_callback, 0, NULL },
{ "/_Help", NULL, NULL, 0, "<Branch>" },
{ "/_Help/About...", NULL, gmdb_about_cb, 0, NULL },
};
#endif
GtkWidget *
add_tab(GtkWidget *notebook, gchar **xpm, gchar *text)
{
GtkWidget *tabbox;
GtkWidget *label;
GtkWidget *pixmapwid;
GtkWidget *frame;
GtkWidget *hlist;
GdkPixmap *pixmap;
GdkBitmap *mask;
frame = gtk_frame_new (NULL);
gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
gtk_container_set_border_width (GTK_CONTAINER (frame), 10);
gtk_widget_set_usize (frame, 100, 75);
gtk_widget_show (frame);
hlist = gtk_hlist_new ();
gtk_widget_show (hlist);
gtk_container_add(GTK_CONTAINER(frame), hlist);
/* create a picture/label box and use for tab */
tabbox = gtk_hbox_new (FALSE,5);
pixmap = gdk_pixmap_colormap_create_from_xpm_d( NULL,
gtk_widget_get_colormap(app), &mask, NULL, xpm);
/* a pixmap widget to contain the pixmap */
pixmapwid = gtk_pixmap_new( pixmap, mask );
gtk_widget_show( pixmapwid );
gtk_box_pack_start (GTK_BOX (tabbox), pixmapwid, TRUE, TRUE, 0);
label = gtk_label_new (text);
gtk_widget_show (label);
gtk_box_pack_start (GTK_BOX (tabbox), label, TRUE, TRUE, 0);
gtk_notebook_append_page (GTK_NOTEBOOK (notebook), frame, tabbox);
return hlist;
}
void
add_icon(GtkWidget *list, gchar **xpm, gchar *text)
{
GList *glist = NULL;
GtkWidget *li;
GtkWidget *label;
GtkWidget *box;
GtkWidget *pixmapwid;
GdkPixmap *pixmap;
GdkBitmap *mask;
//GtkStyle *style;
li = gtk_list_item_new ();
box = gtk_hbox_new (FALSE,5);
//style = gtk_widget_get_style( app );
pixmap = gdk_pixmap_colormap_create_from_xpm_d( NULL,
gtk_widget_get_colormap(app), &mask, NULL, xpm);
//pixmap = gdk_pixmap_create_from_xpm_d( app->window, &mask,
//&style->bg[GTK_STATE_NORMAL],
//(gchar **)xpm );
/* a pixmap widget to contain the pixmap */
pixmapwid = gtk_pixmap_new( pixmap, mask );
gtk_widget_show( pixmapwid );
gtk_box_pack_start (GTK_BOX (box), pixmapwid, TRUE, TRUE, 0);
label = gtk_label_new (text);
gtk_box_pack_start (GTK_BOX (box), label, TRUE, TRUE, 0);
gtk_container_add(GTK_CONTAINER(li), box);
glist = g_list_append (glist, li);
gtk_widget_show (label);
gtk_widget_show (li);
gtk_hlist_append_items(GTK_HLIST(list), glist);
}
int
main(int argc, char *argv[])
{
GtkWidget *hbox;
#ifndef HAVE_GNOME
GtkWidget *vbox;
GtkWidget *menubar;
GtkItemFactory *item_factory;
GtkAccelGroup *accel_group;
gint nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
#endif
#ifdef SQL
/* initialize the SQL engine */
sql = mdb_sql_init();
#endif
#ifdef HAVE_GNOME
/* Initialize GNOME */
gnome_init ("gtk-mdb-viewer", "0.1", argc, argv);
/* Create a Gnome app widget, which sets up a basic window
for your application */
app = gnome_app_new ("gtk-mdb-viewer", "gtk-MDB File Viewer");
#else
gtk_init(&argc, &argv);
app = gtk_window_new (GTK_WINDOW_TOPLEVEL);
vbox = gtk_vbox_new (FALSE,1);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 1);
gtk_container_add (GTK_CONTAINER (app), vbox);
gtk_widget_show (vbox);
#endif
gtk_widget_set_uposition(GTK_WIDGET(app), 50, 50);
/* bind "delete_event", which is the event we get when
the user closes the window with the window manager,
to gtk_main_quit, which is a function that causes
the gtk_main loop to exit, and consequently to quit
the application */
gtk_signal_connect (GTK_OBJECT (app), "delete_event",
GTK_SIGNAL_FUNC (delete_event), NULL);
#ifdef HAVE_GNOME
gnome_app_create_menus (GNOME_APP (app), menubar);
/* create a horizontal box for the buttons and add it
** into the app widget */
hbox = gtk_hbox_new (FALSE,5);
gnome_app_set_contents (GNOME_APP (app), hbox);
#else
accel_group = gtk_accel_group_new ();
item_factory = gtk_item_factory_new(GTK_TYPE_MENU_BAR, "<main>", accel_group);
gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
gtk_window_add_accel_group (GTK_WINDOW (app), accel_group);
/* Finally, return the actual menu bar created by the item factory. */
menubar = gtk_item_factory_get_widget (item_factory, "<main>");
gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, TRUE, 0);
hbox = gtk_hbox_new (FALSE,5);
gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
#endif
/* create the tabbed interface */
main_notebook = gtk_notebook_new();
gtk_box_pack_start (GTK_BOX (hbox), main_notebook, TRUE, TRUE, 0);
gmdb_table_add_tab(main_notebook);
query_hlist = add_tab(main_notebook, query_xpm, "Queries");
form_hlist = add_tab(main_notebook, forms_xpm, "Forms");
report_hlist = add_tab(main_notebook, reports_xpm, "Reports");
macro_hlist = add_tab(main_notebook, macros_xpm, "Macros");
module_hlist = add_tab(main_notebook, code_xpm, "Modules");
//add_icon(table_hlist, "table.xpm", "Table1");
/* show everything inside this app widget and the app
widget itself */
gtk_widget_show_all(app);
if (argc>1) {
gmdb_file_open(argv[1]);
}
/* enter the main loop */
gtk_main ();
#ifdef SQL
/* free MDB Tools library */
mdb_sql_exit(sql);
#endif
return 0;
}

View File

@@ -1,53 +0,0 @@
#include "gmdb.h"
#include "gtkhlist.h"
GtkWidget *module_hlist;
extern GtkWidget *app;
void
gmdb_module_add_icon(gchar *text)
{
GList *glist = NULL;
GtkWidget *li;
GtkWidget *label;
GtkWidget *box;
GtkWidget *pixmapwid;
GdkPixmap *pixmap;
GdkBitmap *mask;
li = gtk_list_item_new ();
box = gtk_hbox_new (FALSE,5);
pixmap = gdk_pixmap_colormap_create_from_xpm( NULL,
gtk_widget_get_colormap(app), &mask, NULL, "table.xpm");
/* a pixmap widget to contain the pixmap */
pixmapwid = gtk_pixmap_new( pixmap, mask );
gtk_widget_show( pixmapwid );
gtk_box_pack_start (GTK_BOX (box), pixmapwid, FALSE, TRUE, 0);
label = gtk_label_new (text);
gtk_box_pack_start (GTK_BOX (box), label, FALSE, TRUE, 0);
gtk_container_add(GTK_CONTAINER(li), box);
glist = g_list_append (glist, li);
gtk_widget_show (label);
gtk_widget_show_all (li);
gtk_hlist_append_items(GTK_HLIST(module_hlist), glist);
}
void gmdb_module_populate(MdbHandle *mdb)
{
int i;
MdbCatalogEntry *entry;
/* loop over each entry in the catalog */
for (i=0; i < mdb->num_catalog; i++) {
entry = g_ptr_array_index (mdb->catalog, i);
/* if it's a module */
if (entry->object_type == MDB_MODULE) {
/* add table to tab */
gmdb_module_add_icon(entry->object_name);
} /* if MDB_MODULE */
} /* for */
}

View File

@@ -1,24 +0,0 @@
/* XPM */
static char * pk_xpm[] = {
"16 16 5 1",
" c None",
". c #FFBF00",
"+ c #1C59DD",
"@ c #000000",
"# c #E8AC17",
" ",
" .... +++ ",
" ..@@.. + + ",
" ...... + + ",
" ...... +++ ",
" .... + ",
" .# + ",
" .# ",
" .# + + ",
" .#. + + ",
" .#.. ++ ",
" .# + + ",
" .#. + + ",
" .#.. + + ",
" ",
" "};

View File

@@ -1,52 +0,0 @@
#include "gmdb.h"
#include "gtkhlist.h"
GtkWidget *query_hlist;
extern GtkWidget *app;
void
gmdb_query_add_icon(gchar *text)
{
GList *glist = NULL;
GtkWidget *li;
GtkWidget *label;
GtkWidget *box;
GtkWidget *pixmapwid;
GdkPixmap *pixmap;
GdkBitmap *mask;
li = gtk_list_item_new ();
box = gtk_hbox_new (FALSE,5);
pixmap = gdk_pixmap_colormap_create_from_xpm( NULL,
gtk_widget_get_colormap(app), &mask, NULL, "query.xpm");
/* a pixmap widget to contain the pixmap */
pixmapwid = gtk_pixmap_new( pixmap, mask );
gtk_widget_show( pixmapwid );
gtk_box_pack_start (GTK_BOX (box), pixmapwid, FALSE, TRUE, 0);
label = gtk_label_new (text);
gtk_box_pack_start (GTK_BOX (box), label, FALSE, TRUE, 0);
gtk_container_add(GTK_CONTAINER(li), box);
glist = g_list_append (glist, li);
gtk_widget_show (label);
gtk_widget_show_all (li);
gtk_hlist_append_items(GTK_HLIST(query_hlist), glist);
}
void gmdb_query_populate(MdbHandle *mdb)
{
int i;
MdbCatalogEntry *entry;
/* loop over each entry in the catalog */
for (i=0; i < mdb->num_catalog; i++) {
entry = g_ptr_array_index (mdb->catalog, i);
/* if it's a query */
if (entry->object_type == MDB_QUERY) {
gmdb_query_add_icon(entry->object_name);
} /* if MDB_QUERY */
} /* for */
}

View File

@@ -1,46 +0,0 @@
/* XPM */
static char * query_xpm[] = {
"10 12 31 1",
" c None",
". c #C9C5C5",
"+ c #C2BEBE",
"@ c #D0CCCC",
"# c #DAD5D5",
"$ c #C1BDBD",
"% c #9B9B9B",
"& c #B6B5B5",
"* c #C0BCBC",
"= c #9D9C9C",
"- c #D4D1D1",
"; c #CCC8C8",
"> c #8C8C8C",
", c #A09F9F",
"' c #959696",
") c #A7A6A6",
"! c #C6C1C1",
"~ c #8D8E8E",
"{ c #A4A5A5",
"] c #BEBBBB",
"^ c #C3C0C0",
"/ c #9D9E9E",
"( c #AFACAC",
"_ c #949595",
": c #B9B7B7",
"< c #AEABAB",
"[ c #B0AEAE",
"} c #A2A2A2",
"| c #A5A5A5",
"1 c #979797",
"2 c #ACABAB",
" .+@ ",
" #$%&*%=- ",
" ;> ,' ",
" )> !~+",
" +{ ]~+",
" ^~/ ",
" (_: ",
" <[ ",
" } ",
" ",
" |+ ",
" +12 "};

View File

@@ -1,53 +0,0 @@
#include "gmdb.h"
#include "gtkhlist.h"
GtkWidget *report_hlist;
extern GtkWidget *app;
void
gmdb_report_add_icon(gchar *text)
{
GList *glist = NULL;
GtkWidget *li;
GtkWidget *label;
GtkWidget *box;
GtkWidget *pixmapwid;
GdkPixmap *pixmap;
GdkBitmap *mask;
li = gtk_list_item_new ();
box = gtk_hbox_new (FALSE,5);
pixmap = gdk_pixmap_colormap_create_from_xpm( NULL,
gtk_widget_get_colormap(app), &mask, NULL, "table.xpm");
/* a pixmap widget to contain the pixmap */
pixmapwid = gtk_pixmap_new( pixmap, mask );
gtk_widget_show( pixmapwid );
gtk_box_pack_start (GTK_BOX (box), pixmapwid, FALSE, TRUE, 0);
label = gtk_label_new (text);
gtk_box_pack_start (GTK_BOX (box), label, FALSE, TRUE, 0);
gtk_container_add(GTK_CONTAINER(li), box);
glist = g_list_append (glist, li);
gtk_widget_show (label);
gtk_widget_show_all (li);
gtk_hlist_append_items(GTK_HLIST(report_hlist), glist);
}
void gmdb_report_populate(MdbHandle *mdb)
{
int i;
MdbCatalogEntry *entry;
/* loop over each entry in the catalog */
for (i=0; i < mdb->num_catalog; i++) {
entry = g_ptr_array_index (mdb->catalog, i);
/* if it's a report */
if (entry->object_type == MDB_REPORT) {
/* add table to tab */
gmdb_report_add_icon(entry->object_name);
} /* if MDB_REPORT */
} /* for */
}

View File

@@ -1,95 +0,0 @@
/* XPM */
static char * reports_xpm[] = {
"16 16 76 1",
" c None",
". c #45372B",
"+ c #4F3939",
"@ c #E7D1AA",
"# c #EBD7B9",
"$ c #D1B692",
"% c #000000",
"& c #F0DBB9",
"* c #F0E7D9",
"= c #F5EBDF",
"- c #CDB18C",
"; c #050403",
"> c #4C3E31",
", c #EFE4D7",
"' c #FBF7F3",
") c #FFFCF9",
"! c #FDF6EF",
"~ c #554542",
"{ c #5A4A47",
"] c #55473A",
"^ c #F2E9DB",
"/ c #FBF6F0",
"( c #FEFBF8",
"_ c #FEFAF7",
": c #FCF4EF",
"< c #FAF3ED",
"[ c #413533",
"} c #57483A",
"| c #F7EDDE",
"1 c #FEF8F0",
"2 c #FEF8EF",
"3 c #FDF7F3",
"4 c #F9F1E7",
"5 c #FBF2E7",
"6 c #594946",
"7 c #EFD8B0",
"8 c #A78568",
"9 c #FBF2E3",
"0 c #FEF5E8",
"a c #FDF5EA",
"b c #F9EFE2",
"c c #F7EDDC",
"d c #F7ECDC",
"e c #4D3D30",
"f c #F1E2CA",
"g c #FCEFD9",
"h c #FEF2DC",
"i c #F8EAD3",
"j c #F4E5CE",
"k c #EEDBC5",
"l c #F5E5C7",
"m c #F7E7C9",
"n c #FCEED0",
"o c #F6E6C8",
"p c #F4E1C3",
"q c #E9D8BC",
"r c #E2CFB1",
"s c #AE9676",
"t c #E5CFA8",
"u c #E4CCA5",
"v c #EFD8B6",
"w c #EBD7B5",
"x c #E7D3B4",
"y c #D7BD99",
"z c #FFFCFB",
"A c #FFF8E9",
"B c #E2C7A3",
"C c #806553",
"D c #BFA582",
"E c #DBC19D",
"F c #020200",
"G c #E1C6A2",
"H c #836854",
"I c #B89F7D",
"J c #FEF7E8",
"K c #5D4B47",
" ... ",
" +@#$%% ",
" +&*=#-;% ",
" >,'))!#-~{ ",
" ]^/(_:<{[{%",
" }|12345{67%",
" .890abcd%%% ",
" efghhijk; ",
" .lmnopqr% ",
" ...stuvw#xy% ",
".zABCCDyEByF ",
".-#zAGHCIDD% ",
" %%-#zJB{Ks% ",
" %%-#{[{% ",
" %%{{7% ",
" %%% "};

View File

@@ -1,284 +0,0 @@
#include "gmdb.h"
#include "gtkhlist.h"
#if SQL
typedef struct GMdbSQLWindow {
GtkWidget *window;
GtkWidget *textbox;
GtkWidget *combo;
GtkWidget *clist;
GtkWidget *scroll;
GtkWidget *ctree;
GtkCTreeNode *current_node;
GList *history;
} GMdbSQLWindow;
GList *window_list;
extern GtkWidget *app;
extern MdbHandle *mdb;
extern MdbSQL *sql;
void gmdb_sql_ctree_populate(MdbHandle *mdb, GMdbSQLWindow *sqlwin);
/* callbacks */
gint
gmdb_sql_close(GtkHList *hlist, GtkWidget *w, GMdbSQLWindow *sqlwin)
{
window_list = g_list_remove(window_list, sql);
g_free(sql);
return FALSE;
}
void
gmdb_sql_tree_select_cb(GtkCTree *tree, GList *node, gint column, GMdbSQLWindow *sqlwin)
{
sqlwin->current_node = node;
}
void
gmdb_sql_dnd_dataget_cb(
GtkWidget *w, GdkDragContext *dc,
GtkSelectionData *selection_data, guint info, guint t,
GMdbSQLWindow *sqlwin)
{
gchar tablename[256];
gchar *text[2];
gtk_ctree_get_node_info(GTK_CTREE(sqlwin->ctree), sqlwin->current_node, text, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
strcpy(tablename, "Shippers");
gtk_selection_data_set(
selection_data,
GDK_SELECTION_TYPE_STRING,
8, /* 8 bits per character. */
text[0], strlen(text[0]));
}
void gmdb_sql_dnd_datareceived_cb(
GtkWidget *w,
GdkDragContext *dc,
gint x, gint y,
GtkSelectionData *selection_data,
guint info, guint t,
GMdbSQLWindow *sqlwin)
{
gchar *buf;
buf = selection_data->data;
if (gtk_text_get_length(GTK_TEXT(sqlwin->textbox))==0) {
gtk_text_insert(GTK_TEXT(sqlwin->textbox), NULL, NULL, NULL, "select * from ", 14);
}
gtk_text_insert(GTK_TEXT(sqlwin->textbox), NULL, NULL, NULL, buf, strlen(buf));
gtk_widget_grab_focus(GTK_WIDGET(sqlwin->textbox));
}
void
gmdb_sql_select_hist_cb(GtkList *list, GtkWidget *w, GMdbSQLWindow *sqlwin)
{
guint child_num;
gchar *buf;
child_num = gtk_list_child_position(list, w);
buf = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(sqlwin->combo)->entry));
gtk_editable_delete_text(GTK_EDITABLE(sqlwin->textbox), 0, -1);
gtk_text_insert(GTK_TEXT(sqlwin->textbox), NULL, NULL, NULL, buf, strlen(buf));
}
void
gmdb_sql_execute_cb(GtkWidget *w, GMdbSQLWindow *sqlwin)
{
guint len;
gchar *buf;
gchar *bound_data[256];
int i;
MdbSQLColumn *sqlcol;
gchar *titles[256];
/* stuff this query on the history */
len = gtk_text_get_length(GTK_TEXT(sqlwin->textbox));
buf = gtk_editable_get_chars(GTK_EDITABLE(sqlwin->textbox), 0, -1);
sqlwin->history = g_list_prepend(sqlwin->history, g_strdup(buf));
gtk_combo_set_popdown_strings(GTK_COMBO(sqlwin->combo), sqlwin->history);
/* ok now execute it */
g_input_ptr = buf;
/* begin unsafe */
_mdb_sql(sql);
if (yyparse()) {
/* end unsafe */
gmdb_info_msg("Couldn't parse SQL");
mdb_sql_reset(sql);
return;
}
for (i=0;i<sql->num_columns;i++) {
bound_data[i] = (char *) g_malloc0(MDB_BIND_SIZE);
mdb_sql_bind_column(sql, i+1, bound_data[i]);
sqlcol = g_ptr_array_index(sql->columns,i);
titles[i] = sqlcol->name;
}
if (sqlwin->clist) {
gtk_container_remove(GTK_CONTAINER(sqlwin->scroll), sqlwin->clist);
}
sqlwin->clist = gtk_clist_new_with_titles(sql->num_columns, titles);
gtk_container_add(GTK_CONTAINER(sqlwin->scroll),sqlwin->clist);
gtk_widget_show(sqlwin->clist);
while(mdb_fetch_row(sql->cur_table)) {
gtk_clist_append(GTK_CLIST(sqlwin->clist), bound_data);
}
/* free the memory used to bind */
for (i=0;i<sql->num_columns;i++) {
g_free(bound_data[i]);
}
mdb_sql_reset(sql);
g_free(buf);
}
void
gmdb_sql_new_window_cb(GtkWidget *w, gpointer data)
{
GtkWidget *hpane;
GtkWidget *vpane;
GtkWidget *vbox;
GtkWidget *hbox;
GtkWidget *scroll;
GtkWidget *button;
GtkWidget *frame1;
GtkTargetEntry src;
GMdbSQLWindow *sqlwin;
if (!mdb) {
gmdb_info_msg("No database is open.");
return;
}
sqlwin = g_malloc0(sizeof(GMdbSQLWindow));
sqlwin->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(sqlwin->window), "Query Tool");
gtk_widget_set_usize(sqlwin->window, 400,300);
gtk_widget_show(sqlwin->window);
gtk_signal_connect (GTK_OBJECT (sqlwin->window), "delete_event",
GTK_SIGNAL_FUNC (gmdb_sql_close), sqlwin);
vpane = gtk_vpaned_new();
gtk_widget_show(vpane);
gtk_paned_set_position(GTK_PANED(vpane), 100);
gtk_paned_set_gutter_size(GTK_PANED(vpane), 12);
gtk_container_add(GTK_CONTAINER(sqlwin->window), vpane);
hpane = gtk_hpaned_new();
gtk_widget_show(hpane);
gtk_paned_set_position(GTK_PANED(hpane), 100);
gtk_paned_set_gutter_size(GTK_PANED(hpane), 12);
gtk_container_add(GTK_CONTAINER(vpane), hpane);
scroll = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
gtk_widget_show (scroll);
gtk_container_add(GTK_CONTAINER(hpane), scroll);
sqlwin->ctree = gtk_ctree_new (1, 0);
gtk_widget_show (sqlwin->ctree);
gtk_container_add (GTK_CONTAINER (scroll), sqlwin->ctree);
gtk_signal_connect ( GTK_OBJECT (sqlwin->ctree),
"tree-select-row", GTK_SIGNAL_FUNC (gmdb_sql_tree_select_cb), sqlwin);
vbox = gtk_vbox_new(FALSE,0);
gtk_widget_show (vbox);
gtk_container_add(GTK_CONTAINER(hpane), vbox);
frame1 = gtk_frame_new (NULL);
gtk_frame_set_shadow_type(GTK_FRAME(frame1), GTK_SHADOW_IN);
gtk_widget_show (frame1);
gtk_box_pack_start (GTK_BOX (vbox), frame1, TRUE, TRUE, 0);
sqlwin->textbox = gtk_text_new (NULL,NULL);
gtk_widget_show (sqlwin->textbox);
gtk_text_set_editable(GTK_TEXT(sqlwin->textbox), TRUE);
gtk_container_add(GTK_CONTAINER(frame1), sqlwin->textbox);
gtk_signal_connect ( GTK_OBJECT (sqlwin->textbox),
"activate", GTK_SIGNAL_FUNC (gmdb_sql_execute_cb), sqlwin);
hbox = gtk_hbox_new(FALSE,0);
gtk_widget_show (hbox);
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
sqlwin->combo = gtk_combo_new();
gtk_widget_show (sqlwin->combo);
gtk_box_pack_start (GTK_BOX (hbox), sqlwin->combo, TRUE, TRUE, 0);
gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(sqlwin->combo)->entry), FALSE);
gtk_signal_connect ( GTK_OBJECT (GTK_COMBO(sqlwin->combo)->list),
"select-child", GTK_SIGNAL_FUNC (gmdb_sql_select_hist_cb), sqlwin);
button = gtk_button_new_with_label("Execute");
gtk_widget_show (button);
gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 5);
gtk_signal_connect ( GTK_OBJECT (button),
"clicked", GTK_SIGNAL_FUNC (gmdb_sql_execute_cb), sqlwin);
sqlwin->scroll = gtk_scrolled_window_new(NULL,NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sqlwin->scroll),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_widget_show (sqlwin->scroll);
gtk_container_add(GTK_CONTAINER(vpane), sqlwin->scroll);
sqlwin->clist = gtk_clist_new(1);
gtk_widget_show(sqlwin->clist);
gtk_container_add(GTK_CONTAINER(sqlwin->scroll),sqlwin->clist);
/* populate first level of tree */
gmdb_sql_ctree_populate(mdb, sqlwin);
src.target = "table";
src.flags = 0;
src.info = 1;
gtk_drag_source_set( sqlwin->ctree, GDK_BUTTON1_MASK, &src, 1, GDK_ACTION_COPY);
gtk_drag_dest_set( sqlwin->textbox,
GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_HIGHLIGHT |
GTK_DEST_DEFAULT_DROP,
&src, 1, GDK_ACTION_COPY | GDK_ACTION_MOVE);
gtk_signal_connect( GTK_OBJECT(sqlwin->ctree), "drag_data_get",
GTK_SIGNAL_FUNC(gmdb_sql_dnd_dataget_cb), sqlwin);
gtk_signal_connect( GTK_OBJECT(sqlwin->textbox), "drag_data_received",
GTK_SIGNAL_FUNC(gmdb_sql_dnd_datareceived_cb), sqlwin);
gtk_widget_grab_focus(GTK_WIDGET(sqlwin->textbox));
/* add this one to the window list */
window_list = g_list_append(window_list, sql);
}
/* functions */
void gmdb_sql_ctree_populate(MdbHandle *mdb, GMdbSQLWindow *sqlwin)
{
int i;
MdbCatalogEntry *entry;
gchar *text[2];
/* add all user tables in catalog to tab */
for (i=0; i < mdb->num_catalog; i++) {
entry = g_ptr_array_index (mdb->catalog, i);
if (mdb_is_user_table(entry)) {
text[0] = entry->object_name;
text[1] = "";
gtk_ctree_insert_node(GTK_CTREE(sqlwin->ctree), NULL, NULL, text, 0, NULL, NULL, NULL, NULL, FALSE, FALSE);
}
} /* for */
}
#else
void
gmdb_sql_new_window_cb(GtkWidget *w, gpointer data)
{
gmdb_info_msg("SQL support was not built in.\nRun configure with the --enable-sql option.");
}
#endif

View File

@@ -1,201 +0,0 @@
#include "gmdb.h"
#include "gtkhlist.h"
#include "table.xpm"
GtkWidget *table_hlist;
GtkWidget *table_data_window;
GtkWidget *table_def_window;
extern GtkWidget *app;
extern MdbHandle *mdb;
int selected_child = -1;
int selected_table = -1;
extern char *mdb_access_types[];
/* callbacks */
void
gmdb_table_def_cb(GtkHList *hlist, GtkWidget *w, gpointer data)
{
MdbCatalogEntry *entry;
/* nothing selected yet? */
if (selected_table==-1) {
return;
}
entry = g_ptr_array_index(mdb->catalog,selected_table);
gmdb_table_def_new(entry);
}
void
gmdb_table_export_cb(GtkHList *hlist, GtkWidget *w, gpointer data)
{
MdbCatalogEntry *entry;
/* nothing selected yet? */
if (selected_table==-1) {
return;
}
entry = g_ptr_array_index(mdb->catalog,selected_table);
gmdb_table_export(entry);
}
void
gmdb_table_data_cb(GtkHList *hlist, GtkWidget *w, gpointer data)
{
MdbCatalogEntry *entry;
/* nothing selected yet? */
if (selected_table==-1) {
return;
}
entry = g_ptr_array_index(mdb->catalog,selected_table);
gmdb_table_data_new(entry);
}
void
gmdb_table_select_cb(GtkHList *hlist, GtkWidget *w, gpointer data)
{
int child_num;
int i,j=0;
MdbCatalogEntry *entry;
child_num = gtk_hlist_child_position(hlist, w);
selected_child = child_num;
for (i=0;i<mdb->num_catalog;i++) {
entry = g_ptr_array_index(mdb->catalog,i);
if (mdb_is_user_table(entry)) {
if (j==child_num) {
selected_table = i;
}
j++;
}
}
}
/* functions */
void
gmdb_table_add_icon(gchar *text)
{
GList *glist = NULL;
GtkWidget *li;
GtkWidget *label;
GtkWidget *box;
GtkWidget *pixmapwid;
GdkPixmap *pixmap;
GdkBitmap *mask;
li = gtk_list_item_new ();
box = gtk_hbox_new (FALSE,5);
pixmap = gdk_pixmap_colormap_create_from_xpm_d( NULL,
gtk_widget_get_colormap(app), &mask, NULL, table_xpm);
/* a pixmap widget to contain the pixmap */
pixmapwid = gtk_pixmap_new( pixmap, mask );
gtk_widget_show( pixmapwid );
gtk_box_pack_start (GTK_BOX (box), pixmapwid, FALSE, TRUE, 0);
label = gtk_label_new (text);
gtk_box_pack_start (GTK_BOX (box), label, FALSE, TRUE, 0);
gtk_container_add(GTK_CONTAINER(li), box);
glist = g_list_append (glist, li);
gtk_widget_show (label);
gtk_widget_show_all (li);
gtk_hlist_append_items(GTK_HLIST(table_hlist), glist);
}
void
gmdb_table_add_tab(GtkWidget *notebook)
{
GtkWidget *tabbox;
GtkWidget *label;
GtkWidget *pixmapwid;
GtkWidget *frame;
GtkWidget *hbox;
GtkWidget *vbbox;
GtkWidget *button1;
GtkWidget *button2;
GtkWidget *button3;
GdkPixmap *pixmap;
GdkBitmap *mask;
hbox = gtk_hbox_new (FALSE,5);
gtk_widget_show (hbox);
frame = gtk_frame_new (NULL);
gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
gtk_container_set_border_width (GTK_CONTAINER (frame), 10);
gtk_widget_set_usize (frame, 100, 75);
gtk_widget_show (frame);
gtk_box_pack_start (GTK_BOX (hbox), frame, TRUE, TRUE, 0);
table_hlist = gtk_hlist_new ();
gtk_widget_show (table_hlist);
gtk_container_add(GTK_CONTAINER(frame), table_hlist);
/* set selection callback for list */
gtk_signal_connect (
GTK_OBJECT (table_hlist),
"select-child", GTK_SIGNAL_FUNC (gmdb_table_select_cb), NULL);
vbbox = gtk_vbutton_box_new ();
gtk_container_set_border_width (GTK_CONTAINER (vbbox), 10);
gtk_vbutton_box_set_layout_default ( GTK_BUTTONBOX_START );
gtk_button_box_set_child_size ( GTK_BUTTON_BOX( vbbox), 80, 20);
gtk_box_pack_start (GTK_BOX (hbox), vbbox, FALSE, FALSE, 10);
gtk_widget_show( vbbox );
button1 = gtk_button_new_with_label("Definition");
gtk_box_pack_start (GTK_BOX (vbbox), button1, FALSE, TRUE, 0);
gtk_widget_show( button1 );
gtk_signal_connect ( GTK_OBJECT (button1),
"clicked", GTK_SIGNAL_FUNC (gmdb_table_def_cb), NULL);
button2 = gtk_button_new_with_label("Data");
gtk_box_pack_start (GTK_BOX (vbbox), button2, FALSE, FALSE, 0);
gtk_widget_show( button2 );
gtk_signal_connect ( GTK_OBJECT (button2),
"clicked", GTK_SIGNAL_FUNC (gmdb_table_data_cb), NULL);
button3 = gtk_button_new_with_label("Export");
gtk_box_pack_start (GTK_BOX (vbbox), button3, FALSE, FALSE, 0);
gtk_widget_show( button3 );
gtk_signal_connect ( GTK_OBJECT (button3),
"clicked", GTK_SIGNAL_FUNC (gmdb_table_export_cb), NULL);
/* create a picture/label box and use for tab */
tabbox = gtk_hbox_new (FALSE,5);
pixmap = gdk_pixmap_colormap_create_from_xpm_d( NULL,
gtk_widget_get_colormap(app), &mask, NULL, table_xpm);
/* a pixmap widget to contain the pixmap */
pixmapwid = gtk_pixmap_new( pixmap, mask );
gtk_widget_show( pixmapwid );
gtk_box_pack_start (GTK_BOX (tabbox), pixmapwid, FALSE, TRUE, 0);
label = gtk_label_new ("Tables");
gtk_widget_show (label);
gtk_box_pack_start (GTK_BOX (tabbox), label, FALSE, TRUE, 0);
gtk_notebook_append_page (GTK_NOTEBOOK (notebook), hbox, tabbox);
}
void gmdb_table_populate(MdbHandle *mdb)
{
int i;
MdbCatalogEntry *entry;
/* add all user tables in catalog to tab */
for (i=0; i < mdb->num_catalog; i++) {
entry = g_ptr_array_index (mdb->catalog, i);
if (mdb_is_user_table(entry)) {
gmdb_table_add_icon(entry->object_name);
}
} /* for */
}

View File

@@ -1,19 +0,0 @@
/* XPM */
static char * table_xpm[] = {
"10 12 4 1",
" c None",
". c #1874B1",
"+ c #606060",
"@ c #D7D2D2",
"..........",
"..........",
"+@@+@@@+@+",
"++++++++++",
"+@@+@@@+@+",
"++++++++++",
"+@@+@@@+@+",
"++++++++++",
"+@@+@@@+@+",
"++++++++++",
"+@@+@@@+@+",
"++++++++++"};

View File

@@ -1,96 +0,0 @@
#include "gmdb.h"
extern GtkWidget *app;
extern MdbHandle *mdb;
typedef struct GMdbDataWindow {
gchar table_name[MDB_MAX_OBJ_NAME];
GtkWidget *window;
} GMdbDataWindow;
static GList *window_list;
/* callbacks */
gint
gmdb_table_data_close(GtkWidget *w, GdkEvent *event, GMdbDataWindow *dataw)
{
window_list = g_list_remove(window_list, dataw);
g_free(dataw);
return FALSE;
}
/* functions */
GtkWidget *
gmdb_table_data_new(MdbCatalogEntry *entry)
{
MdbTableDef *table;
MdbColumn *col;
GtkWidget *clist;
GtkWidget *scroll;
int i, rownum;
gchar *bound_data[256];
GMdbDataWindow *dataw = NULL;
/* do we have an active window for this object? if so raise it */
for (i=0;i<g_list_length(window_list);i++) {
dataw = g_list_nth_data(window_list, i);
if (!strcmp(dataw->table_name, entry->object_name)) {
gdk_window_raise (dataw->window->window);
return dataw->window;
}
}
dataw = g_malloc(sizeof(GMdbDataWindow));
strcpy(dataw->table_name, entry->object_name);
dataw->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(dataw->window), entry->object_name);
gtk_widget_set_usize(dataw->window, 300,200);
gtk_widget_set_uposition(dataw->window, 50,50);
gtk_widget_show(dataw->window);
gtk_signal_connect (GTK_OBJECT (dataw->window), "delete_event",
GTK_SIGNAL_FUNC (gmdb_table_data_close), dataw);
scroll = gtk_scrolled_window_new(NULL,NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_widget_show (scroll);
gtk_container_add(GTK_CONTAINER(dataw->window), scroll);
/* read table */
table = mdb_read_table(entry);
mdb_read_columns(table);
mdb_rewind_table(table);
clist = gtk_clist_new(table->num_cols);
gtk_widget_show(clist);
gtk_container_add(GTK_CONTAINER(scroll),clist);
for (i=0;i<table->num_cols;i++) {
/* bind columns */
bound_data[i] = (char *) g_malloc0(MDB_BIND_SIZE);
mdb_bind_column(table, i+1, bound_data[i], NULL);
/* display column titles */
col=g_ptr_array_index(table->columns,i);
gtk_clist_set_column_title(GTK_CLIST(clist), i, col->name);
}
gtk_clist_column_titles_show(GTK_CLIST(clist));
/* fetch those rows! */
while(mdb_fetch_row(table)) {
rownum = gtk_clist_append(GTK_CLIST(clist), bound_data);
}
/* free the memory used to bind */
for (i=0;i<table->num_cols;i++) {
g_free(bound_data[i]);
}
/* add this one to the window list */
window_list = g_list_append(window_list, dataw);
return dataw->window;
}

View File

@@ -1,124 +0,0 @@
#include "gmdb.h"
#include "gtkhlist.h"
#include "pk.xpm"
extern GtkWidget *app;
extern MdbHandle *mdb;
extern char *mdb_access_types[];
typedef struct GMdbDefWindow {
gchar table_name[MDB_MAX_OBJ_NAME];
GtkWidget *window;
} GMdbDefWindow;
static GList *window_list;
/* callbacks */
gint
gmdb_table_def_close(GtkHList *hlist, GtkWidget *w, GMdbDefWindow *defw)
{
window_list = g_list_remove(window_list, defw);
g_free(defw);
return FALSE;
}
GtkWidget *
gmdb_table_def_new(MdbCatalogEntry *entry)
{
MdbTableDef *table;
MdbIndex *idx;
MdbColumn *col;
GtkWidget *clist;
GtkWidget *scroll;
GdkPixmap *pixmap;
GdkBitmap *mask;
int i,j;
gchar *titles[] = { "", "Column", "Name", "Type", "Size", "Allow Nulls" };
gchar *row[6];
GMdbDefWindow *defw;
/* do we have an active window for this object? if so raise it */
for (i=0;i<g_list_length(window_list);i++) {
defw = g_list_nth_data(window_list, i);
if (!strcmp(defw->table_name, entry->object_name)) {
gdk_window_raise (defw->window->window);
return defw->window;
}
}
defw = g_malloc(sizeof(GMdbDefWindow));
strcpy(defw->table_name, entry->object_name);
defw->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(defw->window), entry->object_name);
gtk_widget_set_usize(defw->window, 300,200);
gtk_widget_show(defw->window);
gtk_signal_connect (GTK_OBJECT (defw->window), "delete_event",
GTK_SIGNAL_FUNC (gmdb_table_def_close), defw);
scroll = gtk_scrolled_window_new(NULL,NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_widget_show (scroll);
gtk_container_add(GTK_CONTAINER(defw->window), scroll);
/* read table */
table = mdb_read_table(entry);
mdb_read_columns(table);
mdb_rewind_table(table);
clist = gtk_clist_new_with_titles(5, titles);
gtk_clist_set_column_width (GTK_CLIST(clist), 0, 20);
gtk_clist_set_column_width (GTK_CLIST(clist), 1, 35);
gtk_clist_set_column_width (GTK_CLIST(clist), 2, 80);
gtk_clist_set_column_width (GTK_CLIST(clist), 3, 60);
gtk_clist_set_column_width (GTK_CLIST(clist), 4, 30);
gtk_clist_set_column_width (GTK_CLIST(clist), 5, 30);
gtk_widget_show(clist);
gtk_container_add(GTK_CONTAINER(scroll),clist);
for (i=0;i<table->num_cols;i++) {
/* display column titles */
col=g_ptr_array_index(table->columns,i);
row[0] = (char *) g_malloc0(MDB_BIND_SIZE);
row[1] = (char *) g_malloc0(MDB_BIND_SIZE);
row[2] = (char *) g_malloc0(MDB_BIND_SIZE);
row[3] = (char *) g_malloc0(MDB_BIND_SIZE);
row[4] = (char *) g_malloc0(MDB_BIND_SIZE);
row[5] = (char *) g_malloc0(MDB_BIND_SIZE);
strcpy(row[0],"");
sprintf(row[1],"%d", col->col_num+1);
strcpy(row[2],col->name);
strcpy(row[3],mdb_access_types[col->col_type]);
sprintf(row[4],"%d",col->col_size);
if (col->is_fixed) {
strcpy(row[5],"No");
} else {
strcpy(row[5],"Yes");
}
gtk_clist_append(GTK_CLIST(clist), row);
}
pixmap = gdk_pixmap_colormap_create_from_xpm_d( NULL,
gtk_widget_get_colormap(app), &mask, NULL, pk_xpm);
mdb_read_indices(table);
for (i=0;i<table->num_idxs;i++) {
idx = g_ptr_array_index (table->indices, i);
if (idx->index_type==1) {
for (j=0;j<idx->num_keys;j++) {
gtk_clist_set_pixmap(GTK_CLIST(clist), idx->key_col_num[j]-1,0, pixmap, mask);
}
// } else {
//for (j=0;j<idx->num_keys;j++) {
//sprintf(tmpstr,"%s:%d",idx->name,j);
//gtk_clist_set_text(GTK_CLIST(clist), idx->key_col_num[j]-1,0, tmpstr);
//}
}
} /* for */
/* add this one to the window list */
window_list = g_list_append(window_list, defw);
return defw->window;
}

View File

@@ -1,259 +0,0 @@
#include "gmdb.h"
extern GtkWidget *app;
extern MdbHandle *mdb;
typedef struct GMdbTableExportDialog {
MdbCatalogEntry *entry;
GtkWidget *dialog;
GtkWidget *lineterm;
GtkWidget *colsep;
GtkWidget *quote;
GtkWidget *quotechar;
GtkWidget *headers;
GtkWidget *filesel;
} GMdbTableExportDialog;
GMdbTableExportDialog *export;
#define COMMA "Comma (,)"
#define TAB "Tab"
#define SPACE "Space"
#define COLON "Colon (:)"
#define SEMICOLON "Semicolon (;)"
#define PIPE "Pipe (|)"
#define LF "Unix (linefeed only)"
#define CR "Mac (carriage return only)"
#define CRLF "Windows (CR + LF)"
#define ALWAYS "Always"
#define NEVER "Never"
#define AUTOMAT "Automatic (where necessary)"
void
print_quote(FILE *outfile, int need_quote, char quotechar, char *colsep, char *str)
{
if (need_quote==1) {
fprintf(outfile, "%c", quotechar);
} else if (need_quote==-1) {
if (strstr(str,colsep)) {
fprintf(outfile, "%c", quotechar);
}
}
}
void
gmdb_export_file_cb(GtkWidget *selector, GMdbTableExportDialog *export)
{
gchar *file_path;
FILE *outfile;
gchar *bound_data[256];
MdbTableDef *table;
MdbColumn *col;
int i;
int need_headers = 0;
int need_quote = 0;
gchar delimiter[11];
gchar quotechar;
gchar lineterm[5];
gchar *str;
int rows=0;
char msg[100];
str = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(export->colsep)->entry));
if (!strcmp(str,COMMA)) { strcpy(delimiter, ","); }
else if (!strcmp(str,TAB)) { strcpy(delimiter, "\t"); }
else if (!strcmp(str,SPACE)) { strcpy(delimiter, " "); }
else if (!strcmp(str,COLON)) { strcpy(delimiter, ":"); }
else if (!strcmp(str,SEMICOLON)) { strcpy(delimiter, ";"); }
else if (!strcmp(str,PIPE)) { strcpy(delimiter, "|"); }
else {
strncpy(delimiter,str, 10);
delimiter[10]='\0';
}
str = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(export->lineterm)->entry));
if (!strcmp(str,LF)) { strcpy(lineterm, "\n"); }
else if (!strcmp(str,CR)) { strcpy(lineterm, "\r"); }
else if (!strcmp(str,CRLF)) { strcpy(lineterm, "\r\n"); }
str = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(export->quote)->entry));
if (!strcmp(str,ALWAYS)) { need_quote = 1; }
else if (!strcmp(str,NEVER)) { need_quote = 0; }
else if (!strcmp(str,AUTOMAT)) { need_quote = -1; }
str = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(export->quotechar)->entry));
quotechar = str[0];
/* headers */
str = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(export->headers)->entry));
if (str && str[0]=='Y') need_headers = 1;
file_path = gtk_file_selection_get_filename (GTK_FILE_SELECTION(export->filesel));
// printf("file path %s\n",file_path);
if ((outfile=fopen(file_path, "w"))==NULL) {
gmdb_info_msg("Unable to Open File!");
return;
}
/* read table */
table = mdb_read_table(export->entry);
mdb_read_columns(table);
mdb_rewind_table(table);
for (i=0;i<table->num_cols;i++) {
/* bind columns */
bound_data[i] = (char *) g_malloc0(MDB_BIND_SIZE);
mdb_bind_column(table, i+1, bound_data[i], NULL);
/* display column titles */
col=g_ptr_array_index(table->columns,i);
if (need_headers) {
if (i>0) fprintf(outfile,delimiter);
print_quote(outfile, need_quote, quotechar, delimiter, col->name);
fprintf(outfile,"%s", col->name);
print_quote(outfile, need_quote, quotechar, delimiter, col->name);
}
}
if (need_headers) fprintf(outfile,lineterm);
/* fetch those rows! */
while(mdb_fetch_row(table)) {
for (i=0;i<table->num_cols;i++) {
if (i>0) fprintf(outfile,delimiter);
print_quote(outfile, need_quote, quotechar, delimiter, bound_data[i]);
fprintf(outfile,"%s", bound_data[i]);
print_quote(outfile, need_quote, quotechar, delimiter, bound_data[i]);
}
fprintf(outfile,lineterm);
rows++;
}
/* free the memory used to bind */
for (i=0;i<table->num_cols;i++) {
g_free(bound_data[i]);
}
fclose(outfile);
gtk_widget_destroy(export->dialog);
sprintf(msg,"%d Rows exported successfully.\n", rows);
gmdb_info_msg(msg);
}
void
gmdb_export_button_cb(GtkWidget *w, GMdbTableExportDialog *export)
{
/* just print a string so that we know we got there */
export->filesel = gtk_file_selection_new("Please choose a filename.");
gtk_signal_connect (
GTK_OBJECT (GTK_FILE_SELECTION(export->filesel)->ok_button),
"clicked", GTK_SIGNAL_FUNC (gmdb_export_file_cb), export);
gtk_signal_connect_object ( GTK_OBJECT (
GTK_FILE_SELECTION(export->filesel)->ok_button),
"clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy),
(gpointer) export->filesel);
gtk_signal_connect_object (
GTK_OBJECT (GTK_FILE_SELECTION(export->filesel)->cancel_button),
"clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy),
(gpointer) export->filesel);
gtk_widget_show (export->filesel);
}
GtkWidget *
gmdb_export_add_combo(GtkWidget *table, int row, gchar *text, GList *strings)
{
GtkWidget *combo;
GtkWidget *label;
label = gtk_label_new(text);
gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_RIGHT);
gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row + 1,
GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 0);
gtk_widget_show(label);
combo = gtk_combo_new();
gtk_combo_set_popdown_strings(GTK_COMBO(combo), strings);
gtk_table_attach(GTK_TABLE(table), combo, 1, 2, row, row + 1,
GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 0);
gtk_widget_show(combo);
return combo;
}
void gmdb_table_export(MdbCatalogEntry *entry) {
GtkWidget *export_button;
GtkWidget *close_button;
GList *glist = NULL;
GtkWidget *table;
export = g_malloc(sizeof(GMdbTableExportDialog));
export->entry = entry;
/* Create the widgets */
export->dialog = gtk_dialog_new();
gtk_widget_set_uposition(export->dialog, 300, 300);
table = gtk_table_new(3,2,FALSE);
gtk_widget_show(table);
glist = g_list_append(glist, LF);
glist = g_list_append(glist, CR);
glist = g_list_append(glist, CRLF);
export->lineterm = gmdb_export_add_combo(table, 0, "Line Terminator:",glist);
g_list_free(glist);
gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(export->lineterm)->entry), FALSE);
glist = NULL;
glist = g_list_append(glist, COMMA);
glist = g_list_append(glist, TAB);
glist = g_list_append(glist, SPACE);
glist = g_list_append(glist, COLON);
glist = g_list_append(glist, SEMICOLON);
glist = g_list_append(glist, PIPE);
export->colsep = gmdb_export_add_combo(table, 1, "Column Separator:",glist);
g_list_free(glist);
glist = NULL;
glist = g_list_append(glist, ALWAYS);
glist = g_list_append(glist, NEVER);
glist = g_list_append(glist, AUTOMAT);
export->quote = gmdb_export_add_combo(table, 2, "Quotes:",glist);
g_list_free(glist);
gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(export->quote)->entry), FALSE);
glist = NULL;
glist = g_list_append(glist, "\"");
glist = g_list_append(glist, "'");
glist = g_list_append(glist, "`");
export->quotechar = gmdb_export_add_combo(table, 3, "Quote Character:",glist);
g_list_free(glist);
glist = NULL;
glist = g_list_append(glist, "Yes");
glist = g_list_append(glist, "No");
export->headers = gmdb_export_add_combo(table, 4, "Include Headers:",glist);
g_list_free(glist);
gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(export->headers)->entry), FALSE);
export_button = gtk_button_new_with_label("Export");
gtk_signal_connect ( GTK_OBJECT (export_button),
"clicked", GTK_SIGNAL_FUNC (gmdb_export_button_cb), export);
gtk_container_add (GTK_CONTAINER (GTK_DIALOG(export->dialog)->action_area),
export_button);
close_button = gtk_button_new_with_label("Cancel");
gtk_signal_connect_object (GTK_OBJECT (close_button), "clicked",
GTK_SIGNAL_FUNC (gtk_widget_destroy), GTK_OBJECT(export->dialog));
gtk_container_add (GTK_CONTAINER (GTK_DIALOG(export->dialog)->action_area),
close_button);
/* Add the table, and show everything we've added to the dialog. */
gtk_container_add (GTK_CONTAINER (GTK_DIALOG(export->dialog)->vbox), table);
gtk_widget_show_all (export->dialog);
}

View File

@@ -1,24 +0,0 @@
#include "gmdb.h"
void gmdb_info_msg(gchar *message) {
GtkWidget *dialog, *label, *okay_button;
/* Create the widgets */
dialog = gtk_dialog_new();
gtk_widget_set_uposition(dialog, 300, 300);
label = gtk_label_new (message);
gtk_widget_set_usize(label, 250, 100);
okay_button = gtk_button_new_with_label("Okay");
/* Ensure that the dialog box is destroyed when the user clicks ok. */
gtk_signal_connect_object (GTK_OBJECT (okay_button), "clicked",
GTK_SIGNAL_FUNC (gtk_widget_destroy), dialog);
gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->action_area),
okay_button);
/* Add the label, and show everything we've added to the dialog. */
gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), label);
gtk_widget_show_all (dialog);
}