mirror of
https://github.com/mdbtools/mdbtools.git
synced 2025-09-18 09:50:07 +08:00
Drop old gmdb from repository
This commit is contained in:
@@ -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
|
@@ -1,22 +0,0 @@
|
||||
/* XPM */
|
||||
static char * code_xpm[] = {
|
||||
"16 16 3 1",
|
||||
" c None",
|
||||
". c #000000",
|
||||
"+ c #777777",
|
||||
" ",
|
||||
" ",
|
||||
" .. ",
|
||||
" .++. ",
|
||||
" . . . ",
|
||||
" . .. ..",
|
||||
" . .+ +.",
|
||||
".... . .+ +. .",
|
||||
" . . .+. .",
|
||||
" . .+ +.+ +.",
|
||||
" . .. +. .+ ..",
|
||||
" . . . . . ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" "};
|
612
src/gmdb/debug.c
612
src/gmdb/debug.c
@@ -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));
|
||||
}
|
@@ -1,23 +0,0 @@
|
||||
/* XPM */
|
||||
static char * debug_xpm[] = {
|
||||
"16 16 4 1",
|
||||
" c None",
|
||||
". c #ED2D2D",
|
||||
"+ c #635757",
|
||||
"@ c #000000",
|
||||
" ",
|
||||
" ..... ",
|
||||
" ... ... ",
|
||||
" .. +@+ .. ",
|
||||
" .... @@@ .. ",
|
||||
" .@+..+@+ +@. ",
|
||||
".. @+..@@ +@ .. ",
|
||||
". @@..@@@ . ",
|
||||
". @@..@ . ",
|
||||
". @@@@@@..@@@ . ",
|
||||
".. @@@@.. .. ",
|
||||
" . @@@@@@.. . ",
|
||||
" ..@+ @@@ +... ",
|
||||
" .. .. ",
|
||||
" ... ... ",
|
||||
" ..... "};
|
@@ -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)
|
||||
{
|
||||
}
|
@@ -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 */
|
||||
}
|
@@ -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 "};
|
@@ -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
|
2824
src/gmdb/gtkhlist.c
2824
src/gmdb/gtkhlist.c
File diff suppressed because it is too large
Load Diff
@@ -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__ */
|
@@ -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;
|
||||
}
|
@@ -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 */
|
||||
}
|
@@ -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 /.<.[.}. "};
|
323
src/gmdb/main.c
323
src/gmdb/main.c
@@ -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;
|
||||
}
|
@@ -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 */
|
||||
}
|
@@ -1,24 +0,0 @@
|
||||
/* XPM */
|
||||
static char * pk_xpm[] = {
|
||||
"16 16 5 1",
|
||||
" c None",
|
||||
". c #FFBF00",
|
||||
"+ c #1C59DD",
|
||||
"@ c #000000",
|
||||
"# c #E8AC17",
|
||||
" ",
|
||||
" .... +++ ",
|
||||
" ..@@.. + + ",
|
||||
" ...... + + ",
|
||||
" ...... +++ ",
|
||||
" .... + ",
|
||||
" .# + ",
|
||||
" .# ",
|
||||
" .# + + ",
|
||||
" .#. + + ",
|
||||
" .#.. ++ ",
|
||||
" .# + + ",
|
||||
" .#. + + ",
|
||||
" .#.. + + ",
|
||||
" ",
|
||||
" "};
|
@@ -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 */
|
||||
}
|
@@ -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 "};
|
@@ -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 */
|
||||
}
|
@@ -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% ",
|
||||
" %%% "};
|
284
src/gmdb/sql.c
284
src/gmdb/sql.c
@@ -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
|
201
src/gmdb/table.c
201
src/gmdb/table.c
@@ -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 */
|
||||
}
|
@@ -1,19 +0,0 @@
|
||||
/* XPM */
|
||||
static char * table_xpm[] = {
|
||||
"10 12 4 1",
|
||||
" c None",
|
||||
". c #1874B1",
|
||||
"+ c #606060",
|
||||
"@ c #D7D2D2",
|
||||
"..........",
|
||||
"..........",
|
||||
"+@@+@@@+@+",
|
||||
"++++++++++",
|
||||
"+@@+@@@+@+",
|
||||
"++++++++++",
|
||||
"+@@+@@@+@+",
|
||||
"++++++++++",
|
||||
"+@@+@@@+@+",
|
||||
"++++++++++",
|
||||
"+@@+@@@+@+",
|
||||
"++++++++++"};
|
@@ -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;
|
||||
}
|
@@ -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;
|
||||
}
|
@@ -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);
|
||||
}
|
@@ -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);
|
||||
}
|
Reference in New Issue
Block a user