X-Git-Url: http://git.jankratochvil.net/?p=gnokii.git;a=blobdiff_plain;f=xgnokii%2Fxgnokii_logos.c;h=edbc4cef4102e23ce808b988a6be5ed11f999898;hp=61a6ae92143fdf1ce6bc1f539e3af3a44ac1cf5f;hb=49dd905279a8e62936e3713510ab0fd738e20ecb;hpb=2f2703c9133032c12671ca5c77ae626b8fb178d4 diff --git a/xgnokii/xgnokii_logos.c b/xgnokii/xgnokii_logos.c index 61a6ae9..edbc4ce 100644 --- a/xgnokii/xgnokii_logos.c +++ b/xgnokii/xgnokii_logos.c @@ -1,16 +1,47 @@ +/* + + $Id$ + + X G N O K I I + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + $Log$ + Revision 1.1.1.5 2002/04/03 00:08:33 short + Found in "gnokii-working" directory, some November-patches version + + Revision 1.9 2001/09/14 12:53:00 pkot + New preview logos. + Localization fixes. + Set valid operator on logos xgnokii screen. + + Revision 1.8 2001/05/24 20:47:31 chris + More updating of 7110 code and some of xgnokii_lowlevel changed over. + + Revision 1.7 2001/03/23 08:24:56 ja + New preview for 6210 in xgnokii's logos module. + + +*/ + +#include #include #include #include #include #include #include -#include #include "misc.h" #include "gsm-common.h" #include "gsm-api.h" +#include "cfgreader.h" #include "gsm-networks.h" -#include "files/gsm-filetypes.h" +#include "gsm-filetypes.h" #include "gsm-bitmaps.h" #include "xgnokii_logos.h" @@ -28,7 +59,10 @@ #include "xpm/New.xpm" #include "xpm/Send.xpm" +#include "xpm/SendSMS.xpm" #include "xpm/Read.xpm" +#include "xpm/Open.xpm" +#include "xpm/Save.xpm" #include "xpm/Edit_invert.xpm" #include "xpm/Edit_flip_horizontal.xpm" @@ -40,36 +74,37 @@ #include "xpm/Tool_filled_rectangle.xpm" extern GSM_Network GSM_Networks[]; +extern GSM_Statemachine xgnokii_statemachine; /* from xgnokii_lowlevel.c */ -static GtkWidget *GUI_LogosWindow; +GtkWidget *GUI_LogosWindow; -static ErrorDialog errorDialog = {NULL, NULL}; -static InfoDialog infoDialog = {NULL, NULL}; +ErrorDialog errorDialog = {NULL, NULL}; +InfoDialog infoDialog = {NULL, NULL}; /* stuff for drawingArea */ -static GtkWidget *drawingArea = NULL; -static GdkPixmap *drawingPixmap = NULL; -static GdkPixmap *greenPointPixmap, *blackPointPixmap; -static int drawingAreaWidth, drawingAreaHeight; /* in pixels */ -static int mouseButtonPushed = 0; +GtkWidget *drawingArea = NULL; +GdkPixmap *drawingPixmap = NULL; +GdkPixmap *greenPointPixmap, *blackPointPixmap; +int drawingAreaWidth, drawingAreaHeight; /* in pixels */ +int mouseButtonPushed = 0; /* stuff for previewArea */ -static GtkWidget *previewArea = NULL; -static GdkPixmap *previewPixmap = NULL; -static GdkPixmap *greenPixelPixmap; -static int previewPixmapWidth, previewPixmapHeight; -static int previewAvailable = 1, showPreviewErrorDialog = 1; -static int previewPixmapNumber = 0; +GtkWidget *previewArea = NULL; +GdkPixmap *previewPixmap = NULL; +GdkPixmap *greenPixelPixmap; +int previewPixmapWidth, previewPixmapHeight; +int previewAvailable = 1, showPreviewErrorDialog = 1; +int previewPixmapNumber = 0; -static GSM_Bitmap bitmap, oldBitmap; -static GSM_NetworkInfo networkInfo; +GSM_Bitmap bitmap, oldBitmap; +GSM_NetworkInfo networkInfo; /* widgets for toolbar - some, need global variables */ -static GtkWidget *buttonStartup, *buttonOperator, *buttonCaller, *buttonPicture; -static GtkWidget *networkCombo, *callerCombo; +GtkWidget *buttonStartup, *buttonOperator, *buttonCaller; +GtkWidget *networkCombo, *callerCombo; -static int activeTool = TOOL_BRUSH; -static int toolStartX, toolStartY, toolLastX, toolLastY; +int activeTool = TOOL_BRUSH; +int toolStartX, toolStartY, toolLastX, toolLastY; /* tools for drawing */ static GtkWidget *buttonBrush, *buttonLine, *buttonRectangle; @@ -212,6 +247,7 @@ GdkPixmap *GetPreviewPixmap (GtkWidget *widget) { pixmap = gdk_pixmap_create_from_xpm(widget->window,&mask, &widget->style->bg[GTK_STATE_NORMAL], file); + g_free(file); return pixmap; @@ -225,8 +261,7 @@ void SetPreviewPoint(GtkWidget *widget, int x, int y, int update) { if (!previewAvailable) return; /* there is difference between positiong of startupLogo and others */ - if (bitmap.type != GSM_StartupLogo && bitmap.type != GSM_7110StartupLogo && - bitmap.type != GSM_6210StartupLogo) { + if (bitmap.type != GSM_StartupLogo) { x += PREVIEWJUMPX; y += PREVIEWJUMPY; } @@ -253,8 +288,7 @@ void ClearPreviewPoint(GtkWidget *widget, int x, int y, int update) { if (!previewAvailable) return; /* there is difference between positiong of startupLogo and others */ - if (bitmap.type != GSM_StartupLogo && bitmap.type != GSM_7110StartupLogo && - bitmap.type != GSM_6210StartupLogo) { + if (bitmap.type != GSM_StartupLogo) { x += PREVIEWJUMPX; y += PREVIEWJUMPY; } @@ -282,7 +316,7 @@ int IsPoint(int x, int y) { } void SetPoint(GtkWidget *widget, int x, int y, int update) { - + /* difference between settings points in startupLogo and others */ GSM_SetPointBitmap(&bitmap,x,y); /* draw point to pixmap */ @@ -307,7 +341,7 @@ void SetPoint(GtkWidget *widget, int x, int y, int update) { } void ClearPoint(GtkWidget *widget, int x, int y, int update) { - + /* difference between settings points in startupLogo and others */ GSM_ClearPointBitmap(&bitmap,x,y); /* clear point from pixmap */ @@ -341,8 +375,7 @@ void UpdatePointsRectangle(GtkWidget *widget, int x1, int y1, int x2, int y2) { GdkRectangle updateRect; int x, y, dx = 0, dy = 0; - if (bitmap.type != GSM_StartupLogo && bitmap.type != GSM_7110StartupLogo && - bitmap.type != GSM_6210StartupLogo) { + if (bitmap.type != GSM_StartupLogo) { dx = PREVIEWJUMPX; dy = PREVIEWJUMPY; } @@ -411,9 +444,8 @@ void UpdatePreviewPoints (void) { int x, y, dx = 0, dy = 0; if (!previewPixmap || !previewAvailable) return; - - if (bitmap.type != GSM_StartupLogo && bitmap.type != GSM_7110StartupLogo && - bitmap.type != GSM_6210StartupLogo) { + + if (bitmap.type != GSM_StartupLogo) { dx = PREVIEWJUMPX; dy = PREVIEWJUMPY; } @@ -453,97 +485,81 @@ void ToolBrush(GtkWidget *widget, int column, int row, int button) { } /* TOOL - LINE */ -/* going to rewrite to Bresenham algorithm */ -static void ToolLineUpdate(GtkWidget *widget, int column, int row) { - double delta, y, x; - int i, x1, y1, x2, y2; - - if (abs(toolStartX-toolLastX) >= abs(toolStartY-toolLastY)) { - if (toolStartX > toolLastX) { - x1 = toolLastX; - x2 = toolStartX; - y1 = toolLastY; - y2 = toolStartY; - } else { - x1 = toolStartX; - x2 = toolLastX; - y1 = toolStartY; - y2 = toolLastY; - } - - delta = ((double)(y2-y1))/((double)(x2-x1)); - y = (double)y1; - for (i = x1;i <= x2;i++) { - if (!GSM_IsPointBitmap(&oldBitmap,i,(int)y)) ClearPoint(widget,i,(int)y,0); - y += delta; - } - } else { - if (toolStartY > toolLastY) { - x1 = toolLastX; - x2 = toolStartX; - y1 = toolLastY; - y2 = toolStartY; - } else { - x1 = toolStartX; - x2 = toolLastX; - y1 = toolStartY; - y2 = toolLastY; - } - delta = ((double)(x2-x1))/((double)(y2-y1)); - - x = (double)x1; - for (i = y1;i <= y2;i++) { - if (!GSM_IsPointBitmap(&oldBitmap,(int)x,i)) ClearPoint(widget,(int)x,i,0); - x += delta; - } - } - - if (abs(toolStartX-column) >= abs(toolStartY-row)) { - if (toolStartX > column) { - x1 = column; - x2 = toolStartX; - y1 = row; - y2 = toolStartY; - } else { - x1 = toolStartX; - x2 = column; - y1 = toolStartY; - y2 = row; - } - - delta = ((double)(y2-y1))/((double)(x2-x1)); - y = (double)y1; - for (i = x1;i <= x2;i++) { - SetPoint(widget,i,(int)y,0); - y += delta; - } - } else { - if (toolStartY > row) { - x1 = column; - x2 = toolStartX; - y1 = row; - y2 = toolStartY; - } else { - x1 = toolStartX; - x2 = column; - y1 = toolStartY; - y2 = row; - } - delta = ((double)(x2-x1))/((double)(y2-y1)); +/* this function clear or draw a line on the screen USED BY TOOLLINEUPDATE */ +void ToolLine(GtkWidget *widget, int x1, int y1, int x2, int y2, int draw) { + int udx, udy, dx, dy, error, loop, xadd, yadd; + + dx = x2 - x1; /* x delta */ + dy = y2 - y1; /* y delta */ + + udx = abs(dx); /* unsigned x delta */ + udy = abs(dy); /* unsigned y delta */ + + if (dx < 0) { xadd = -1; } else { xadd = 1; } /* set directions */ + if (dy < 0) { yadd = -1; } else { yadd = 1; } + + error = 0; + loop = 0; + if (udx > udy) { /* delta X > delta Y */ + do { + error += udy; + + if (error >= udx) { /* is time to move up or down? */ + error -= udx; + y1 += yadd; + } + loop++; + if (draw == 1) { + SetPoint(widget,x1,y1,0); + } else { + /* now clearing line before drawing new one, we must check */ + /* if there is a point in oldBitmap which saves bitmap before */ + /* we starting drawing new line */ + if (!GSM_IsPointBitmap(&oldBitmap,x1,y1)) { + ClearPoint(widget,x1,y1,0); + } + } + x1 += xadd; /* move horizontally */ + } while (loop < udx); /* repeat for x length */ + } else { + do { + error += udx; + if (error >= udy) { /* is time to move left or right? */ + error -= udy; + x1 += xadd; + } + loop++; + if (draw == 1) { + SetPoint(widget,x1,y1,0); + } else { + /* check comment in delta X > delta Y */ + if (!GSM_IsPointBitmap(&oldBitmap,x1,y1)) { + ClearPoint(widget,x1,y1,0); + } + } + y1 += yadd; /* move vertically */ + } while (loop < udy); /* repeat for y length */ + } +} - x = (double)x1; - for (i = y1;i <= y2;i++) { - SetPoint(widget,(int)x,i,0); - x += delta; - } - } +/* going to rewrite to Bresenham algorithm */ +void ToolLineUpdate(GtkWidget *widget, int column, int row) { + /* clear old line */ + ToolLine(widget,toolStartX,toolStartY,toolLastX,toolLastY,0); + /* draw new one */ + ToolLine(widget,toolStartX,toolStartY,column,row,1); } /* TOOL - FILLED RECT */ -static void ToolFilledRectangleUpdate(GtkWidget *widget, int column, int row) { + +/* FIXME - going to rewrite for optimalized version, clearing and */ +/* drawing new parts only before clearing and drawing whole */ +/* filled rectangle - it's too slow on diskless terminal ;(( */ +void ToolFilledRectangleUpdate(GtkWidget *widget, int column, int row) { int i, j, x1, y1, x2, y2; + /* swap Xs to x1 < x2 */ if (toolStartX > toolLastX) { x1 = toolLastX; x2 = toolStartX; @@ -552,6 +568,7 @@ static void ToolFilledRectangleUpdate(GtkWidget *widget, int column, int row) { x2 = toolLastX; } + /* swap Ys to y1 < y2 */ if (toolStartY > toolLastY) { y1 = toolLastY; y2 = toolStartY; @@ -560,10 +577,12 @@ static void ToolFilledRectangleUpdate(GtkWidget *widget, int column, int row) { y2 = toolLastY; } + /* clear one now */ for (j = y1;j <= y2;j++) for (i = x1;i <= x2;i++) if (!GSM_IsPointBitmap(&oldBitmap,i,j)) ClearPoint(widget,i,j,0); + /* swap Xs to x1 < x2 */ if (toolStartX > column) { x1 = column; x2 = toolStartX; @@ -572,6 +591,7 @@ static void ToolFilledRectangleUpdate(GtkWidget *widget, int column, int row) { x2 = column; } + /* swap Ys to y1 < y2 */ if (toolStartY > row) { y1 = row; y2 = toolStartY; @@ -580,16 +600,18 @@ static void ToolFilledRectangleUpdate(GtkWidget *widget, int column, int row) { y2 = row; } + /* draw new one */ for (j = y1;j <= y2;j++) for (i = x1;i <= x2;i++) SetPoint(widget,i,j,0); } /* TOOL - RECTANGLE */ -static void ToolRectangleUpdate(GtkWidget *widget, int column, int row) { +void ToolRectangleUpdate(GtkWidget *widget, int column, int row) { int i, j, x1, y1, x2, y2; /* clear old rectangle */ + /* swap Xs to x1 < x2 */ if (toolStartX > toolLastX) { x1 = toolLastX; x2 = toolStartX; @@ -598,6 +620,7 @@ static void ToolRectangleUpdate(GtkWidget *widget, int column, int row) { x2 = toolLastX; } + /* swap Ys to y1 < y2 */ if (toolStartY > toolLastY) { y1 = toolLastY; y2 = toolStartY; @@ -606,6 +629,7 @@ static void ToolRectangleUpdate(GtkWidget *widget, int column, int row) { y2 = toolLastY; } + /* clear old one */ for (i = x1;i <= x2;i++) { if (!GSM_IsPointBitmap(&oldBitmap,i,y1)) ClearPoint(widget,i,y1,0); if (!GSM_IsPointBitmap(&oldBitmap,i,y2)) ClearPoint(widget,i,y2,0); @@ -617,6 +641,7 @@ static void ToolRectangleUpdate(GtkWidget *widget, int column, int row) { } /* draw new rectangle */ + /* swap Xs to x1 < x2 */ if (toolStartX > column) { x1 = column; x2 = toolStartX; @@ -625,6 +650,7 @@ static void ToolRectangleUpdate(GtkWidget *widget, int column, int row) { x2 = column; } + /* swap Ys to y1 < y2 */ if (toolStartY > row) { y1 = row; y2 = toolStartY; @@ -633,6 +659,7 @@ static void ToolRectangleUpdate(GtkWidget *widget, int column, int row) { y2 = row; } + /* draw new one */ for (i = x1;i <= x2;i++) { if (!IsPoint(i,y1)) SetPoint(widget,i,y1,0); if (!IsPoint(i,y2)) SetPoint(widget,i,y2,0); @@ -644,20 +671,24 @@ static void ToolRectangleUpdate(GtkWidget *widget, int column, int row) { } } -static void UpdateToolScreen(GtkWidget *widget, int x1, int y1, int x2, int y2) { +/* this update tools actions on the screen - this is for optimalization */ +/* eg. for faster redrawing tools actions - we do not need redraw pixel */ +/* by pixel. Faster is redraw whole rectangle which contains all changes */ +void UpdateToolScreen(GtkWidget *widget, int x1, int y1, int x2, int y2) { GdkRectangle updateRect; /* update preview area */ - updateRect.x = PREVIEWSTARTX+x1; - updateRect.y = PREVIEWSTARTY+y1; - if (bitmap.type != GSM_StartupLogo && bitmap.type != GSM_7110StartupLogo && - bitmap.type != GSM_6210StartupLogo) { - updateRect.x += PREVIEWJUMPX; - updateRect.y += PREVIEWJUMPY; - } - updateRect.width = x2-x1+1; - updateRect.height = y2-y1+1; - gtk_widget_draw(previewArea,&updateRect); + if (previewAvailable) { + updateRect.x = PREVIEWSTARTX+x1; + updateRect.y = PREVIEWSTARTY+y1; + if (bitmap.type != GSM_StartupLogo) { + updateRect.x += PREVIEWJUMPX; + updateRect.y += PREVIEWJUMPY; + } + updateRect.width = x2-x1+1; + updateRect.height = y2-y1+1; + gtk_widget_draw(previewArea,&updateRect); + } /* update drawing area */ updateRect.x = x1 * (POINTSIZE+1); @@ -672,7 +703,7 @@ static void UpdateToolScreen(GtkWidget *widget, int x1, int y1, int x2, int y2) * ************************************* */ -static gint PreviewAreaButtonPressEvent(GtkWidget *widget, GdkEventButton *event) { +gint PreviewAreaButtonPressEvent(GtkWidget *widget, GdkEventButton *event) { previewPixmapNumber = (previewPixmapNumber % 8) + 1; gtk_drawing_area_size(GTK_DRAWING_AREA(previewArea), @@ -681,7 +712,7 @@ static gint PreviewAreaButtonPressEvent(GtkWidget *widget, GdkEventButton *event return TRUE; } -static gint PreviewAreaConfigureEvent(GtkWidget *widget, GdkEventConfigure *event) { +gint PreviewAreaConfigureEvent(GtkWidget *widget, GdkEventConfigure *event) { if (previewPixmap) gdk_pixmap_unref(previewPixmap); previewPixmap = GetPreviewPixmap(widget); @@ -690,7 +721,7 @@ static gint PreviewAreaConfigureEvent(GtkWidget *widget, GdkEventConfigure *even return TRUE; } -static gint PreviewAreaExposeEvent(GtkWidget *widget, GdkEventExpose *event) { +gint PreviewAreaExposeEvent(GtkWidget *widget, GdkEventExpose *event) { /* got previewPixmap? */ if (previewPixmap) /* yes - simply redraw some rectangle */ @@ -706,7 +737,7 @@ static gint PreviewAreaExposeEvent(GtkWidget *widget, GdkEventExpose *event) { * ******************************** */ -static gint DrawingAreaButtonPressEvent(GtkWidget *widget, GdkEventButton *event) { +gint DrawingAreaButtonPressEvent(GtkWidget *widget, GdkEventButton *event) { /* got drawingPixmap? */ if (drawingPixmap == NULL) return TRUE; @@ -769,14 +800,14 @@ static gint DrawingAreaButtonPressEvent(GtkWidget *widget, GdkEventButton *event return TRUE; } -static gint DrawingAreaButtonReleaseEvent(GtkWidget *widget, GdkEventButton *event) { +gint DrawingAreaButtonReleaseEvent(GtkWidget *widget, GdkEventButton *event) { if (event->button == 1) mouseButtonPushed = 0; return TRUE; } -static gint DrawingAreaMotionNotifyEvent(GtkWidget *widget, GdkEventMotion *event) { +gint DrawingAreaMotionNotifyEvent(GtkWidget *widget, GdkEventMotion *event) { int x,y; GdkModifierType state; @@ -840,7 +871,7 @@ static gint DrawingAreaMotionNotifyEvent(GtkWidget *widget, GdkEventMotion *even } /* configureEvent? -> event when someone resize windows, ... */ -static gint DrawingAreaConfigureEvent(GtkWidget *widget, GdkEventConfigure *event) { +gint DrawingAreaConfigureEvent(GtkWidget *widget, GdkEventConfigure *event) { int x, y; /* got drawingPixmap? */ if (drawingPixmap) gdk_pixmap_unref(drawingPixmap); /* got, erase it */ @@ -862,7 +893,7 @@ static gint DrawingAreaConfigureEvent(GtkWidget *widget, GdkEventConfigure *even return TRUE; } -static gint DrawingAreaExposeEvent(GtkWidget *widget, GdkEventExpose *event) { +gint DrawingAreaExposeEvent(GtkWidget *widget, GdkEventExpose *event) { /* got drawingPixmap? */ if (drawingPixmap) /* got - draw it */ @@ -878,7 +909,7 @@ static gint DrawingAreaExposeEvent(GtkWidget *widget, GdkEventExpose *event) { * ***************************************** */ -static void GetNetworkInfoEvent(GtkWidget *widget) { +void GetNetworkInfoEvent(GtkWidget *widget) { GSM_Error error; PhoneEvent *e = (PhoneEvent *)g_malloc(sizeof(PhoneEvent)); D_NetworkInfo *data = (D_NetworkInfo *)g_malloc(sizeof(D_NetworkInfo)); @@ -909,9 +940,9 @@ static void GetNetworkInfoEvent(GtkWidget *widget) { GSM_GetNetworkName(networkInfo.NetworkCode)); } -static void GetLogoEvent(GtkWidget *widget) { - int i; +void GetLogoEvent(GtkWidget *widget) { GSM_Error error; + int i; PhoneEvent *e = (PhoneEvent *) g_malloc(sizeof(PhoneEvent)); D_Bitmap *data = (D_Bitmap *)g_malloc(sizeof(D_Bitmap)); char *operator = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(networkCombo)->entry)); @@ -921,12 +952,12 @@ static void GetLogoEvent(GtkWidget *widget) { data->bitmap = &bitmap; e->event = Event_GetBitmap; e->data = data; - if (GetModelFeature(FN_CALLERGROUPS)!=0) { + if (phoneMonitor.supported & PM_CALLERGROUP) { for (i = 0;i < 6;i++) if (strcmp(gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(callerCombo)->entry)), xgnokiiConfig.callerGroups[i]) == 0) bitmap.number = i; } - + /* launch event and wait for result */ GUI_InsertEvent(e); pthread_mutex_lock(&getBitmapMutex); @@ -947,7 +978,7 @@ static void GetLogoEvent(GtkWidget *widget) { } } -static void SetLogoEvent(GtkWidget *widget) { +void SetLogoEvent(GtkWidget *widget) { GSM_Error error; PhoneEvent *e = (PhoneEvent *)g_malloc(sizeof(PhoneEvent)); D_Bitmap *data = (D_Bitmap *)g_malloc(sizeof(D_Bitmap)); @@ -961,15 +992,12 @@ static void SetLogoEvent(GtkWidget *widget) { /* above condition must be there, because if you launch logos before * callerGroups are available, you will see segfault - callerGroups not initialized */ - if (GetModelFeature(FN_CALLERGROUPS)!=0) { + if (phoneMonitor.supported & PM_CALLERGROUP) { for (i = 0;i < 6;i++) if (strcmp(gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(callerCombo)->entry)), xgnokiiConfig.callerGroups[i]) == 0) bitmap.number = i; } } - if (bitmap.type == GSM_StartupLogo) { - bitmap.number=0; - } data->bitmap = &bitmap; e->event = Event_SetBitmap; @@ -992,16 +1020,174 @@ static void SetLogoEvent(GtkWidget *widget) { } } +typedef struct { + GtkWidget *dialog; + GtkWidget *entry; +} SendLogoDialog; +static SendLogoDialog sendLogoDialog = {NULL, NULL}; + +static void OkSendLogoDialog(GtkWidget *w, gpointer gtkdata) +{ + GSM_SMSMessage SMS; + GSM_Error error; + + char Data[7] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + + PhoneEvent *e = (PhoneEvent *)g_malloc(sizeof(PhoneEvent)); + D_SMSMessage *data = (D_SMSMessage *)g_malloc(sizeof(D_SMSMessage)); + char *number = gtk_entry_get_text(GTK_ENTRY(sendLogoDialog.entry)); + char *operator = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(networkCombo)->entry)); + char *opcode = GSM_GetNetworkCode(operator); + int i; + + int current=0; + + /* Default settings for SMS message: + - no delivery report + - Class Message 1 + - no compression + - 8 bit data + - SMSC no. 1 + - validity 3 days + - set UserDataHeaderIndicator + */ + + SMS.Type = GST_MO; + SMS.Class = 1; + SMS.Compression = false; + SMS.EightBit = true; + SMS.MessageCenter = xgnokiiConfig.smsSetting[0]; /* we need to at least set .Format ! */ + SMS.MessageCenter.No = 0; + SMS.Validity = 4320; /* 4320 minutes == 72 hours */ + SMS_SetupUDH(&SMS,bitmap.type); + + /* prepare data */ + + switch (bitmap.type) { + + case GSM_CallerLogo: + /* below condition must be there, because if you launch logos before + * callerGroups are available, you will see segfault - callerGroups not initialized + */ + if (phoneMonitor.supported & PM_CALLERGROUP) { + for (i = 0;i < 6;i++) + if (strcmp(gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(callerCombo)->entry)), + xgnokiiConfig.callerGroups[i]) == 0) bitmap.number = i; + } + break; + + case GSM_OperatorLogo: + opcode=GSM_GetNetworkCode(operator); + Data[current++] = ((opcode[1] & 0x0f) << 4) | (opcode[0] & 0xf); + Data[current++] = 0xf0 | (opcode[2] & 0x0f); + Data[current++] = ((opcode[5] & 0x0f) << 4) | (opcode[4] & 0xf); + break; + + default: /* unsupported */ + g_free(e); + g_free(data); + return; + } + + strncpy(SMS.Destination,number,sizeof(SMS.Destination)); + SMS.Destination[sizeof(SMS.Destination)-1]='\0'; + + /* Set the logo size */ + current++; + Data[current++] = bitmap.width; + Data[current++] = bitmap.height; + + Data[current++] = 0x01; + + memcpy(SMS.MessageText,Data,current); + memcpy(SMS.MessageText+current,bitmap.bitmap,bitmap.size); + SMS.MessageTextLength = current+bitmap.size; + + data->sms = &SMS; + e->event = Event_SendSMSMessage; + e->data = data; + + /* launch event and wait for result */ + GUI_InsertEvent(e); + pthread_mutex_lock (&sendSMSMutex); + pthread_cond_wait (&sendSMSCond, &sendSMSMutex); + pthread_mutex_unlock (&sendSMSMutex); + error = data->status; + g_free(data); + + /* watch for errors */ + if (error != GE_SMSSENDOK) { + gchar *buf = g_strdup_printf(_("Error sending bitmap\n(error=%d)"),error); + gtk_label_set_text(GTK_LABEL(errorDialog.text),buf); + gtk_widget_show(errorDialog.dialog); + g_free(buf); + } + + gtk_widget_hide (((SendLogoDialog *) gtkdata)->dialog); +} + +/* Here would be appropriate xgnokii_sms/ShowSelectContactsDialog() + * (and the multi-recipient handling code). + * I haven't implemented yet any such code as the whole XGnokii has broken + * design of hand-coded GTK+ GUI (even w/o any Gnome features) instead of Glade. + * The right solution is to drop 95% of XGNokii code, not to write yet another + * insane +2% of hand-coded GUI code. + */ +void SendLogoEvent(GtkWidget *widget) +{ + if (sendLogoDialog.dialog == NULL) + { + GtkWidget *button, *label; + + sendLogoDialog.dialog = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (sendLogoDialog.dialog), _("Send logo")); + gtk_window_set_modal(GTK_WINDOW (sendLogoDialog.dialog), TRUE); + gtk_container_set_border_width (GTK_CONTAINER (sendLogoDialog.dialog), 10); + gtk_signal_connect (GTK_OBJECT (sendLogoDialog.dialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + + button = gtk_button_new_with_label (_("Send")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (sendLogoDialog.dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (OkSendLogoDialog), (gpointer) &sendLogoDialog); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_widget_grab_default (button); + gtk_widget_show (button); + + button = gtk_button_new_with_label (_("Cancel")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (sendLogoDialog.dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (CancelDialog), (gpointer) sendLogoDialog.dialog); + gtk_widget_show (button); + + gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (sendLogoDialog.dialog)->vbox), 5); + + label = gtk_label_new (_("Number:")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (sendLogoDialog.dialog)->vbox), label, FALSE, FALSE, 5); + gtk_widget_show (label); + + sendLogoDialog.entry = gtk_entry_new_with_max_length (GSM_MAX_PHONEBOOK_NUMBER_LENGTH); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (sendLogoDialog.dialog)->vbox), sendLogoDialog.entry, FALSE, FALSE, 5); + gtk_widget_show (sendLogoDialog.entry); + } + + gtk_entry_set_text (GTK_ENTRY (sendLogoDialog.entry), ""); + + gtk_widget_show (sendLogoDialog.dialog); +} + static void ClearLogoEvent(GtkWidget *widget) { - bitmap.size=GSM_GetBitmapSize(&bitmap); + // bitmap.size=bitmap.width*bitmap.height/8; GSM_ClearBitmap(&bitmap); UpdatePoints(widget); } -static void InvertLogoEvent(GtkWidget *widget) { +void InvertLogoEvent(GtkWidget *widget) { int column, row; for (column = 0;column < bitmap.width;column++) @@ -1014,12 +1200,12 @@ static void InvertLogoEvent(GtkWidget *widget) { UpdatePoints(widget); } -static void UpLogoEvent(GtkWidget *widget) { +void UpLogoEvent(GtkWidget *widget) { int column, row; GSM_Bitmap tbitmap; - tbitmap=bitmap; + memcpy(&tbitmap,&bitmap,sizeof(GSM_Bitmap)); for (row = 0;row < bitmap.height-1;row++) for (column = 0;column < bitmap.width;column++) @@ -1030,19 +1216,19 @@ static void UpLogoEvent(GtkWidget *widget) { for (column = 0;column < bitmap.width;column++) if (GSM_IsPointBitmap(&tbitmap,column,0)) - GSM_SetPointBitmap(&bitmap,column,row); + GSM_SetPointBitmap(&bitmap,column,bitmap.height-1); else - GSM_ClearPointBitmap(&bitmap,column,row); + GSM_ClearPointBitmap(&bitmap,column,bitmap.height-1); UpdatePoints(widget); } -static void DownLogoEvent(GtkWidget *widget) { +void DownLogoEvent(GtkWidget *widget) { int column, row; GSM_Bitmap tbitmap; - tbitmap=bitmap; + memcpy(&tbitmap,&bitmap,sizeof(GSM_Bitmap)); for (row = bitmap.height-1;row > 0;row--) for (column = 0;column < bitmap.width;column++) @@ -1060,12 +1246,12 @@ static void DownLogoEvent(GtkWidget *widget) { UpdatePoints(widget); } -static void LeftLogoEvent(GtkWidget *widget) { +void LeftLogoEvent(GtkWidget *widget) { int column, row; GSM_Bitmap tbitmap; - tbitmap=bitmap; + memcpy(&tbitmap,&bitmap,sizeof(GSM_Bitmap)); for (column = 0; column < bitmap.width-1;column++) for (row = 0;row < bitmap.height;row++) @@ -1083,12 +1269,12 @@ static void LeftLogoEvent(GtkWidget *widget) { UpdatePoints(widget); } -static void RightLogoEvent(GtkWidget *widget) { +void RightLogoEvent(GtkWidget *widget) { int column, row; GSM_Bitmap tbitmap; - tbitmap=bitmap; + memcpy(&tbitmap,&bitmap,sizeof(GSM_Bitmap)); for (column = bitmap.width-1;column > 0;column--) for (row = 0;row < bitmap.height;row++) @@ -1106,7 +1292,7 @@ static void RightLogoEvent(GtkWidget *widget) { UpdatePoints(widget); } -static void FlipVerticalLogoEvent(GtkWidget *widget) { +void FlipVerticalLogoEvent(GtkWidget *widget) { int row, column, temp; for (row = 0;row < (bitmap.height/2);row++) @@ -1126,7 +1312,7 @@ static void FlipVerticalLogoEvent(GtkWidget *widget) { UpdatePoints(widget); } -static void FlipHorizontalLogoEvent(GtkWidget *widget) { +void FlipHorizontalLogoEvent(GtkWidget *widget) { int row, column, temp; for (row = 0;row < bitmap.height;row++) @@ -1148,7 +1334,7 @@ static void FlipHorizontalLogoEvent(GtkWidget *widget) { } /* this is launched when tool was changed */ -static gint ToolTypeEvent(GtkWidget *widget) { +gint ToolTypeEvent(GtkWidget *widget) { if (GTK_TOGGLE_BUTTON(buttonBrush)->active) activeTool = TOOL_BRUSH; else if (GTK_TOGGLE_BUTTON(buttonLine)->active) activeTool = TOOL_LINE; else if (GTK_TOGGLE_BUTTON(buttonRectangle)->active) activeTool = TOOL_RECTANGLE; else @@ -1159,53 +1345,33 @@ static gint ToolTypeEvent(GtkWidget *widget) { } /* this is launched when logo type was change by buttons on toolbar */ -static gint LogoTypeEvent(GtkWidget *widget) { +gint LogoTypeEvent(GtkWidget *widget) { int clear = 0; /* is startupLogo? */ - if (GTK_TOGGLE_BUTTON(buttonStartup)->active && - bitmap.type != GSM_StartupLogo && bitmap.type != GSM_6210StartupLogo && - bitmap.type != GSM_7110StartupLogo) { - /* look for old bitmap type, clean if another */ - clear = 1; - - if (!strcmp(xgnokiiConfig.model,"7110")) { - GSM_ResizeBitmap(&bitmap,GSM_7110StartupLogo); - } else if (!strcmp(xgnokiiConfig.model,"6210") || !strcmp(xgnokiiConfig.model,"6250")) { - GSM_ResizeBitmap(&bitmap,GSM_6210StartupLogo); - } else { - GSM_ResizeBitmap(&bitmap,GSM_StartupLogo); - } - } - - /* new type is PictureImage */ - if (GTK_TOGGLE_BUTTON(buttonPicture)->active && bitmap.type != GSM_PictureImage) { + /* Resize and clear anyway - CK */ + if (GTK_TOGGLE_BUTTON(buttonStartup)->active) { /* look for old bitmap type, clean if another */ clear = 1; - GSM_ResizeBitmap(&bitmap,GSM_PictureImage); + GSM_ResizeBitmap(&bitmap,GSM_StartupLogo, &xgnokii_statemachine.Phone.Info); } - - /* new type is callerLogo */ - if (GTK_TOGGLE_BUTTON(buttonCaller)->active && bitmap.type != GSM_CallerLogo) { - /* previous was startup or Picture ? clear and draw batteries, signal, ... */ - if (bitmap.type != GSM_OperatorLogo) clear = 1; - GSM_ResizeBitmap(&bitmap,GSM_CallerLogo); + + /* has phone support for callerGroups? */ + if (phoneMonitor.supported & PM_CALLERGROUP) { + if (GTK_TOGGLE_BUTTON(buttonCaller)->active && bitmap.type != GSM_CallerLogo) { + /* previous was startup? clear and draw batteries, signal, ... */ + /* Clear anyway for 7110...CK */ + clear = 1; + GSM_ResizeBitmap(&bitmap,GSM_CallerLogo, &xgnokii_statemachine.Phone.Info); + } } /* is new type operatorLogo? */ - if (GTK_TOGGLE_BUTTON(buttonOperator)->active && bitmap.type != GSM_OperatorLogo && - bitmap.type != GSM_7110OperatorLogo) { - - /* previous startup or Picture ? clear and draw batteries, signal, ... */ - if (bitmap.type != GSM_CallerLogo) clear = 1; - - if (!strcmp(xgnokiiConfig.model,"7110")) { - GSM_ResizeBitmap(&bitmap,GSM_7110OperatorLogo); - } else if (!strcmp(xgnokiiConfig.model,"6210") || !strcmp(xgnokiiConfig.model,"6250")) { - GSM_ResizeBitmap(&bitmap,GSM_7110OperatorLogo); - } else { - GSM_ResizeBitmap(&bitmap,GSM_OperatorLogo); - } + if (GTK_TOGGLE_BUTTON(buttonOperator)->active && bitmap.type != GSM_OperatorLogo) { + /* previous startup? clear and draw batteries, signal, ... */ + /* Clear anyway for 7110..CK */ + clear = 1; + GSM_ResizeBitmap(&bitmap,GSM_OperatorLogo, &xgnokii_statemachine.Phone.Info); } /* must clear? */ @@ -1227,7 +1393,7 @@ static gint LogoTypeEvent(GtkWidget *widget) { return 0; } -static inline void CloseLogosWindow (void) { +inline void CloseLogosWindow (void) { gtk_widget_hide(GUI_LogosWindow); } @@ -1297,7 +1463,7 @@ void ImportFileSelected(GtkWidget *w, GtkFileSelection *fs) gtk_widget_show(errorDialog.dialog); g_free(buf); return; - } + } else fclose(f); error=GSM_ReadBitmapFile(fileName,&tbitmap); if (error!=GE_NONE) { @@ -1313,42 +1479,19 @@ void ImportFileSelected(GtkWidget *w, GtkFileSelection *fs) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonStartup),false); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonOperator),false); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonCaller),false); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonPicture),false); - - if (tbitmap.type==GSM_OperatorLogo || tbitmap.type==GSM_7110OperatorLogo) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonOperator),true); - if (tbitmap.type==GSM_StartupLogo || tbitmap.type==GSM_7110StartupLogo || tbitmap.type==GSM_6210StartupLogo) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonStartup),true); + + if (tbitmap.type==GSM_OperatorLogo) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonOperator),true); + if (tbitmap.type==GSM_StartupLogo) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonStartup),true); if (tbitmap.type==GSM_CallerLogo) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonCaller),true); - if (tbitmap.type==GSM_PictureImage) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonPicture),true); memcpy(&bitmap,&tbitmap,sizeof(GSM_Bitmap)); - - if (!strcmp(xgnokiiConfig.model,"7110")) { //7110 - if (bitmap.type==GSM_StartupLogo || bitmap.type==GSM_6210StartupLogo) - GSM_ResizeBitmap(&bitmap,GSM_7110StartupLogo); - - if (bitmap.type==GSM_OperatorLogo) - GSM_ResizeBitmap(&bitmap,GSM_7110OperatorLogo); - - } else if (!strcmp(xgnokiiConfig.model,"6210") || !strcmp(xgnokiiConfig.model,"6250")) { //6210,6250 - if (bitmap.type==GSM_StartupLogo || bitmap.type==GSM_7110StartupLogo) - GSM_ResizeBitmap(&bitmap,GSM_6210StartupLogo); - - if (bitmap.type==GSM_OperatorLogo) - GSM_ResizeBitmap(&bitmap,GSM_7110OperatorLogo); - - } else { - if (bitmap.type==GSM_6210StartupLogo || bitmap.type==GSM_7110StartupLogo) - GSM_ResizeBitmap(&bitmap,GSM_StartupLogo); - if (bitmap.type==GSM_7110OperatorLogo) - GSM_ResizeBitmap(&bitmap,GSM_OperatorLogo); - } UpdatePoints(drawingArea); } void SaveLogoAs(GtkWidget *widget) { - FileSelection=gtk_file_selection_new ("Save logo as ..."); + FileSelection=gtk_file_selection_new (_("Save logo as ...")); gtk_signal_connect ( GTK_OBJECT (GTK_FILE_SELECTION (FileSelection)->ok_button), @@ -1375,7 +1518,7 @@ void SaveLogo(GtkWidget *widget) void OpenLogo(GtkWidget *widget) { - FileSelection=gtk_file_selection_new ("Open logo..."); + FileSelection=gtk_file_selection_new (_("Open logo...")); gtk_signal_connect ( GTK_OBJECT (GTK_FILE_SELECTION (FileSelection)->ok_button), @@ -1400,6 +1543,7 @@ static GtkItemFactoryEntry logosMenuItems[] = { { NULL, "G", GetNetworkInfoEvent, 0, NULL}, { NULL, NULL, GetLogoEvent, 0, NULL}, { NULL, "T", SetLogoEvent, 0, NULL}, + { NULL, "N", SendLogoEvent, 0, NULL}, { NULL, NULL, NULL, 0, ""}, { NULL, "W", CloseLogosWindow, 0, NULL}, { NULL, NULL, NULL, 0, ""}, @@ -1415,7 +1559,7 @@ static GtkItemFactoryEntry logosMenuItems[] = { { NULL, "V", FlipVerticalLogoEvent, 0, NULL}, }; -static void InitLogosMenu (void) { +void InitLogosMenu (void) { logosMenuItems[0].path = g_strdup(_("/_File")); logosMenuItems[1].path = g_strdup(_("/File/_Open")); logosMenuItems[2].path = g_strdup(_("/File/_Save")); @@ -1424,19 +1568,20 @@ static void InitLogosMenu (void) { logosMenuItems[5].path = g_strdup(_("/File/_Get operator")); logosMenuItems[6].path = g_strdup(_("/File/Get _logo")); logosMenuItems[7].path = g_strdup(_("/File/Se_t logo")); - logosMenuItems[8].path = g_strdup(_("/File/Sep2")); - logosMenuItems[9].path = g_strdup(_("/File/_Close")); - logosMenuItems[10].path = g_strdup(_("/_Edit")); - logosMenuItems[11].path = g_strdup(_("/Edit/_Clear")); - logosMenuItems[12].path = g_strdup(_("/Edit/_Invert")); - logosMenuItems[13].path = g_strdup(_("/Edit/Sep3")); - logosMenuItems[14].path = g_strdup(_("/Edit/_Up logo")); - logosMenuItems[15].path = g_strdup(_("/Edit/_Down logo")); - logosMenuItems[16].path = g_strdup(_("/Edit/_Left logo")); - logosMenuItems[17].path = g_strdup(_("/Edit/_Right logo")); - logosMenuItems[18].path = g_strdup(_("/Edit/Sep4")); - logosMenuItems[19].path = g_strdup(_("/Edit/Flip _horizontal")); - logosMenuItems[20].path = g_strdup(_("/Edit/Flip _vertical")); + logosMenuItems[8].path = g_strdup(_("/File/Se_nd logo")); + logosMenuItems[9].path = g_strdup(_("/File/Sep2")); + logosMenuItems[10].path = g_strdup(_("/File/_Close")); + logosMenuItems[11].path = g_strdup(_("/_Edit")); + logosMenuItems[12].path = g_strdup(_("/Edit/_Clear")); + logosMenuItems[13].path = g_strdup(_("/Edit/_Invert")); + logosMenuItems[14].path = g_strdup(_("/Edit/Sep3")); + logosMenuItems[15].path = g_strdup(_("/Edit/_Up logo")); + logosMenuItems[16].path = g_strdup(_("/Edit/_Down logo")); + logosMenuItems[17].path = g_strdup(_("/Edit/_Left logo")); + logosMenuItems[18].path = g_strdup(_("/Edit/_Right logo")); + logosMenuItems[19].path = g_strdup(_("/Edit/Sep4")); + logosMenuItems[20].path = g_strdup(_("/Edit/Flip _horizontal")); + logosMenuItems[21].path = g_strdup(_("/Edit/Flip _vertical")); } void GUI_CreateLogosWindow (void) { @@ -1462,101 +1607,110 @@ void GUI_CreateLogosWindow (void) { /* realize top level window for logos */ GUI_LogosWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_policy(GTK_WINDOW(GUI_LogosWindow),1,1,1); - gtk_window_set_title(GTK_WINDOW(GUI_LogosWindow),_("Logos")); - gtk_signal_connect(GTK_OBJECT(GUI_LogosWindow),"delete_event", - GTK_SIGNAL_FUNC(DeleteEvent),NULL); + gtk_window_set_wmclass(GTK_WINDOW(GUI_LogosWindow), "LogosWindow", "Xgnokii"); + gtk_window_set_policy(GTK_WINDOW(GUI_LogosWindow), 1, 1, 1); + gtk_window_set_title(GTK_WINDOW(GUI_LogosWindow), _("Logos")); + gtk_signal_connect(GTK_OBJECT(GUI_LogosWindow), "delete_event", + GTK_SIGNAL_FUNC(DeleteEvent), NULL); gtk_widget_realize(GUI_LogosWindow); - CreateErrorDialog(&errorDialog,GUI_LogosWindow); - CreateInfoDialog(&infoDialog,GUI_LogosWindow); + CreateErrorDialog(&errorDialog, GUI_LogosWindow); + CreateInfoDialog(&infoDialog, GUI_LogosWindow); accelGroup = gtk_accel_group_new(); - gtk_accel_group_attach(accelGroup,GTK_OBJECT(GUI_LogosWindow)); + gtk_accel_group_attach(accelGroup, GTK_OBJECT(GUI_LogosWindow)); /* create main vbox */ - vbox = gtk_vbox_new(FALSE,1); - gtk_container_add(GTK_CONTAINER(GUI_LogosWindow),vbox); + vbox = gtk_vbox_new(FALSE, 1); + gtk_container_add(GTK_CONTAINER(GUI_LogosWindow), vbox); gtk_widget_show(vbox); - itemFactory = gtk_item_factory_new(GTK_TYPE_MENU_BAR,"
",accelGroup); - gtk_item_factory_create_items(itemFactory,nMenuItems,logosMenuItems,NULL); - menuBar = gtk_item_factory_get_widget(itemFactory,"
"); + itemFactory = gtk_item_factory_new(GTK_TYPE_MENU_BAR, "
", accelGroup); + gtk_item_factory_create_items(itemFactory, nMenuItems, logosMenuItems, NULL); + menuBar = gtk_item_factory_get_widget(itemFactory, "
"); - gtk_box_pack_start(GTK_BOX(vbox),menuBar,FALSE,FALSE,0); + gtk_box_pack_start(GTK_BOX(vbox), menuBar, FALSE, FALSE, 0); gtk_widget_show(menuBar); /* toolbar */ - toolBar = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL,GTK_TOOLBAR_ICONS); - gtk_toolbar_set_button_relief(GTK_TOOLBAR(toolBar),GTK_RELIEF_NORMAL); - gtk_toolbar_set_style(GTK_TOOLBAR(toolBar),GTK_TOOLBAR_ICONS); + toolBar = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS); + gtk_toolbar_set_button_relief(GTK_TOOLBAR(toolBar), GTK_RELIEF_NORMAL); + gtk_toolbar_set_style(GTK_TOOLBAR(toolBar), GTK_TOOLBAR_ICONS); - gtk_toolbar_append_item(GTK_TOOLBAR(toolBar),NULL,"Clear logo",NULL, - NewPixmap(New_xpm,GUI_LogosWindow->window, + gtk_toolbar_append_item(GTK_TOOLBAR(toolBar), NULL, _("Clear logo"), NULL, + NewPixmap(New_xpm, GUI_LogosWindow->window, &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), - (GtkSignalFunc)ClearLogoEvent,toolBar); + (GtkSignalFunc)ClearLogoEvent, toolBar); gtk_toolbar_append_space(GTK_TOOLBAR(toolBar)); - gtk_toolbar_append_item(GTK_TOOLBAR(toolBar),NULL,"Get logo",NULL, - NewPixmap(Read_xpm,GUI_LogosWindow->window, + gtk_toolbar_append_item(GTK_TOOLBAR(toolBar), NULL, _("Get logo"), NULL, + NewPixmap(Read_xpm, GUI_LogosWindow->window, &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), - (GtkSignalFunc)GetLogoEvent,toolBar); + (GtkSignalFunc)GetLogoEvent, toolBar); - gtk_toolbar_append_item(GTK_TOOLBAR(toolBar),NULL,"Set logo",NULL, - NewPixmap(Send_xpm,GUI_LogosWindow->window, + gtk_toolbar_append_item(GTK_TOOLBAR(toolBar), NULL, _("Set logo"), NULL, + NewPixmap(Send_xpm, GUI_LogosWindow->window, &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), - (GtkSignalFunc)SetLogoEvent,toolBar); + (GtkSignalFunc)SetLogoEvent, toolBar); + + gtk_toolbar_append_item(GTK_TOOLBAR(toolBar), NULL, _("Send logo"), NULL, + NewPixmap(SendSMS_xpm, GUI_LogosWindow->window, + &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc)SendLogoEvent, toolBar); gtk_toolbar_append_space(GTK_TOOLBAR(toolBar)); + gtk_toolbar_append_item (GTK_TOOLBAR (toolBar), NULL, _("Import from file"), NULL, + NewPixmap(Open_xpm, GUI_LogosWindow->window, + &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) OpenLogo, NULL); + gtk_toolbar_append_item (GTK_TOOLBAR (toolBar), NULL, _("Export to file"), NULL, + NewPixmap(Save_xpm, GUI_LogosWindow->window, + &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) SaveLogo, NULL); + + gtk_toolbar_append_space (GTK_TOOLBAR (toolBar)); + buttonStartup = gtk_toolbar_append_element(GTK_TOOLBAR(toolBar), - GTK_TOOLBAR_CHILD_RADIOBUTTON,NULL,NULL,"Startup logo", - "",NewPixmap(Startup_logo_xpm,GUI_LogosWindow->window, + GTK_TOOLBAR_CHILD_RADIOBUTTON, NULL, NULL, _("Startup logo"), + "", NewPixmap(Startup_logo_xpm, GUI_LogosWindow->window, &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), - GTK_SIGNAL_FUNC(LogoTypeEvent),NULL); + GTK_SIGNAL_FUNC(LogoTypeEvent), NULL); buttonOperator = gtk_toolbar_append_element(GTK_TOOLBAR(toolBar), - GTK_TOOLBAR_CHILD_RADIOBUTTON,buttonStartup,NULL,"Operator logo", - "",NewPixmap(Operator_logo_xpm,GUI_LogosWindow->window, + GTK_TOOLBAR_CHILD_RADIOBUTTON, buttonStartup, NULL, _("Operator logo"), + "", NewPixmap(Operator_logo_xpm, GUI_LogosWindow->window, &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), - GTK_SIGNAL_FUNC(LogoTypeEvent),NULL); + GTK_SIGNAL_FUNC(LogoTypeEvent), NULL); buttonCaller = gtk_toolbar_append_element(GTK_TOOLBAR(toolBar), GTK_TOOLBAR_CHILD_RADIOBUTTON, buttonOperator, - NULL,"Caller logo", - "",NewPixmap(Caller_logo_xpm,GUI_LogosWindow->window, + NULL, _("Caller logo"), + "", NewPixmap(Caller_logo_xpm, GUI_LogosWindow->window, &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), - GTK_SIGNAL_FUNC(LogoTypeEvent),NULL); - - buttonPicture = gtk_toolbar_append_element(GTK_TOOLBAR(toolBar), - GTK_TOOLBAR_CHILD_RADIOBUTTON, - buttonOperator, - NULL,"Picture image", - "",NewPixmap(Caller_logo_xpm,GUI_LogosWindow->window, - &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), - GTK_SIGNAL_FUNC(LogoTypeEvent),NULL); + GTK_SIGNAL_FUNC(LogoTypeEvent), NULL); gtk_toolbar_append_space(GTK_TOOLBAR(toolBar)); networkCombo = gtk_combo_new(); - gtk_combo_set_use_arrows_always(GTK_COMBO(networkCombo),1); - while (strcmp(GSM_Networks[i].Name,"unknown")) - glistNetwork = g_list_insert_sorted(glistNetwork,GSM_Networks[i++].Name, + gtk_combo_set_use_arrows_always(GTK_COMBO(networkCombo), 1); + while (strcmp(GSM_Networks[i].Name, "unknown")) + glistNetwork = g_list_insert_sorted(glistNetwork, GSM_Networks[i++].Name, (GCompareFunc)strcmp); - gtk_combo_set_popdown_strings(GTK_COMBO(networkCombo),glistNetwork); - gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(networkCombo)->entry),FALSE); - gtk_toolbar_append_widget(GTK_TOOLBAR(toolBar),networkCombo,"",""); + gtk_combo_set_popdown_strings(GTK_COMBO(networkCombo), glistNetwork); + gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(networkCombo)->entry), FALSE); + gtk_toolbar_append_widget(GTK_TOOLBAR(toolBar), networkCombo, "", ""); gtk_widget_show(networkCombo); g_list_free(glistNetwork); callerCombo = gtk_combo_new(); - gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(callerCombo)->entry),FALSE); - gtk_toolbar_append_widget(GTK_TOOLBAR(toolBar),callerCombo,"",""); + gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(callerCombo)->entry), FALSE); + gtk_toolbar_append_widget(GTK_TOOLBAR(toolBar), callerCombo, "", ""); gtk_widget_show(callerCombo); - gtk_box_pack_start(GTK_BOX(vbox),toolBar,FALSE,FALSE,0); + gtk_box_pack_start(GTK_BOX(vbox), toolBar, FALSE, FALSE, 0); gtk_widget_show(toolBar); /* vertical separator */ @@ -1571,17 +1725,10 @@ void GUI_CreateLogosWindow (void) { /* set GSM_Bitmap width,height needed for creating drawinArea * we are starting, default is startupLogo */ - bitmap.type = GSM_7110StartupLogo; - bitmap.height = 65; - bitmap.width = 96; + bitmap.type = GSM_StartupLogo; + bitmap.height = 48; + bitmap.width = 84; bitmap.size = bitmap.height * bitmap.width / 8; - if (!strcmp(xgnokiiConfig.model,"7110")) { //7110 - GSM_ResizeBitmap(&bitmap,GSM_7110StartupLogo); - } else if (!strcmp(xgnokiiConfig.model,"6210") || !strcmp(xgnokiiConfig.model,"6250")) { //6210,6250 - GSM_ResizeBitmap(&bitmap,GSM_6210StartupLogo); - } else { - GSM_ResizeBitmap(&bitmap,GSM_StartupLogo); - } drawingAreaWidth = bitmap.width * (POINTSIZE+1)+1; drawingAreaHeight = bitmap.height * (POINTSIZE+1)+1; @@ -1652,47 +1799,47 @@ void GUI_CreateLogosWindow (void) { gtk_toolbar_set_style(GTK_TOOLBAR(vertToolBar),GTK_TOOLBAR_ICONS); buttonBrush = gtk_toolbar_append_element(GTK_TOOLBAR(vertToolBar), - GTK_TOOLBAR_CHILD_RADIOBUTTON,NULL,NULL,"Brush tool", - "",NewPixmap(Tool_brush_xpm,GUI_LogosWindow->window, + GTK_TOOLBAR_CHILD_RADIOBUTTON, NULL, NULL, _("Brush tool"), + "", NewPixmap(Tool_brush_xpm, GUI_LogosWindow->window, &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), - GTK_SIGNAL_FUNC(ToolTypeEvent),NULL); + GTK_SIGNAL_FUNC(ToolTypeEvent), NULL); buttonLine = gtk_toolbar_append_element(GTK_TOOLBAR(vertToolBar), - GTK_TOOLBAR_CHILD_RADIOBUTTON,buttonBrush,NULL,"Line tool", - "",NewPixmap(Tool_line_xpm,GUI_LogosWindow->window, + GTK_TOOLBAR_CHILD_RADIOBUTTON, buttonBrush, NULL, _("Line tool"), + "", NewPixmap(Tool_line_xpm, GUI_LogosWindow->window, &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), - GTK_SIGNAL_FUNC(ToolTypeEvent),NULL); + GTK_SIGNAL_FUNC(ToolTypeEvent), NULL); buttonRectangle = gtk_toolbar_append_element(GTK_TOOLBAR(vertToolBar), - GTK_TOOLBAR_CHILD_RADIOBUTTON,buttonLine,NULL,"Rectangle tool", - "",NewPixmap(Tool_rectangle_xpm,GUI_LogosWindow->window, + GTK_TOOLBAR_CHILD_RADIOBUTTON, buttonLine, NULL, _("Rectangle tool"), + "", NewPixmap(Tool_rectangle_xpm, GUI_LogosWindow->window, &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), - GTK_SIGNAL_FUNC(ToolTypeEvent),NULL); + GTK_SIGNAL_FUNC(ToolTypeEvent), NULL); buttonFilledRectangle = gtk_toolbar_append_element(GTK_TOOLBAR(vertToolBar), - GTK_TOOLBAR_CHILD_RADIOBUTTON,buttonRectangle,NULL, - "Filled rectangle tool", - "",NewPixmap(Tool_filled_rectangle_xpm, + GTK_TOOLBAR_CHILD_RADIOBUTTON, buttonRectangle, NULL, + _("Filled rectangle tool"), + "", NewPixmap(Tool_filled_rectangle_xpm, GUI_LogosWindow->window, &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), - GTK_SIGNAL_FUNC(ToolTypeEvent),NULL); + GTK_SIGNAL_FUNC(ToolTypeEvent), NULL); gtk_toolbar_append_space(GTK_TOOLBAR(vertToolBar)); - gtk_toolbar_append_item(GTK_TOOLBAR(vertToolBar),NULL,"Invert logo",NULL, - NewPixmap(Edit_invert_xpm,GUI_LogosWindow->window, + gtk_toolbar_append_item(GTK_TOOLBAR(vertToolBar), NULL, _("Invert logo"), NULL, + NewPixmap(Edit_invert_xpm, GUI_LogosWindow->window, &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), - (GtkSignalFunc)InvertLogoEvent,vertToolBar); + (GtkSignalFunc)InvertLogoEvent, vertToolBar); - gtk_toolbar_append_item(GTK_TOOLBAR(vertToolBar),NULL,"Horizontal flip",NULL, - NewPixmap(Edit_flip_horizontal_xpm,GUI_LogosWindow->window, + gtk_toolbar_append_item(GTK_TOOLBAR(vertToolBar), NULL, _("Horizontal flip"), NULL, + NewPixmap(Edit_flip_horizontal_xpm, GUI_LogosWindow->window, &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), - (GtkSignalFunc)FlipHorizontalLogoEvent,vertToolBar); + (GtkSignalFunc)FlipHorizontalLogoEvent, vertToolBar); - gtk_toolbar_append_item(GTK_TOOLBAR(vertToolBar),NULL,"Vertical flip",NULL, - NewPixmap(Edit_flip_vertical_xpm,GUI_LogosWindow->window, + gtk_toolbar_append_item(GTK_TOOLBAR(vertToolBar), NULL, _("Vertical flip"), NULL, + NewPixmap(Edit_flip_vertical_xpm, GUI_LogosWindow->window, &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), - (GtkSignalFunc)FlipVerticalLogoEvent,vertToolBar); + (GtkSignalFunc)FlipVerticalLogoEvent, vertToolBar); gtk_box_pack_start(GTK_BOX(hbox),vertToolBar,FALSE,FALSE,0); @@ -1715,17 +1862,26 @@ void GUI_RefreshLogosGroupsCombo (void) { } void GUI_ShowLogosWindow (void) { + /* Set network name taken from the phone */ + GetNetworkInfoEvent(NULL); + /* if phone support caller groups, read callerGroups names */ + if (phoneMonitor.supported & PM_CALLERGROUP) { + if (xgnokiiConfig.callerGroups[0] == NULL) { + GUI_Refresh(); + GUI_InitCallerGroupsInf (); + } + if (!callersGroupsInitialized) GUI_RefreshLogosGroupsCombo (); + gtk_widget_show(buttonCaller); + gtk_widget_show(callerCombo); + } else { + /* if not supported, hide widget for handling callerGroups */ + gtk_widget_hide(buttonCaller); + gtk_widget_hide(callerCombo); + } - gtk_widget_show(buttonCaller); - gtk_widget_show(callerCombo); - - if (xgnokiiConfig.callerGroups[0] == NULL) { - GUI_Refresh(); - GUI_InitCallerGroupsInf (); - } + /* Call to reset Startup logo size */ + LogoTypeEvent(GUI_LogosWindow); - if (!callersGroupsInitialized) GUI_RefreshLogosGroupsCombo (); - gtk_widget_show(GUI_LogosWindow); if (!previewAvailable && showPreviewErrorDialog) {