http://marcin-wiacek.fkn.pl/english/zips/mygnokii.tar.gz
[gnokii.git] / xgnokii / xgnokii_logos.c
index cc221ac..5f806cf 100644 (file)
@@ -1,31 +1,16 @@
-/*
-
-  $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 <ja@mail.upjs.sk>.
-
-  Released under the terms of the GNU GPL, see file COPYING for more details.
-
-*/
-          
-#include <stdio.h>
 #include <stdlib.h>
 #include <fcntl.h>
 #include <signal.h>
 #include <sys/types.h>
 #include <string.h>
 #include <gtk/gtk.h>
+#include <stdio.h>
 
 #include "misc.h"
 #include "gsm-common.h"
 #include "gsm-api.h"
-#include "cfgreader.h"
 #include "gsm-networks.h"
-#include "gsm-filetypes.h"
+#include "files/gsm-filetypes.h"
 #include "gsm-bitmaps.h"
 
 #include "xgnokii_logos.h"
@@ -44,8 +29,6 @@
 #include "xpm/New.xpm"
 #include "xpm/Send.xpm"
 #include "xpm/Read.xpm"
-#include "xpm/Open.xpm"
-#include "xpm/Save.xpm"
 
 #include "xpm/Edit_invert.xpm"
 #include "xpm/Edit_flip_horizontal.xpm"
 #include "xpm/Tool_filled_rectangle.xpm"
 
 extern GSM_Network GSM_Networks[];
-extern GSM_Statemachine statemachine;
 
-GtkWidget *GUI_LogosWindow;
+static GtkWidget *GUI_LogosWindow;
 
-ErrorDialog errorDialog = {NULL, NULL};
-InfoDialog infoDialog = {NULL, NULL};
+static ErrorDialog errorDialog = {NULL, NULL};
+static InfoDialog infoDialog = {NULL, NULL};
 
 /* stuff for drawingArea */
-GtkWidget *drawingArea = NULL;
-GdkPixmap *drawingPixmap = NULL;
-GdkPixmap *greenPointPixmap, *blackPointPixmap;
-int drawingAreaWidth, drawingAreaHeight; /* in pixels */
-int mouseButtonPushed = 0;
+static GtkWidget *drawingArea = NULL;
+static GdkPixmap *drawingPixmap = NULL;
+static GdkPixmap *greenPointPixmap, *blackPointPixmap;
+static int drawingAreaWidth, drawingAreaHeight; /* in pixels */
+static int mouseButtonPushed = 0;
 
 /* stuff for previewArea */
-GtkWidget *previewArea = NULL;
-GdkPixmap *previewPixmap = NULL;
-GdkPixmap *greenPixelPixmap;
-int previewPixmapWidth, previewPixmapHeight;
-int previewAvailable = 1, showPreviewErrorDialog = 1;
-int previewPixmapNumber = 0;
+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;
 
-GSM_Bitmap bitmap, oldBitmap;
-GSM_NetworkInfo networkInfo;
+static GSM_Bitmap bitmap, oldBitmap;
+static GSM_NetworkInfo networkInfo;
 
 /* widgets for toolbar - some, need global variables */
-GtkWidget *buttonStartup, *buttonOperator, *buttonCaller;
-GtkWidget *networkCombo, *callerCombo;
+static GtkWidget *buttonStartup, *buttonOperator, *buttonCaller, *buttonPicture;
+static GtkWidget *networkCombo, *callerCombo;
 
-int activeTool = TOOL_BRUSH;
-int toolStartX, toolStartY, toolLastX, toolLastY;
+static int activeTool = TOOL_BRUSH;
+static int toolStartX, toolStartY, toolLastX, toolLastY;
 
 /* tools for drawing */
 static GtkWidget *buttonBrush, *buttonLine, *buttonRectangle;
