diff options
| author | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2017-04-29 12:11:08 +0200 | 
|---|---|---|
| committer | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2017-04-29 12:11:08 +0200 | 
| commit | 16e9630b79f0a7a90c6cedb6781175bb8b337dc1 (patch) | |
| tree | e1b09d277dec2057e6b995ec099dd2b1f2129b35 /app/wlib/gtklib/gtkmisc.c | |
| parent | 09795a01ef859f072920de9df974d1b03b9ab9a4 (diff) | |
New upstream version 4.3.0upstream/4.3.0
Diffstat (limited to 'app/wlib/gtklib/gtkmisc.c')
| -rw-r--r-- | app/wlib/gtklib/gtkmisc.c | 1210 | 
1 files changed, 0 insertions, 1210 deletions
diff --git a/app/wlib/gtklib/gtkmisc.c b/app/wlib/gtklib/gtkmisc.c deleted file mode 100644 index acc123a..0000000 --- a/app/wlib/gtklib/gtkmisc.c +++ /dev/null @@ -1,1210 +0,0 @@ -/* - * $Header: /home/dmarkle/xtrkcad-fork-cvs/xtrkcad/app/wlib/gtklib/gtkmisc.c,v 1.15 2009-10-03 04:49:01 dspagnol Exp $ - */ - -/*  XTrkCad - Model Railroad CAD - *  Copyright (C) 2005 Dave Bullis - * - *  This program is free software; you can redistribute it and/or modify - *  it under the terms of the GNU General Public License as published by - *  the Free Software Foundation; either version 2 of the License, or - *  (at your option) any later version. - * - *  This program 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 General Public License for more details. - * - *  You should have received a copy of the GNU General Public License - *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#include <stdio.h> -#include <stdlib.h> -#include <dirent.h> -#include <sys/time.h> -#include <signal.h> -#include <unistd.h> -#include <string.h> -#include <locale.h> - -#include <gtk/gtk.h> -#include <gdk/gdk.h> -#include <gdk/gdkkeysyms.h> - -#include "gtkint.h" -#include "i18n.h" - -wWin_p gtkMainW; - -long debugWindow = 0; - -char wAppName[256]; -char wConfigName[ 256 ]; - -#define FOUR		(4) -#ifndef GTK1 -#define MENUH		(24) -#else -#define MENUH		(24) -#endif -#define LABEL_OFFSET	(3) -		 -const char * wNames[] = { -		"MAIN", -		"POPUP", -		"BUTT", -		"CANCEL", -		"POPUP", -		"TEXT", -		"INTEGER", -		"FLOAT", -		"LIST", -		"DROPLIST", -		"COMBOLIST", -		"RADIO", -		"TOGGLE", -		"DRAW", -		"MENU" -		"MULTITEXT", -		"MESSAGE", -		"LINES", -		"MENUITEM", -		"BOX" -		}; - -static struct timeval startTime; - -static wBool_t reverseIcon = -#if defined(linux) -				FALSE; -#else -				TRUE; -#endif - -char gtkAccelChar; - - -/* - ***************************************************************************** - * - * Internal Utility functions - * - ***************************************************************************** - */ - -unsigned char gtkBitrotate( -		char v ) -{ -	unsigned char r = 0; -	int i; -	static unsigned char bits[] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 }; -	for (i=0;i<8;i++) -		if (v & bits[i]) -			r |= bits[7-i]; -	return r; -} - -GdkPixmap* gtkMakeIcon( -		GtkWidget * widget, -		wIcon_p ip, -		GdkBitmap ** mask ) -{ -	GdkPixmap * pixmap; -	char ** pixmapData; -	char * oldline1; -	static char newline1[] = " \tc None s None"; -	char line0[40]; -	char line2[40]; -	int row,col,wb; -	long rgb; -	const char * bits; -	GdkColor *transparent; -	 -	transparent = >k_widget_get_style( gtkMainW->gtkwin )->bg[GTK_WIDGET_STATE( gtkMainW->gtkwin )]; -	 -	if ( ip->gtkIconType == gtkIcon_pixmap ) { -		pixmap = gdk_pixmap_create_from_xpm_d( gtkMainW->gtkwin->window, mask, transparent, (char**)ip->bits ); -	} -	else { -		wb = (ip->w+7)/8; -		pixmapData = (char**)malloc( (3+ip->h) * sizeof *pixmapData ); -		pixmapData[0] = line0; -		rgb = wDrawGetRGB(ip->color); -		sprintf( line0, " %d %d 2 1", ip->w, ip->h ); -		sprintf( line2, "# c #%2.2lx%2.2lx%2.2lx", (rgb>>16)&0xFF, (rgb>>8)&0xFF, rgb&0xFF ); -		pixmapData[1] = ". c None s None"; -		pixmapData[2] = line2; -		bits = ip->bits; -		for (row = 0; row<ip->h; row++ ) { -			pixmapData[row+3] = (char*)malloc( (ip->w+1) * sizeof **pixmapData ); -			for (col = 0; col<ip->w; col++ ) { -				if ( bits[ row*wb+(col>>3) ] & (1<<(col&07)) ) { -					pixmapData[row+3][col] = '#'; -				} else { -					pixmapData[row+3][col] = '.'; -				} -			} -			pixmapData[row+3][ip->w] = 0; -		} -		pixmap = gdk_pixmap_create_from_xpm_d( gtkMainW->gtkwin->window, mask, transparent, pixmapData ); -		for (row = 0; row<ip->h; row++ ) { -			free( pixmapData[row+3] ); -		} -	} -	return pixmap; -} - - -int gtkAddLabel( wControl_p b, const char * labelStr ) -{ -	GtkRequisition requisition; -	if (labelStr == NULL) -		return 0; -	b->label = gtk_label_new(gtkConvertInput(labelStr)); -	gtk_widget_size_request( b->label, &requisition ); -	gtk_container_add( GTK_CONTAINER(b->parent->widget), b->label ); -#ifndef GTK1 -	gtk_fixed_move( GTK_FIXED(b->parent->widget), b->label, b->realX-requisition.width-8, b->realY+LABEL_OFFSET ); -#else -	gtk_widget_set_uposition( b->label, b->realX-requisition.width-8, b->realY+LABEL_OFFSET ); -#endif -	gtk_widget_show( b->label ); -	return requisition.width+8; -} - - -void * gtkAlloc( -		wWin_p parent, -		wType_e type, -		wPos_t origX, -		wPos_t origY, -		const char * labelStr, -		int size, -		void * data ) -{ -	wControl_p w = (wControl_p)malloc( size ); -	char * cp; -	memset( w, 0, size ); -	if (w == NULL) -		abort(); -	w->type = type; -	w->parent = parent; -	w->origX = origX; -	w->origY = origY; -	gtkAccelChar = 0; -	if (labelStr) { -		cp = (char*)malloc(strlen(labelStr)+1); -		w->labelStr = cp; -		for ( ; *labelStr; labelStr++ ) -			if ( *labelStr != '&' ) -				*cp++ = *labelStr; -			else { -/*				*cp++ = '_'; -				gtkAccelChar = labelStr[1]; */ -			}	 -		*cp = 0; -	} -	w->doneProc = NULL; -	w->data = data; -	return w; -} - - -void gtkComputePos( -		wControl_p b ) -{ -	wWin_p w = b->parent; - -	if (b->origX >= 0)  -		b->realX = b->origX; -	else -		b->realX = w->lastX + (-b->origX) - 1; -	if (b->origY >= 0)  -		b->realY = b->origY + FOUR + ((w->option&F_MENUBAR)?MENUH:0); -	else -		b->realY = w->lastY + (-b->origY) - 1; -} - - -void gtkControlGetSize( -		wControl_p b ) -{ -	GtkRequisition requisition; -	gtk_widget_size_request( b->widget, &requisition ); -	b->w = requisition.width; -	b->h = requisition.height; -} -	 - -void gtkAddButton( -		wControl_p b ) -{ -	wWin_p win = b->parent; -	wBool_t resize = FALSE; -	if (win->first == NULL) { -		win->first = b; -	} else { -		win->last->next = b; -	} -	win->last = b; -	b->next = NULL; -	b->parent = win; -	win->lastX = b->realX + b->w; -	win->lastY = b->realY + b->h; -	if (win->option&F_AUTOSIZE) { -		if (win->lastX > win->realX) { -			win->realX = win->lastX; -			if (win->w != (win->realX + win->origX)) { -				resize = TRUE; -				win->w = (win->realX + win->origX); -			} -		} -		if (win->lastY > win->realY) { -			win->realY = win->lastY; -			if (win->h != (win->realY + win->origY)) { -			resize = TRUE; -				win->h = (win->realY + win->origY); -			} -		} -		if (win->shown) { -			if ( resize ) { -#ifndef GTK1 -				gtk_widget_set_size_request( win->gtkwin, win->w, win->h ); -				gtk_widget_set_size_request( win->widget, win->w, win->h ); -#else -				gtk_widget_set_usize( win->gtkwin, win->w, win->h ); -				gtk_widget_set_usize( win->widget, win->w, win->h ); -#endif -			} -		} -	} -} - - -void gtkSetReadonly( wControl_p b, wBool_t ro ) -{ -	if (ro) -		b->option |= BO_READONLY; -	else -		b->option &= ~BO_READONLY; -} - - -wControl_p gtkGetControlFromPos( -		wWin_p win, -		wPos_t x, -		wPos_t y ) -{ -	wControl_p b; -	wPos_t xx, yy; -	for (b=win->first; b != NULL; b = b->next) { -		if ( b->widget && GTK_WIDGET_VISIBLE(b->widget) ) { -			xx = b->realX; -			yy = b->realY; -			if ( xx <= x && x < xx+b->w && -				 yy <= y && y < yy+b->h ) { -				return b; -			} -		} -	} -	return NULL; -} - -/* \brief Convert label string from Windows mnemonic to GTK - * - * The first occurence of '&' in the passed string is changed to '_' - * - * \param label the string to convert - * \return pointer to modified string, has to be free'd after usage - * - */ -static  -char * gtkChgMnemonic( char *label ) -{ -	char *ptr; -	char *cp; -	 -	cp = strdup( label ); -	 -	ptr = strchr( cp, '&' ); -	if( ptr ) -		*ptr = '_'; -		 -	return( cp );	 -} - - -/* - ***************************************************************************** - * - * Exported Utility Functions  - * - ***************************************************************************** - */ - -EXPORT void wBeep( -		void ) -/* -Beep! -*/ -{ -	gdk_display_beep(gdk_display_get_default()); -} - -typedef struct { -		GtkWidget * win; -		GtkWidget * label; -		GtkWidget * butt[3]; -		} notice_win; -static notice_win noticeW; -static long noticeValue; - -static void doNotice( -		GtkWidget * widget, -		long value ) -{ -	noticeValue = value; -	gtk_widget_destroy( noticeW.win ); -	gtkDoModal( NULL, FALSE ); -} - -/** - * Show a notification window with a yes/no reply and an icon. - * - * \param type IN type of message: Information, Warning, Error - * \param msg  IN message to display - * \param yes  IN text for accept button - * \param no   IN text for cancel button - * \return    True when accept was selected, false otherwise - */ - -int wNoticeEx( int type,  -       		const char * msg, -       		const char * yes, -       		const char * no ) -{ -	 -	int res; -	unsigned flag; -	char *headline; -	GtkWidget *dialog; -	GtkWindow *parent = GTK_WINDOW_TOPLEVEL; - -	switch( type ) { -		case NT_INFORMATION: -			flag = GTK_MESSAGE_INFO; -			headline = _("Information"); -			break; -		case NT_WARNING: -			flag = GTK_MESSAGE_WARNING; -			headline = _("Warning"); -			break; -		case NT_ERROR: -			flag = GTK_MESSAGE_ERROR; -			headline = _("Error"); -			break; -	} -	 -	if( gtkMainW ) -		parent = GTK_WINDOW( gtkMainW->gtkwin); -	 -	dialog = gtk_message_dialog_new( parent,   -					 GTK_DIALOG_DESTROY_WITH_PARENT, -					 flag, -      					 ((no==NULL)?GTK_BUTTONS_OK:GTK_BUTTONS_YES_NO), -					 "%s", msg ); -	gtk_window_set_title( GTK_WINDOW(dialog), headline ); -	   -	res = gtk_dialog_run( GTK_DIALOG(dialog)); -	gtk_widget_destroy( dialog ); -       -	return res == GTK_RESPONSE_OK  || res == GTK_RESPONSE_YES;  -} - - -EXPORT int wNotice( -		const char * msg,		/* Message */ -		const char * yes,		/* First button label */ -		const char * no )		/* Second label (or 'NULL') */ -/* -Popup up a notice box with one or two buttons. -When this notice box is displayed the application is paused and -will not response to other actions. - -Pushing the first button returns 'TRUE'. -Pushing the second button (if present) returns 'FALSE'. -*/ -{ -	return wNotice3( msg, yes, no, NULL ); -} - -/** \brief Popup a notice box with three buttons. - * - * Popup up a notice box with three buttons. - * When this notice box is displayed the application is paused and - * will not response to other actions. - * - * Pushing the first button returns 1 - * Pushing the second button returns 0 - * Pushing the third button returns -1 - * - * \param msg Text to display in message box - * \param yes First button label - * \param no  Second label (or 'NULL') - * \param cancel Third button label (or 'NULL')  - * - * \returns 1, 0 or -1 - */ -  -EXPORT int wNotice3( -		const char * msg,		/* Message */ -		const char * affirmative,		/* First button label */ -		const char * cancel,		/* Second label (or 'NULL') */ -		const char * alternate ) -{ -	notice_win *nw; -	GtkWidget * vbox; -	GtkWidget * hbox; -	GtkWidget * hbox1; -	GtkWidget * image; -	nw = ¬iceW; -	 -	char *aff = NULL; -	char *can = NULL; -	char *alt = NULL; -	 -#ifndef GTK1 -		nw->win = gtk_window_new( GTK_WINDOW_TOPLEVEL ); -		/*gtk_window_set_decorated( GTK_WINDOW(nw->win), FALSE );*/ -#else -		nw->win = gtk_window_new( GTK_WINDOW_DIALOG ); -#endif -	gtk_window_position( GTK_WINDOW(nw->win), GTK_WIN_POS_CENTER ); -	gtk_container_set_border_width (GTK_CONTAINER (nw->win), 0); -	gtk_window_set_resizable (GTK_WINDOW (nw->win), FALSE); -	gtk_window_set_modal (GTK_WINDOW (nw->win), TRUE); -	gtk_window_set_type_hint (GTK_WINDOW (nw->win), GDK_WINDOW_TYPE_HINT_DIALOG); -		 -	vbox = gtk_vbox_new( FALSE, 12 ); -	gtk_widget_show( vbox ); -	gtk_container_add( GTK_CONTAINER(nw->win), vbox ); -	gtk_container_set_border_width (GTK_CONTAINER (vbox), 12); -		 -	hbox = gtk_hbox_new( FALSE, 12 ); -	gtk_box_pack_start( GTK_BOX(vbox), hbox, TRUE, TRUE, 0 ); -	gtk_widget_show(hbox); - - 	image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_DIALOG); -  gtk_widget_show (image); -  gtk_box_pack_start (GTK_BOX (hbox), image, TRUE, TRUE, 0); -  gtk_misc_set_alignment (GTK_MISC (image), 0, 0); - -	/* create the text label, allow GTK to wrap and allow for markup (for future enhancements) */ -	nw->label = gtk_label_new(msg); -	gtk_widget_show( nw->label ); -	gtk_box_pack_end (GTK_BOX (hbox), nw->label, TRUE, TRUE, 0); -	gtk_label_set_use_markup (GTK_LABEL (nw->label), FALSE); -	gtk_label_set_line_wrap (GTK_LABEL (nw->label), TRUE); -	gtk_misc_set_alignment (GTK_MISC (nw->label), 0, 0); - -	/* this hbox will include the button bar */ -	hbox1 = gtk_hbox_new (TRUE, 0); -	gtk_widget_show (hbox1); -  gtk_box_pack_start (GTK_BOX (vbox), hbox1, FALSE, TRUE, 0); - -	/* add the respective buttons */ -	aff = gtkChgMnemonic( (char *) affirmative); -	nw->butt[ 0 ] = gtk_button_new_with_mnemonic (aff); -	gtk_widget_show (nw->butt[ 0 ]); -	gtk_box_pack_end (GTK_BOX (hbox1), nw->butt[ 0 ], TRUE, TRUE, 0); - 	gtk_container_set_border_width (GTK_CONTAINER (nw->butt[ 0 ]), 3); -	gtk_signal_connect( GTK_OBJECT(nw->butt[0]), "clicked", GTK_SIGNAL_FUNC(doNotice), (void*)1 ); -  GTK_WIDGET_SET_FLAGS (nw->butt[ 0 ], GTK_CAN_DEFAULT); - -	if( cancel ) { -		can = gtkChgMnemonic( (char *) cancel); -		nw->butt[ 1 ] = gtk_button_new_with_mnemonic (can); - 		gtk_widget_show (nw->butt[ 1 ]); -  	gtk_box_pack_end (GTK_BOX (hbox1), nw->butt[ 1 ], TRUE, TRUE, 0); -	  gtk_container_set_border_width (GTK_CONTAINER (nw->butt[ 1 ]), 3); -		gtk_signal_connect( GTK_OBJECT(nw->butt[1]), "clicked", GTK_SIGNAL_FUNC(doNotice), (void*)0 ); -	  GTK_WIDGET_SET_FLAGS (nw->butt[ 1 ], GTK_CAN_DEFAULT); - -		if( alternate ) { -			alt = gtkChgMnemonic( (char *) alternate); -			nw->butt[ 2 ] = gtk_button_new_with_mnemonic (alt); -			gtk_widget_show (nw->butt[ 2 ]); -			gtk_box_pack_start (GTK_BOX (hbox1), nw->butt[ 2 ], TRUE, TRUE, 0); -			gtk_container_set_border_width (GTK_CONTAINER (nw->butt[ 2 ]), 3); -			gtk_signal_connect( GTK_OBJECT(nw->butt[2]), "clicked", GTK_SIGNAL_FUNC(doNotice), (void*)-1 ); -		  GTK_WIDGET_SET_FLAGS (nw->butt[ 2 ], GTK_CAN_DEFAULT); - 		} -	}	 - -  gtk_widget_grab_default (nw->butt[ 0 ]); -  gtk_widget_grab_focus (nw->butt[ 0 ]); - -	gtk_widget_show( nw->win ); - -	if ( gtkMainW ) { -		gtk_window_set_transient_for( GTK_WINDOW(nw->win), GTK_WINDOW( gtkMainW->gtkwin) ); -/*		gdk_window_set_group( nw->win->window, gtkMainW->gtkwin->window ); */ -	} -	gtkDoModal( NULL, TRUE ); -	 -	if( aff ) -		free( aff ); -		 -	if( can ) -		free( can ); -		 -	if( alt ) -		free( alt );		 -		 -	return noticeValue; -} - - -EXPORT void wFlush( -		void ) -/* -Flushs all commands to the Window. -*/ -{ -	while ( gtk_events_pending() ) -		gtk_main_iteration(); - -	gdk_display_sync(gdk_display_get_default()); -} - - -void wWinTop( wWin_p win ) -{ -} - - -void wSetCursor( wCursor_t cursor ) -{ -} - - -const char * wMemStats( void ) -{ -#ifdef LATER -	static char msg[80]; -	struct mstats stats; -	stats = mstats(); -	sprintf( msg, "Total %d, used %d(%d), free %d(%d)", -				stats.bytes_total, -				stats.bytes_used, stats.chunks_used, -				stats.bytes_free, stats.chunks_free ); -	return msg; -#else -	return "No stats available"; -#endif -} - - -wBool_t wCheckExecutable( void ) -{ -	return TRUE; -} - - -void wGetDisplaySize( wPos_t * w, wPos_t * h ) -{ - -	*w = gdk_screen_width(); -	*h = gdk_screen_height(); -} - - -wIcon_p wIconCreateBitMap( wPos_t w, wPos_t h, const char * bits, wDrawColor color ) -{ -	wIcon_p ip; -	ip = (wIcon_p)malloc( sizeof *ip ); -	ip->gtkIconType = gtkIcon_bitmap; -	ip->w = w; -	ip->h = h; -	ip->color = color; -	ip->bits = bits; -	return ip; -} - -wIcon_p wIconCreatePixMap( char *pm[] ) -{ -	wIcon_p ip; -	ip = (wIcon_p)malloc( sizeof *ip ); -	ip->gtkIconType = gtkIcon_pixmap; -	ip->w = 0; -	ip->h = 0; -	ip->color = 0; -	ip->bits = pm; -	return ip; -} - - -void wIconSetColor( wIcon_p ip, wDrawColor color ) -{ -	ip->color = color; -} - -void wConvertToCharSet( char * buffPtr, int buffMax ) -{ -} - - -void wConvertFromCharSet( char * buffPtr, int buffMax ) -{ -} - -static dynArr_t conversionBuffer_da; -#define convesionBuffer(N) DYNARR_N( char, conversionBuffer_da, N ) - -char * gtkConvertInput( const char * inString ) -{ -#ifndef GTK1 -	const char * cp; -	char * cq; -	int extCharCnt, inCharCnt; - -	/* Already UTF-8 encoded? */ -	if (g_utf8_validate(inString, -1, NULL)) -		/* Yes, do not double-convert */ -		return (char*)inString; -#ifdef VERBOSE -	fprintf(stderr, "gtkConvertInput(%s): Invalid UTF-8, converting...\n", inString); -#endif - -	for ( cp=inString, extCharCnt=0; *cp; cp++ ) { -		if ( ((*cp)&0x80) != 0 ) -			extCharCnt++; -	} -	inCharCnt = cp-inString; -	if ( extCharCnt == 0 ) -		return (char*)inString; -	DYNARR_SET( char, conversionBuffer_da, inCharCnt+extCharCnt+1 ); -	for ( cp=inString, cq=(char*)conversionBuffer_da.ptr; *cp; cp++ ) { -		if ( ((*cp)&0x80) != 0 ) { -			*cq++ = 0xC0+(((*cp)&0xC0)>>6); -			*cq++ = 0x80+((*cp)&0x3F); -		} else { -			*cq++ = *cp; -		} -	} -	*cq = 0; -	return (char*)conversionBuffer_da.ptr; -#else -	return (char*)inString; -#endif -} - - -char * gtkConvertOutput( const char * inString ) -{ -#ifndef GTK1 -	const char * cp; -	char * cq; -	int extCharCnt, inCharCnt; -	for ( cp=inString, extCharCnt=0; *cp; cp++ ) { -		if ( ((*cp)&0xC0) == 0x80 ) -			extCharCnt++; -	} -	inCharCnt = cp-inString; -	if ( extCharCnt == 0 ) -		return (char*)inString; -	DYNARR_SET( char, conversionBuffer_da, inCharCnt+1 ); -	for ( cp=inString, cq=(char*)conversionBuffer_da.ptr; *cp; cp++ ) { -		if ( ((*cp)&0x80) != 0 ) { -			*cq++ = 0xC0+(((*cp)&0xC0)>>6); -			*cq++ = 0x80+((*cp)&0x3F); -		} else { -			*cq++ = *cp; -		} -	} -	*cq = 0; -	return (char*)conversionBuffer_da.ptr; -#else -	return (char*)inString; -#endif -} - -/*-----------------------------------------------------------------*/ - -typedef struct accelData_t { -		wAccelKey_e key; -		int modifier; -		wAccelKeyCallBack_p action; -		void * data; -		} accelData_t; -static dynArr_t accelData_da; -#define accelData(N) DYNARR_N( accelData_t, accelData_da, N ) - - -static guint accelKeyMap[] = { -			0,			/* wAccelKey_None, */ -			GDK_Delete,		/* wAccelKey_Del, */ -			GDK_Insert,		/* wAccelKey_Ins, */ -			GDK_Home,		/* wAccelKey_Home, */ -			GDK_End,		/* wAccelKey_End, */ -			GDK_Page_Up,	/* wAccelKey_Pgup, */ -			GDK_Page_Down,	/* wAccelKey_Pgdn, */ -			GDK_Up,		/* wAccelKey_Up, */ -			GDK_Down,		/* wAccelKey_Down, */ -			GDK_Right,		/* wAccelKey_Right, */ -			GDK_Left,		/* wAccelKey_Left, */ -			GDK_BackSpace,	/* wAccelKey_Back, */ -			GDK_F1,		/* wAccelKey_F1, */ -			GDK_F2,		/* wAccelKey_F2, */ -			GDK_F3,		/* wAccelKey_F3, */ -			GDK_F4,		/* wAccelKey_F4, */ -			GDK_F5,		/* wAccelKey_F5, */ -			GDK_F6,		/* wAccelKey_F6, */ -			GDK_F7,		/* wAccelKey_F7, */ -			GDK_F8,		/* wAccelKey_F8, */ -			GDK_F9,		/* wAccelKey_F9, */ -			GDK_F10,		/* wAccelKey_F10, */ -			GDK_F11,		/* wAccelKey_F11, */ -			GDK_F12		/* wAccelKey_F12, */ -		}; - - -EXPORT void wAttachAccelKey( -		wAccelKey_e key, -		int modifier, -		wAccelKeyCallBack_p action, -		void * data ) -{ -	accelData_t * ad; -	if ( key < 1 || key > wAccelKey_F12 ) { -		fprintf( stderr, "wAttachAccelKey(%d) out of range\n", (int)key ); -		return; -	} -	DYNARR_APPEND( accelData_t, accelData_da, 10 ); -	ad = &accelData(accelData_da.cnt-1); -	ad->key = key; -	ad->modifier = modifier; -	ad->action = action; -	ad->data = data; -} - - -EXPORT struct accelData_t * gtkFindAccelKey( -		GdkEventKey * event ) -{ -	accelData_t * ad; -	int modifier = 0; -	if ( ( event->state & GDK_SHIFT_MASK ) ) -		modifier |= WKEY_SHIFT; -	if ( ( event->state & GDK_CONTROL_MASK ) ) -		modifier |= WKEY_CTRL; -	if ( ( event->state & GDK_MOD1_MASK ) ) -		modifier |= WKEY_ALT; -	for ( ad=&accelData(0); ad<&accelData(accelData_da.cnt); ad++ ) -		if ( event->keyval == accelKeyMap[ad->key] && -			 modifier == ad->modifier ) -			return ad; -	return NULL; -} - - -EXPORT wBool_t gtkHandleAccelKey( -		GdkEventKey *event ) -{ -	accelData_t * ad = gtkFindAccelKey( event ); -	if ( ad ) { -		ad->action( ad->key, ad->data ); -		return TRUE; -	} -	return FALSE; -} - -/* - ***************************************************************************** - * - * Timer Functions  - * - ***************************************************************************** - */ - -static wBool_t gtkPaused = FALSE; -static int alarmTimer = 0; - -static gint doAlarm( -		gpointer data ) -{ -	wAlarmCallBack_p func = (wAlarmCallBack_p)data; -	if (alarmTimer) -		gtk_timeout_remove( alarmTimer ); -	func(); -	alarmTimer = 0; -	return 0; -} - - -EXPORT void wAlarm( -		long count, -		wAlarmCallBack_p func )		/* milliseconds */ -/* -Alarm for <count> milliseconds. -*/ -{ -	gtkPaused = TRUE; -	if (alarmTimer) -		gtk_timeout_remove( alarmTimer ); -	alarmTimer = gtk_timeout_add( count, doAlarm, (void *) (GtkFunction)func ); -} - - -static wControl_p triggerControl = NULL; -static setTriggerCallback_p triggerFunc = NULL; - -static void doTrigger( void ) -{ -	if (triggerControl && triggerFunc) { -		triggerFunc( triggerControl ); -		triggerFunc = NULL; -		triggerControl = NULL; -	} -} - -void gtkSetTrigger( -		wControl_p b, -		setTriggerCallback_p trigger ) -{ -	triggerControl = b; -	triggerFunc = trigger; -	wAlarm( 500, doTrigger ); -} - - -EXPORT void wPause( -		long count )		/* milliseconds */ -/* -Pause for <count> milliseconds. -*/ -{ -	struct timeval timeout; -	sigset_t signal_mask; -	sigset_t oldsignal_mask; -	 -	gdk_display_sync(gdk_display_get_default()); -	 -	timeout.tv_sec = count/1000; -	timeout.tv_usec = (count%1000)*1000; -	 -	sigemptyset( &signal_mask ); -	sigaddset( &signal_mask, SIGIO ); -	sigaddset( &signal_mask, SIGALRM );	 -	sigprocmask( SIG_BLOCK, &signal_mask, &oldsignal_mask ); -	 -	if (select( 0, NULL, NULL, NULL, &timeout ) == -1) { -		perror("wPause:select"); -	} -	sigprocmask( SIG_BLOCK, &oldsignal_mask, NULL ); -} - - -unsigned long wGetTimer( void ) -{ -	struct timeval tv; -	struct timezone tz; -	int rc; -	rc = gettimeofday( &tv, &tz ); -	return (tv.tv_sec-startTime.tv_sec+1) * 1000 + tv.tv_usec /1000; -} - - - -/** - * Add control to circular list of synonymous controls. Synonymous controls are kept in sync by  - * calling wControlLinkedActive for one member of the list  - * - * \param b1 IN  first control - * \param b2 IN  second control - * \return    none - */ -  -EXPORT void wControlLinkedSet( wControl_p b1, wControl_p b2 ) -{ -	 -	b2->synonym = b1->synonym; -	if( b2->synonym == NULL ) -		b2->synonym = b1; -		 -	b1->synonym = b2; -} 	 - -/** - * Activate/deactivate a group of synonymous controls. - * - * \param b IN  control - * \param active IN  state - * \return    none - */ -  - -EXPORT void wControlLinkedActive( wControl_p b, int active ) -{ -	wControl_p savePtr = b; - -	if( savePtr->type == B_MENUITEM ) -		wMenuPushEnable( (wMenuPush_p)savePtr, active ); -	else 	 -		wControlActive( savePtr, active );		 - -	savePtr = savePtr->synonym; - -	while( savePtr && savePtr != b ) {	 - -		if( savePtr->type == B_MENUITEM ) -			wMenuPushEnable( (wMenuPush_p)savePtr, active ); -		else 	 -			wControlActive( savePtr, active );		 - -		savePtr = savePtr->synonym; -	}	 -} - -/* - ***************************************************************************** - * - * Control Utilities - * - ***************************************************************************** - */ - -EXPORT void wControlShow( -		wControl_p b,		/* Control */ -		wBool_t show )		/* Command */ -/* -Cause the control <b> to be displayed or hidden. -Used to hide control (such as a list) while it is being updated. -*/ -{ -	if ( b->type == B_LINES ) { -		gtkLineShow( (wLine_p)b, show ); -		return; -	} -	if (b->widget == 0) abort(); -	if (show) { -		gtk_widget_show( b->widget ); -		if (b->label) -			gtk_widget_show( b->label ); -	} else { -		gtk_widget_hide( b->widget ); -		if (b->label) -			gtk_widget_hide( b->label ); -	} -} - -EXPORT void wControlActive( -		wControl_p b,		/* Control */ -		int active )		/* Command */ -/* -Cause the control <b> to be marked active or inactive. -Inactive controls donot respond to actions. -*/ -{ -	if (b->widget == 0) abort(); -	gtk_widget_set_sensitive( GTK_WIDGET(b->widget), active ); -} - - -EXPORT wPos_t wLabelWidth( -		const char * label )		/* Label */ -/* -Returns the width of <label>. -This is used for computing window layout. -Typically the width to the longest label is computed and used as -the X-position for <controls>. -*/ -{ -	GtkWidget * widget; -	GtkRequisition requisition; -	widget = gtk_label_new( gtkConvertInput(label) ); -	gtk_widget_size_request( widget, &requisition ); -	gtk_widget_destroy( widget ); -	return requisition.width+8; -} - - -EXPORT wPos_t wControlGetWidth( -		wControl_p b)		/* Control */ -{ -	return b->w; -} - - -EXPORT wPos_t wControlGetHeight( -		wControl_p b)		/* Control */ -{ -	return b->h; -} - - -EXPORT wPos_t wControlGetPosX( -		wControl_p b)		/* Control */ -{ -	return b->realX; -} - - -EXPORT wPos_t wControlGetPosY( -		wControl_p b)		/* Control */ -{ -	return b->realY - FOUR - ((b->parent->option&F_MENUBAR)?MENUH:0); -} - - -EXPORT void wControlSetPos( -		wControl_p b,		/* Control */ -		wPos_t x,		/* X-position */ -		wPos_t y )		/* Y-position */ -{ -	b->realX = x; -	b->realY = y + FOUR + ((b->parent->option&F_MENUBAR)?MENUH:0); -#ifndef GTK1 -	if (b->widget) -		gtk_fixed_move( GTK_FIXED(b->parent->widget), b->widget, b->realX, b->realY ); -	if (b->label) -		gtk_fixed_move( GTK_FIXED(b->parent->widget), b->label, b->realX-b->labelW, b->realY+LABEL_OFFSET ); -#else -	if (b->widget) -		gtk_widget_set_uposition( b->widget, b->realX, b->realY ); -	if (b->label) -		gtk_widget_set_uposition( b->label, b->realX-b->labelW, b->realY+LABEL_OFFSET ); -#endif -} - - -EXPORT void wControlSetLabel( -		wControl_p b, -		const char * labelStr ) -{ -	GtkRequisition requisition; -	if (b->label) { -		gtk_label_set( GTK_LABEL(b->label), gtkConvertInput(labelStr) ); -		gtk_widget_size_request( b->label, &requisition ); -		b->labelW = requisition.width+8; -#ifndef GTK1 -		gtk_fixed_move( GTK_FIXED(b->parent->widget), b->label, b->realX-b->labelW, b->realY+LABEL_OFFSET ); -#else -		gtk_widget_set_uposition( b->label, b->realX-b->labelW, b->realY+LABEL_OFFSET ); -#endif -	} else { -		b->labelW = gtkAddLabel( b, labelStr ); -	} -} - -EXPORT void wControlSetContext( -		wControl_p b, -		void * context ) -{ -	b->data = context; -} - - -EXPORT void wControlSetFocus( -		wControl_p b ) -{ -} - - -static int gtkControlHiliteWidth = 3; -EXPORT void wControlHilite( -		wControl_p b, -		wBool_t hilite ) -{ -	int off = gtkControlHiliteWidth/2+1; -	if ( b->parent->gc == NULL ) { -		b->parent->gc = gdk_gc_new( b->parent->gtkwin->window ); -		gdk_gc_copy( b->parent->gc, b->parent->gtkwin->style->base_gc[GTK_STATE_NORMAL] ); -		b->parent->gc_linewidth = 0; -		gdk_gc_set_line_attributes( b->parent->gc, b->parent->gc_linewidth, GDK_LINE_SOLID, GDK_CAP_BUTT, GDK_JOIN_MITER ); -	} -	if ( b->widget == NULL ) -		return; -	if ( ! GTK_WIDGET_VISIBLE( b->widget ) ) -		return; -	if ( ! GTK_WIDGET_VISIBLE( b->parent->widget ) ) -		return; -	gdk_gc_set_foreground( b->parent->gc, gtkGetColor( wDrawColorBlack, FALSE ) ); -	gdk_gc_set_function( b->parent->gc, GDK_XOR ); -	gdk_gc_set_line_attributes( b->parent->gc, gtkControlHiliteWidth, GDK_LINE_SOLID, GDK_CAP_BUTT, GDK_JOIN_MITER ); -	gdk_draw_line( b->parent->widget->window, b->parent->gc, -		b->realX - gtkControlHiliteWidth, -		b->realY - off, -		b->realX + b->w + gtkControlHiliteWidth, -		b->realY - off ); -	gdk_draw_line( b->parent->widget->window, b->parent->gc, -		b->realX - gtkControlHiliteWidth, -		b->realY + b->h + off - 1, -		b->realX + b->w + gtkControlHiliteWidth, -		b->realY + b->h + off - 1 ); -	gdk_draw_line( b->parent->widget->window, b->parent->gc, -		b->realX - off, -		b->realY, -		b->realX - off, -		b->realY + b->h ); -	gdk_draw_line( b->parent->widget->window, b->parent->gc, -		b->realX + b->w + off - 1, -		b->realY, -		b->realX + b->w + off - 1, -		b->realY + b->h ); -} - -/* - ******************************************************************************* - * - * Main - * - ******************************************************************************* - */ - -#ifdef GTK -static wBool_t wAbortOnErrors = FALSE; -#endif - -int do_rgb_init = 1; - -int main( int argc, char *argv[] ) -{ -	wWin_p win; -	wControl_p b; -	const char *ld, *hp; -	static char buff[BUFSIZ]; - -	if ( getenv( "GTKLIB_NOLOCALE" ) == 0 ) -		setlocale( LC_ALL, "en_US" ); -	gtk_init( &argc, &argv ); -	gettimeofday( &startTime, NULL ); - -	if ( getenv( "XVLIB_REVERSEICON" ) != 0 ) -		reverseIcon = !reverseIcon; - -	if ( do_rgb_init ) -		gdk_rgb_init();	/* before we try to draw */ - -	if ((win=wMain( argc, argv )) == (wWin_p)0) -		exit(1); - -	ld = wGetAppLibDir(); -	if (ld != NULL) { -		sprintf( buff, "HELPPATH=/usr/lib/help:%s:", ld ); -		if ( (hp = getenv("HELPPATH")) != NULL ) -			strcat( buff, hp ); -		putenv( buff ); -	} - -	if (!win->shown) -		wWinShow( win, TRUE ); -	for (b=win->first; b != NULL; b = b->next) { -		if (b->repaintProc) -			b->repaintProc( b ); -	} -	gtk_main(); -	exit(0); -}  | 