@@ -230,7 +212,6 @@ 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;
@@ -244,7 +225,8 @@ 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) {
+  if (bitmap.type != GSM_StartupLogo && bitmap.type != GSM_7110StartupLogo &&
+      bitmap.type != GSM_6210StartupLogo) {
     x += PREVIEWJUMPX;
     y += PREVIEWJUMPY;
   }
@@ -271,7 +253,8 @@ 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) {
+  if (bitmap.type != GSM_StartupLogo && bitmap.type != GSM_7110StartupLogo &&
+      bitmap.type != GSM_6210StartupLogo) {
     x += PREVIEWJUMPX;
     y += PREVIEWJUMPY;
   }
@@ -299,7 +282,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 */
@@ -324,7 +307,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 */
@@ -358,7 +341,8 @@ 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) {
+  if (bitmap.type != GSM_StartupLogo && bitmap.type != GSM_7110StartupLogo &&
+      bitmap.type != GSM_6210StartupLogo) {
     dx = PREVIEWJUMPX;
     dy = PREVIEWJUMPY;
   }
@@ -427,8 +411,9 @@ void UpdatePreviewPoints (void) {
   int x, y, dx = 0, dy = 0;
 
   if (!previewPixmap || !previewAvailable) return;  
-  
-  if (bitmap.type != GSM_StartupLogo) {
+
+  if (bitmap.type != GSM_StartupLogo && bitmap.type != GSM_7110StartupLogo &&
+      bitmap.type != GSM_6210StartupLogo) {
     dx = PREVIEWJUMPX;
     dy = PREVIEWJUMPY;
   }
@@ -468,81 +453,97 @@ 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));
 
-/* 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++) {
+      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;
+    }
 
-/* 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);
+    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));
+
+    x = (double)x1;
+    for (i = y1;i <= y2;i++) {
+      SetPoint(widget,(int)x,i,0);
+      x += delta;
+    }
+  }
 }
 
 /* TOOL - FILLED RECT */
-
-/* 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) {
+static 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;
@@ -551,7 +552,6 @@ void ToolFilledRectangleUpdate(GtkWidget *widget, int column, int row) {
     x2 = toolLastX;
   }
 
-       /* swap Ys to y1 < y2 */
   if (toolStartY > toolLastY) {
     y1 = toolLastY;
     y2 = toolStartY;
@@ -560,12 +560,10 @@ 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;
@@ -574,7 +572,6 @@ void ToolFilledRectangleUpdate(GtkWidget *widget, int column, int row) {
     x2 = column;
   }
 
-       /* swap Ys to y1 < y2 */
   if (toolStartY > row) {
     y1 = row;
     y2 = toolStartY;
@@ -583,18 +580,16 @@ 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 */
-void ToolRectangleUpdate(GtkWidget *widget, int column, int row) {
+static 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;
@@ -603,7 +598,6 @@ void ToolRectangleUpdate(GtkWidget *widget, int column, int row) {
     x2 = toolLastX;
   }
 
-       /* swap Ys to y1 < y2 */
   if (toolStartY > toolLastY) {
     y1 = toolLastY;
     y2 = toolStartY;
@@ -612,7 +606,6 @@ 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);                
@@ -624,7 +617,6 @@ void ToolRectangleUpdate(GtkWidget *widget, int column, int row) {
   }
 
   /* draw new rectangle */
-       /* swap Xs to x1 < x2 */
   if (toolStartX > column) {
     x1 = column;
     x2 = toolStartX;
@@ -633,7 +625,6 @@ void ToolRectangleUpdate(GtkWidget *widget, int column, int row) {
     x2 = column;
   }
 
-       /* swap Ys to y1 < y2 */
   if (toolStartY > row) {
     y1 = row;
     y2 = toolStartY;
@@ -642,7 +633,6 @@ 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);
@@ -654,24 +644,20 @@ void ToolRectangleUpdate(GtkWidget *widget, int column, int row) {
   }
 }
 
-/* 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) {
+static void UpdateToolScreen(GtkWidget *widget, int x1, int y1, int x2, int y2) {
   GdkRectangle updateRect;
 
   /* update preview area */
-       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);
-       }
+  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);
 
   /* update drawing area */
   updateRect.x = x1 * (POINTSIZE+1);
@@ -686,7 +672,7 @@ void UpdateToolScreen(GtkWidget *widget, int x1, int y1, int x2, int y2) {
  * *************************************
  */
 
-gint PreviewAreaButtonPressEvent(GtkWidget *widget, GdkEventButton *event) {
+static gint PreviewAreaButtonPressEvent(GtkWidget *widget, GdkEventButton *event) {
   previewPixmapNumber = (previewPixmapNumber % 8) + 1;
 
   gtk_drawing_area_size(GTK_DRAWING_AREA(previewArea),
@@ -695,7 +681,7 @@ gint PreviewAreaButtonPressEvent(GtkWidget *widget, GdkEventButton *event) {
   return TRUE;
 }
 
-gint PreviewAreaConfigureEvent(GtkWidget *widget, GdkEventConfigure *event) {
+static gint PreviewAreaConfigureEvent(GtkWidget *widget, GdkEventConfigure *event) {
   if (previewPixmap) gdk_pixmap_unref(previewPixmap);
   previewPixmap = GetPreviewPixmap(widget);
 
@@ -704,7 +690,7 @@ gint PreviewAreaConfigureEvent(GtkWidget *widget, GdkEventConfigure *event) {
   return TRUE;
 }
 
-gint PreviewAreaExposeEvent(GtkWidget *widget, GdkEventExpose *event) {
+static gint PreviewAreaExposeEvent(GtkWidget *widget, GdkEventExpose *event) {
   /* got previewPixmap? */
   if (previewPixmap)
     /* yes - simply redraw some rectangle */      
@@ -720,7 +706,7 @@ gint PreviewAreaExposeEvent(GtkWidget *widget, GdkEventExpose *event) {
  * ********************************
  */
 
-gint DrawingAreaButtonPressEvent(GtkWidget *widget, GdkEventButton *event) {
+static gint DrawingAreaButtonPressEvent(GtkWidget *widget, GdkEventButton *event) {
   /* got drawingPixmap? */
   if (drawingPixmap == NULL) return TRUE;
 
@@ -783,14 +769,14 @@ gint DrawingAreaButtonPressEvent(GtkWidget *widget, GdkEventButton *event) {
   return TRUE;
 }
 
-gint DrawingAreaButtonReleaseEvent(GtkWidget *widget, GdkEventButton *event) {
+static gint DrawingAreaButtonReleaseEvent(GtkWidget *widget, GdkEventButton *event) {
   if (event->button == 1)
     mouseButtonPushed = 0;
 
   return TRUE;
 }
 
-gint DrawingAreaMotionNotifyEvent(GtkWidget *widget, GdkEventMotion *event) {
+static gint DrawingAreaMotionNotifyEvent(GtkWidget *widget, GdkEventMotion *event) {
   int x,y;
   GdkModifierType state;
   
@@ -854,7 +840,7 @@ gint DrawingAreaMotionNotifyEvent(GtkWidget *widget, GdkEventMotion *event) {
 }
 
 /* configureEvent? -> event when someone resize windows, ... */
-gint DrawingAreaConfigureEvent(GtkWidget *widget, GdkEventConfigure *event) {
+static gint DrawingAreaConfigureEvent(GtkWidget *widget, GdkEventConfigure *event) {
   int x, y;
   /* got drawingPixmap? */
   if (drawingPixmap) gdk_pixmap_unref(drawingPixmap); /* got, erase it */
@@ -876,7 +862,7 @@ gint DrawingAreaConfigureEvent(GtkWidget *widget, GdkEventConfigure *event) {
   return TRUE;
 }
 
-gint DrawingAreaExposeEvent(GtkWidget *widget, GdkEventExpose *event) {
+static gint DrawingAreaExposeEvent(GtkWidget *widget, GdkEventExpose *event) {
   /* got drawingPixmap? */
   if (drawingPixmap)
     /* got - draw it */
@@ -892,7 +878,7 @@ gint DrawingAreaExposeEvent(GtkWidget *widget, GdkEventExpose *event) {
  * *****************************************
  */
 
-void GetNetworkInfoEvent(GtkWidget *widget) {
+static void GetNetworkInfoEvent(GtkWidget *widget) {
   GSM_Error error;
   PhoneEvent *e = (PhoneEvent *)g_malloc(sizeof(PhoneEvent));
   D_NetworkInfo *data = (D_NetworkInfo *)g_malloc(sizeof(D_NetworkInfo));
@@ -923,9 +909,9 @@ void GetNetworkInfoEvent(GtkWidget *widget) {
                GSM_GetNetworkName(networkInfo.NetworkCode));
 }
 
-void GetLogoEvent(GtkWidget *widget) {
-  GSM_Error error;
+static void GetLogoEvent(GtkWidget *widget) {
   int i;
+  GSM_Error error;
   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));
@@ -935,12 +921,12 @@ void GetLogoEvent(GtkWidget *widget) {
   data->bitmap = &bitmap;
   e->event = Event_GetBitmap;
   e->data = data;
-  if (phoneMonitor.supported & PM_CALLERGROUP) {
+  if (GetModelFeature(FN_CALLERGROUPS)!=0) {
     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);
@@ -961,7 +947,7 @@ void GetLogoEvent(GtkWidget *widget) {
   }
 }
 
-void SetLogoEvent(GtkWidget *widget) {
+static void SetLogoEvent(GtkWidget *widget) {
   GSM_Error error;
   PhoneEvent *e = (PhoneEvent *)g_malloc(sizeof(PhoneEvent));
   D_Bitmap *data = (D_Bitmap *)g_malloc(sizeof(D_Bitmap));
@@ -975,12 +961,15 @@ 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 (phoneMonitor.supported & PM_CALLERGROUP) {
+    if (GetModelFeature(FN_CALLERGROUPS)!=0) {
       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;
@@ -1005,14 +994,14 @@ void SetLogoEvent(GtkWidget *widget) {
 
 static void ClearLogoEvent(GtkWidget *widget) {
   
-  //  bitmap.size=bitmap.width*bitmap.height/8;
+  bitmap.size=bitmap.width*bitmap.height/8;
   
   GSM_ClearBitmap(&bitmap);
 
   UpdatePoints(widget);
 }
 
-void InvertLogoEvent(GtkWidget *widget) {
+static void InvertLogoEvent(GtkWidget *widget) {
   int column, row;
 
   for (column = 0;column < bitmap.width;column++)
@@ -1025,12 +1014,12 @@ void InvertLogoEvent(GtkWidget *widget) {
   UpdatePoints(widget);
 }
 
-void UpLogoEvent(GtkWidget *widget) {
+static void UpLogoEvent(GtkWidget *widget) {
   int column, row;
 
   GSM_Bitmap tbitmap;
   
-  memcpy(&tbitmap,&bitmap,sizeof(GSM_Bitmap));
+  tbitmap=bitmap;
   
   for (row = 0;row < bitmap.height-1;row++)
     for (column = 0;column < bitmap.width;column++)
@@ -1041,19 +1030,19 @@ void UpLogoEvent(GtkWidget *widget) {
 
   for (column = 0;column < bitmap.width;column++)
     if (GSM_IsPointBitmap(&tbitmap,column,0))
-      GSM_SetPointBitmap(&bitmap,column,bitmap.height-1);
+      GSM_SetPointBitmap(&bitmap,column,row);
     else
-      GSM_ClearPointBitmap(&bitmap,column,bitmap.height-1);    
+      GSM_ClearPointBitmap(&bitmap,column,row);    
 
   UpdatePoints(widget); 
 }
 
-void DownLogoEvent(GtkWidget *widget) {
+static void DownLogoEvent(GtkWidget *widget) {
   int column, row;
 
   GSM_Bitmap tbitmap;
   
-  memcpy(&tbitmap,&bitmap,sizeof(GSM_Bitmap));
+  tbitmap=bitmap;
 
   for (row = bitmap.height-1;row > 0;row--)
     for (column = 0;column < bitmap.width;column++)
@@ -1071,12 +1060,12 @@ void DownLogoEvent(GtkWidget *widget) {
   UpdatePoints(widget);
 }
 
-void LeftLogoEvent(GtkWidget *widget) {
+static void LeftLogoEvent(GtkWidget *widget) {
   int column, row;
 
   GSM_Bitmap tbitmap;
   
-  memcpy(&tbitmap,&bitmap,sizeof(GSM_Bitmap));
+  tbitmap=bitmap;
 
   for (column = 0; column < bitmap.width-1;column++)
     for (row = 0;row < bitmap.height;row++)
@@ -1094,12 +1083,12 @@ void LeftLogoEvent(GtkWidget *widget) {
   UpdatePoints(widget);
 }
 
-void RightLogoEvent(GtkWidget *widget) {
+static void RightLogoEvent(GtkWidget *widget) {
   int column, row;
 
   GSM_Bitmap tbitmap;
   
-  memcpy(&tbitmap,&bitmap,sizeof(GSM_Bitmap));
+  tbitmap=bitmap;
 
   for (column = bitmap.width-1;column > 0;column--)
     for (row = 0;row < bitmap.height;row++)
@@ -1117,7 +1106,7 @@ void RightLogoEvent(GtkWidget *widget) {
   UpdatePoints(widget);
 }
 
-void FlipVerticalLogoEvent(GtkWidget *widget) {
+static void FlipVerticalLogoEvent(GtkWidget *widget) {
   int row, column, temp;
 
   for (row = 0;row < (bitmap.height/2);row++)
@@ -1137,7 +1126,7 @@ void FlipVerticalLogoEvent(GtkWidget *widget) {
   UpdatePoints(widget);
 }
 
-void FlipHorizontalLogoEvent(GtkWidget *widget) {
+static void FlipHorizontalLogoEvent(GtkWidget *widget) {
   int row, column, temp;
 
   for (row = 0;row < bitmap.height;row++)
@@ -1159,7 +1148,7 @@ void FlipHorizontalLogoEvent(GtkWidget *widget) {
 } 
 
 /* this is launched when tool was changed */
-gint ToolTypeEvent(GtkWidget *widget) {
+static 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
@@ -1170,33 +1159,53 @@ gint ToolTypeEvent(GtkWidget *widget) {
 }
 
 /* this is launched when logo type was change by buttons on toolbar */
-gint LogoTypeEvent(GtkWidget *widget) {
+static gint LogoTypeEvent(GtkWidget *widget) {
   int clear = 0;
 
   /* is startupLogo? */
-  /* Resize and clear anyway - CK */
-  if (GTK_TOGGLE_BUTTON(buttonStartup)->active) {
+  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;
-    GSM_ResizeBitmap(&bitmap,GSM_StartupLogo, &statemachine.Phone.Info);
-  }
-
-  /* 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, &statemachine.Phone.Info);
+    
+    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) {
+    /* look for old bitmap type, clean if another */
+    clear = 1;
+    GSM_ResizeBitmap(&bitmap,GSM_PictureImage);
+  }
+  
+  /* 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);
+  }
 
   /* is new type 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, &statemachine.Phone.Info);
+  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);
+    }
   }
 
   /* must clear? */
@@ -1218,7 +1227,7 @@ gint LogoTypeEvent(GtkWidget *widget) {
   return 0;
 }
 
-inline void CloseLogosWindow (void) {
+static inline void CloseLogosWindow (void) {
   gtk_widget_hide(GUI_LogosWindow);
 }
 
@@ -1288,7 +1297,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) {
@@ -1304,19 +1313,42 @@ 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);
-  
-  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);
+  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_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),
@@ -1343,7 +1375,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),
@@ -1383,7 +1415,7 @@ static GtkItemFactoryEntry logosMenuItems[] = {
   { NULL,      "<control>V",   FlipVerticalLogoEvent,   0, NULL},
 };
 
-void InitLogosMenu (void) {
+static void InitLogosMenu (void) {
  logosMenuItems[0].path = g_strdup(_("/_File"));
  logosMenuItems[1].path = g_strdup(_("/File/_Open"));
  logosMenuItems[2].path = g_strdup(_("/File/_Save"));
@@ -1430,105 +1462,101 @@ void GUI_CreateLogosWindow (void) {
 
   /* realize top level window for logos */
   GUI_LogosWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-  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_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, "<main>", accelGroup);
-  gtk_item_factory_create_items(itemFactory, nMenuItems, logosMenuItems, NULL);
-  menuBar = gtk_item_factory_get_widget(itemFactory, "<main>");
+  itemFactory = gtk_item_factory_new(GTK_TYPE_MENU_BAR,"<main>",accelGroup);
+  gtk_item_factory_create_items(itemFactory,nMenuItems,logosMenuItems,NULL);
+  menuBar = gtk_item_factory_get_widget(itemFactory,"<main>");
 
-  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_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);
+                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_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 */
@@ -1543,10 +1571,17 @@ void GUI_CreateLogosWindow (void) {
   /* set GSM_Bitmap width,height needed for creating drawinArea
    * we are starting, default is startupLogo
    */
-  bitmap.type = GSM_StartupLogo;
-  bitmap.height = 48;
-  bitmap.width = 84;
+  bitmap.type = GSM_7110StartupLogo;
+  bitmap.height = 65;
+  bitmap.width = 96;
   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;
  
@@ -1617,47 +1652,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);
@@ -1680,26 +1715,17 @@ 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); 
-  }        
 
-  /* Call to reset Startup logo size */
-  LogoTypeEvent(GUI_LogosWindow);
+  gtk_widget_show(buttonCaller);
+  gtk_widget_show(callerCombo); 
+
+  if (xgnokiiConfig.callerGroups[0] == NULL) {
+    GUI_Refresh(); 
+    GUI_InitCallerGroupsInf ();
+  }
 
+  if (!callersGroupsInitialized) GUI_RefreshLogosGroupsCombo ();           
+  
   gtk_widget_show(GUI_LogosWindow);
 
   if (!previewAvailable && showPreviewErrorDialog) {