r274 - in trunk/src/target/OM-2007/applications/openmoko-appmanager-demo: . data src

caowai_song at gta01.hmw-consulting.de caowai_song at gta01.hmw-consulting.de
Thu Nov 30 10:18:25 CET 2006


Author: caowai_song
Date: 2006-11-30 09:17:43 +0000 (Thu, 30 Nov 2006)
New Revision: 274

Added:
   trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/data/
   trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/data/Makefile.am
   trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/data/package-available.png
   trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/data/package-installed-outdated.png
   trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/data/package-installed.png
   trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/data/package-mark-install.png
   trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/data/package-remove.png
   trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/data/package-upgrade.png
   trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/errorcode.h
Modified:
   trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/Makefile.am
   trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/configure.ac
   trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/application-menu.c
   trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/appmanager-data.c
   trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/appmanager-data.h
   trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/appmanager-window.c
   trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/detail-area.c
   trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/filter-menu.c
   trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/navigation-area.c
   trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/package-list.c
   trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/package-list.h
   trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/pixbuf-list.c
   trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/pixbuf-list.h
   trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/tool-box.c
Log:
Continue to build the framework


Modified: trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/Makefile.am
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/Makefile.am	2006-11-30 00:53:21 UTC (rev 273)
+++ trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/Makefile.am	2006-11-30 09:17:43 UTC (rev 274)
@@ -1,2 +1,2 @@
-SUBDIRS = src
+SUBDIRS = src data
 

Modified: trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/configure.ac
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/configure.ac	2006-11-30 00:53:21 UTC (rev 273)
+++ trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/configure.ac	2006-11-30 09:17:43 UTC (rev 274)
@@ -22,4 +22,5 @@
 AC_OUTPUT([
 Makefile
 src/Makefile
+data/Makefile
 ])

Added: trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/data/Makefile.am
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/data/Makefile.am	2006-11-30 00:53:21 UTC (rev 273)
+++ trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/data/Makefile.am	2006-11-30 09:17:43 UTC (rev 274)
@@ -0,0 +1,15 @@
+EXTRA_DIST = package-available.png\
+             package-installed-outdated.png\
+             package-installed.png\
+             package-mark-install.png\
+             package-remove.png\
+             package-upgrade.png
+
+resourcedir = $(pkgdatadir)
+resource_DATA = package-available.png\
+                package-installed-outdated.png\
+                package-installed.png\
+                package-mark-install.png\
+                package-remove.png\
+                package-upgrade.png
+

Added: trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/data/package-available.png
===================================================================
(Binary files differ)


Property changes on: trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/data/package-available.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/data/package-installed-outdated.png
===================================================================
(Binary files differ)


Property changes on: trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/data/package-installed-outdated.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/data/package-installed.png
===================================================================
(Binary files differ)


Property changes on: trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/data/package-installed.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/data/package-mark-install.png
===================================================================
(Binary files differ)


Property changes on: trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/data/package-mark-install.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/data/package-remove.png
===================================================================
(Binary files differ)


Property changes on: trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/data/package-remove.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/data/package-upgrade.png
===================================================================
(Binary files differ)


Property changes on: trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/data/package-upgrade.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/application-menu.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/application-menu.c	2006-11-30 00:53:21 UTC (rev 273)
+++ trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/application-menu.c	2006-11-30 09:17:43 UTC (rev 274)
@@ -68,8 +68,8 @@
 }
 
 /**
- * @brief Create a new application menu for a window.
- * @param window The main window that the menu will add to.
+ * @brief Create a new application menu for the application manager
+ * @param appdata The application manager data
  * @return The GtkMenu widget. If there is error, 
  * it will return NULL.
  */

Modified: trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/appmanager-data.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/appmanager-data.c	2006-11-30 00:53:21 UTC (rev 273)
+++ trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/appmanager-data.c	2006-11-30 09:17:43 UTC (rev 274)
@@ -20,6 +20,10 @@
 
 #include "appmanager-data.h"
 
+/**
+ * @brief Create a new ApplicationManagerData
+ * @return The ApplicationManagerData. If fail to create, it will return NULL.
+ */
 ApplicationManagerData *
 application_manager_data_new (void)
 {
@@ -44,64 +48,324 @@
 
   for (i = 0; i < N_COUNT_PKG_STATUS; i++)
     {
-      data->statusPix[i] = NULL;
+      data->statuspix[i] = NULL;
     }
 
   return data;
 }
 
+/**
+ * @brief Set the moko panad window to the application manager data
+ * @param appdata The application manager data struct
+ * @param window The main window
+ */
 void 
 application_manager_data_set_main_window (ApplicationManagerData *appdata, 
                                           MokoPanedWindow *window)
 {
+  g_return_if_fail (appdata != NULL);
+
   appdata->mwindow = window;
 }
 
+/**
+ * @brief Set the treeview widget of package list to the 
+ * application manager data
+ * @param appdata The application manager data struct
+ * @param tvpkglist The treeview widget of the package list
+ */
 void 
 application_manager_data_set_tvpkglist (ApplicationManagerData *appdata,
                                        GtkWidget *tvpkglist)
 {
+  g_return_if_fail (appdata != NULL);
+
   appdata->tvpkglist = tvpkglist;
 }
 
+/**
+ * @brief Set the textview widget of detail to the application manager data
+ * @param appdata The application manager data struct
+ * @param tvdetail The textview widget of detail
+ */
 void 
 application_manager_data_set_tvdetail (ApplicationManagerData *appdata,
                                        GtkWidget *tvdetail)
 {
+  g_return_if_fail (appdata != NULL);
+
   appdata->tvdetail = tvdetail;
 }
 
+/**
+ * @brief Set the header of package list to the application manager data
+ * @param appdata The application manager data struct
+ * @param pkglist The header of the package list
+ */
 void 
 application_manager_data_set_pkglist (ApplicationManagerData *appdata,
                                       gpointer pkglist)
 {
+  g_return_if_fail (appdata != NULL);
+
   appdata->pkglist = pkglist;
 }
 
+/**
+ * @brief Set the header of section list to the application manager data
+ * @param appdata The application manager data struct
+ * @param sectionlist The header of the section list
+ */
 void 
 application_manager_data_set_section_list (ApplicationManagerData *appdata,
                                            gpointer sectionlist)
 {
+  g_return_if_fail (appdata != NULL);
+
   appdata->sectionlist = sectionlist;
 }
 
+/**
+ * @brief Set the header of the installed list to the application manager data
+ * @param appdata The application manager data struct
+ * @param installedlist The header of the installed list
+ */
 void 
 application_manager_data_set_installed_list (ApplicationManagerData *appdata,
                                              gpointer installedlist)
 {
+  g_return_if_fail (appdata != NULL);
+
   appdata->installedlist = installedlist;
 }
 
+/**
+ * @brief Set the header of the upgrade list to the application manager data
+ * @param appdata The application manager data struct
+ * @param upgradelist The header of the upgrade list
+ */
 void 
 application_manager_data_set_upgrade_list (ApplicationManagerData *appdata,
                                            gpointer upgradelist)
 {
+  g_return_if_fail (appdata != NULL);
+
   appdata->upgradelist = upgradelist;
 }
 
+/**
+ * @brief Set the header of the selected list to the application manager data
+ * @param appdata The application manager data struct
+ * @param selectedlist The header of the selected list
+ */
 void 
 application_manager_data_set_selected_list (ApplicationManagerData *appdata,
                                             gpointer selectedlist)
 {
+  g_return_if_fail (appdata != NULL);
+
   appdata->selectedlist = selectedlist;
 }
+
+/**
+ * @brief Set the pixbuf to the pixbuf list in the application manager data
+ * @param appdata The application manager data struct
+ * @param pixbuf A GdkPixbuf
+ * @param id The package status id
+ */
+void 
+application_manager_data_set_status_pixbuf (ApplicationManagerData *appdata,
+                                            GdkPixbuf *pixbuf,
+                                            guint id)
+{
+  g_return_if_fail (appdata != NULL);
+  g_return_if_fail (id < N_COUNT_PKG_STATUS);
+
+  appdata->statuspix[id] = pixbuf;
+}
+
+/**
+ * @brief Init the pixbuf list.
+ *
+ * Load all pixbuf from the appointed file, and set the pixbuf to the
+ * application manager data struct.
+ * @param appdata The application manager data struct
+ */
+void 
+init_pixbuf_list (ApplicationManagerData *appdata)
+{
+  GdkPixbuf  *pixbuf;
+
+  g_return_if_fail (appdata != NULL);
+
+  pixbuf = create_pixbuf ("package-available.png");
+  if (pixbuf != NULL)
+    {
+      application_manager_data_set_status_pixbuf (appdata, pixbuf,
+                                                  PKG_STATUS_AVAILABLE);
+    }
+
+  pixbuf = create_pixbuf ("package-installed.png");
+  if (pixbuf != NULL)
+    {
+      application_manager_data_set_status_pixbuf (appdata, pixbuf,
+                                                  PKG_STATUS_INSTALLED);
+    }
+
+  pixbuf = create_pixbuf ("package-installed-outdated.png");
+  if (pixbuf != NULL)
+    {
+      application_manager_data_set_status_pixbuf (appdata, pixbuf,
+                                                  PKG_STATUS_UPGRADEABLE);
+    }
+
+  pixbuf = create_pixbuf ("package-mark-install.png");
+  if (pixbuf != NULL)
+    {
+      application_manager_data_set_status_pixbuf (appdata, pixbuf,
+                                                  PKG_STATUS_AVAILABLE_MARK_FOR_INSTALL);
+    }
+
+  pixbuf = create_pixbuf ("package-remove.png");
+  if (pixbuf != NULL)
+    {
+      application_manager_data_set_status_pixbuf (appdata, pixbuf,
+                                                  PKG_STATUS_INSTALLED_MARK_FOR_REMOVE);
+      application_manager_data_set_status_pixbuf (appdata, pixbuf,
+                                                  PKG_STATUS_UPGRADEABLE_MARK_FOR_REMOVE);
+    }
+
+  pixbuf = create_pixbuf ("package-upgrade.png");
+  if (pixbuf != NULL)
+    {
+      application_manager_data_set_status_pixbuf (appdata, pixbuf,
+                                                  PKG_STATUS_UPGRADEABLE_MARK_FOR_UPGRADE);
+    }
+
+}
+
+/**
+ * @brief Get the main window from the application manager data
+ * @param appdata The application manager data
+ * @return The main window
+ */
+MokoPanedWindow *
+application_manager_get_main_window (ApplicationManagerData *appdata)
+{
+  g_return_val_if_fail (appdata != NULL, NULL);
+
+  return appdata->mwindow;
+}
+
+/**
+ * @brief Get the treeview widget of the package list from 
+ * the application manager data
+ *
+ * @param appdata The application manager data
+ * @return The treeview widget
+ */
+GtkWidget *
+application_manager_get_tvpkglist (ApplicationManagerData *appdata)
+{
+  g_return_val_if_fail (appdata != NULL, NULL);
+
+  return appdata->tvpkglist;
+}
+
+/**
+ * @brief Get the textview widget of the details info from 
+ * the application manager data
+ * 
+ * @param appdata The application manager data
+ * @return The text widget
+ */
+GtkWidget *
+application_manager_get_tvdetail (ApplicationManagerData *appdata)
+{
+  g_return_val_if_fail (appdata != NULL, NULL);
+
+  return appdata->tvdetail;
+}
+
+/**
+ * @brief Get the package list that get from libipkg from the 
+ * application manager data
+ *
+ * @param appdata The application manager data
+ * @return The package list that get from libipkg
+ */
+gpointer 
+application_manager_data_get_pkglist (ApplicationManagerData *appdata)
+{
+  g_return_val_if_fail (appdata != NULL, NULL);
+
+  return appdata->pkglist;
+}
+
+/**
+ * @brief Get the section list from the application manager data
+ * @param appdata The application manager data
+ * @return The section list
+ */
+gpointer 
+application_manager_data_get_sectionlist (ApplicationManagerData *appdata)
+{
+  g_return_val_if_fail (appdata != NULL, NULL);
+
+  return appdata->sectionlist;
+}
+
+/**
+ * @brief Get the installed list from the application manager data
+ * @param appdata The application manager data
+ * @return The installed list
+ */
+gpointer 
+application_manager_data_get_installedlist (ApplicationManagerData *appdata)
+{
+  g_return_val_if_fail (appdata != NULL, NULL);
+
+  return appdata->installedlist;
+}
+
+/**
+ * @brief Get the upgrade list from the application manager data
+ * @param appdata The application manager data
+ * @return The upgrade list
+ */
+gpointer 
+application_manager_data_get_upgradelist (ApplicationManagerData *appdata)
+{
+  g_return_val_if_fail (appdata != NULL, NULL);
+
+  return appdata->upgradelist;
+}
+
+/**
+ * @brief Get the selected list from the application manager data
+ * @param appdata The application manager data
+ * @return The selected list
+ */
+gpointer 
+application_manager_data_get_selectedlist (ApplicationManagerData *appdata)
+{
+  g_return_val_if_fail (appdata != NULL, NULL);
+
+  return appdata->selectedlist;
+}
+
+/**
+ * @brief Get the appointed pixbuf from the application manager data
+ * @param appdata The application manager data
+ * @param id The status id
+ * @return The pixbuf. If the id is an error id, it returns NULL
+ */
+GdkPixbuf *
+application_manager_data_get_status_pixbuf (ApplicationManagerData *appdata, 
+                                            guint id)
+{
+  g_return_val_if_fail (appdata != NULL, NULL);
+  g_return_val_if_fail (id < N_COUNT_PKG_STATUS, NULL);
+
+  return appdata->selectedlist;
+}

Modified: trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/appmanager-data.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/appmanager-data.h	2006-11-30 00:53:21 UTC (rev 273)
+++ trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/appmanager-data.h	2006-11-30 09:17:43 UTC (rev 274)
@@ -23,11 +23,15 @@
 #include <gtk/gtk.h>
 
 #include <libmokoui/moko-paned-window.h>
+#include "pixbuf-list.h"
 
 /**
  * @brief The all data that will be used in the application manager
  *
- * 
+ * Acturally, it need not load the pixbuf to memory and keep them.
+ * But these pixbuf are used so many times. So it is worthy to load them
+ * and keep them in the memory.
+ * FIXME Maybe use a GObject as the base class is the better.
  */
 typedef struct _ApplicationManagerData {
   MokoPanedWindow  *mwindow;           ///<! The main window
@@ -38,7 +42,7 @@
   gpointer         installedlist;      ///<! The list of all installed packages
   gpointer         upgradelist;        ///<! The list of all upgradeable packages
   gpointer         selectedlist;       ///<! The list of packages that user selected
-  GdkPixbuf        *statusPix[PkgStatusId];    ///<! The all pixbufs that need by the package list store
+  GdkPixbuf        *statuspix[N_COUNT_PKG_STATUS];    ///<! The all pixbufs that need by the package list store
 } ApplicationManagerData;
 
 ApplicationManagerData *application_manager_data_new (void);
@@ -67,4 +71,34 @@
 void application_manager_data_set_selected_list (ApplicationManagerData *appdata,
                                                  gpointer selectedlist);
 
+void init_pixbuf_list (ApplicationManagerData *appdata);
+
+MokoPanedWindow *
+     application_manager_get_main_window (ApplicationManagerData *appdata);
+
+GtkWidget *
+     application_manager_get_tvpkglist (ApplicationManagerData *appdata);
+
+GtkWidget *
+     application_manager_get_tvdetail (ApplicationManagerData *appdata);
+
+gpointer 
+     application_manager_data_get_pkglist (ApplicationManagerData *appdata);
+
+gpointer 
+     application_manager_data_get_sectionlist (ApplicationManagerData *appdata);
+
+gpointer 
+     application_manager_data_get_installedlist (ApplicationManagerData *appdata);
+
+gpointer 
+     application_manager_data_get_upgradelist (ApplicationManagerData *appdata);
+
+gpointer 
+     application_manager_data_get_selectedlist (ApplicationManagerData *appdata);
+
+GdkPixbuf *
+     application_manager_data_get_status_pixbuf (ApplicationManagerData *appdata, 
+                                                 guint id);
+
 #endif

Modified: trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/appmanager-window.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/appmanager-window.c	2006-11-30 00:53:21 UTC (rev 273)
+++ trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/appmanager-window.c	2006-11-30 09:17:43 UTC (rev 274)
@@ -31,6 +31,8 @@
 #include "tool-box.h"
 #include "detail-area.h"
 #include "appmanager-data.h"
+#include "errorcode.h"
+#include "package-list.h"
 
 /**
  * @brief The start function.
@@ -47,6 +49,8 @@
   MokoToolBox     *toolbox;
   GtkWidget       *detail;
 
+  gint            ret;
+
   g_debug ("appplication manager start up");
 
   gtk_init (&argc, &argv);
@@ -63,6 +67,8 @@
       return -1;
     }
 
+  init_pixbuf_list (appdata);
+
   app = MOKO_APPLICATION (moko_application_get_instance ());
   g_set_application_name (_("Application manager"));
 
@@ -86,6 +92,14 @@
   detail = detail_area_new (appdata);
   moko_paned_window_set_lower_pane (window, detail);
 
+  //Load the list of all package in the memory
+  ret = init_package_list (appdata);
+  if (ret != OP_SUCCESS)
+    {
+      g_debug ("Can not initial the libipkg, the result is%d", ret);
+      return -1;
+    }
+
   gtk_widget_show_all (GTK_WIDGET (window));
   g_debug ("application manager enter main loop");
   gtk_main ();

Modified: trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/detail-area.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/detail-area.c	2006-11-30 00:53:21 UTC (rev 273)
+++ trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/detail-area.c	2006-11-30 09:17:43 UTC (rev 274)
@@ -21,8 +21,8 @@
 #include "detail-area.h"
 
 /**
- * @brief Create a detail area to the main window
- * @param window The main window
+ * @brief Create a detail area to the application manager data
+ * @param appdata The application manager data
  * @return The toplevel widget of detail area
  */
 GtkWidget *

Added: trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/errorcode.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/errorcode.h	2006-11-30 00:53:21 UTC (rev 273)
+++ trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/errorcode.h	2006-11-30 09:17:43 UTC (rev 274)
@@ -0,0 +1,36 @@
+/**
+ *  @file errorcode.h
+ *  @brief The error code of the all function return
+ *
+ *  Copyright (C) 2006 First International Computer Inc.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU Public License as published by
+ *  the Free Software Foundation; version 2.1 of the license.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Public License for more details.
+ *
+ *  Current Version: $Rev$ ($Date$) [$Author$]
+ *
+ *  @author Chaowei Song (songcw at fic-sh.com.cn)
+ */
+#ifndef _FIC_ERROR_CODE_H
+#define _FIC_ERROR_CODE_H
+
+/**
+ * @brief All available error code
+ */
+typedef enum {
+  OP_SUCCESS = 0,                ///<! Operation success
+  OP_MAMORY_MALLOC_ERROR,        ///<! Mamory malloc error
+
+  OP_SECTION_NAME_NULL,          ///<! The section of a package is NULL
+
+  OP_ERROR                       ///<! Operation error
+} ErrorCode;
+
+#endif
+

Modified: trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/filter-menu.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/filter-menu.c	2006-11-30 00:53:21 UTC (rev 273)
+++ trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/filter-menu.c	2006-11-30 09:17:43 UTC (rev 274)
@@ -58,10 +58,11 @@
 }
 
 /**
- * @brief Create a new filter menu for a window
+ * @brief Create a new filter menu for the application manager
  * 
- * At this function, it only can 
- * @param window The main window that the filter menu will add to.
+ * At this function, it only can create the static menu items.
+ * It must add the dynamic menu items late.
+ * @param appdata The application manager data
  * @return The filter menu.
  */
 GtkMenu *

Modified: trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/navigation-area.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/navigation-area.c	2006-11-30 00:53:21 UTC (rev 273)
+++ trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/navigation-area.c	2006-11-30 09:17:43 UTC (rev 274)
@@ -36,9 +36,9 @@
 
 
 /**
- * @brief Create all widgets in the navigation area for the main window.
+ * @brief Create all widgets in the navigation area for the application manager data.
  *
- * @param window The main window
+ * @param appdata The application manager data
  * @return The toplevel widget in the navigation area
  */
 GtkWidget *
@@ -58,7 +58,8 @@
   ///<! Add the status as the first column.
   col = gtk_tree_view_column_new ();
   gtk_tree_view_column_set_title (col, _("S"));
-  gtk_tree_view_column_set_sizing (col, GTK_TREE_VIEW_COLUMN_FIXED);
+  gtk_tree_view_column_set_sizing (col, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+  //gtk_tree_view_column_set_fixed_width (col, 20);
 
   renderer = gtk_cell_renderer_pixbuf_new ();
   gtk_tree_view_column_pack_start (col, renderer, FALSE);
@@ -66,12 +67,13 @@
                                        "pixbuf", COL_STATUS,
                                        NULL);
 
-  gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), col);
+  moko_tree_view_append_column (MOKO_TREE_VIEW (treeview), col);
 
   ///<! Add the name as the second column.
   col = gtk_tree_view_column_new ();
   gtk_tree_view_column_set_title (col, _("Name"));
-  gtk_tree_view_column_set_sizing (col, GTK_TREE_VIEW_COLUMN_FIXED);
+  gtk_tree_view_column_set_sizing (col, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+  //gtk_tree_view_column_set_fixed_width (col, 240);
 
   renderer = gtk_cell_renderer_text_new ();
   gtk_tree_view_column_pack_start (col, renderer, FALSE);
@@ -79,7 +81,7 @@
                                        "text", COL_NAME,
                                        NULL);
 
-  gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), col);
+  moko_tree_view_append_column (MOKO_TREE_VIEW (treeview), col);
 
   ///<! Add the size as the third column.
   col = gtk_tree_view_column_new ();
@@ -87,11 +89,12 @@
 
   renderer = gtk_cell_renderer_text_new ();
   gtk_tree_view_column_pack_start (col, renderer, FALSE);
+  gtk_tree_view_column_set_sizing (col, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
   gtk_tree_view_column_set_attributes (col, renderer,
                                        "text", COL_SIZE,
                                        NULL);
 
-  gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), col);
+  moko_tree_view_append_column (MOKO_TREE_VIEW (treeview), col);
 
   model = GTK_TREE_MODEL (create_package_list_store ());
   gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), model);

Modified: trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/package-list.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/package-list.c	2006-11-30 00:53:21 UTC (rev 273)
+++ trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/package-list.c	2006-11-30 09:17:43 UTC (rev 274)
@@ -21,5 +21,296 @@
 #include "appmanager-data.h"
 #include "package-list.h"
 #include "ipkgapi.h"
+#include "errorcode.h"
 
+/**
+ * @brief The structor of Package list node
+ */
+typedef struct package_list {
+  IPK_PACKAGE *pkg;                ///<Package info
+  struct package_list *pre;        ///<The previous node of package list
+  struct package_list *next;       ///<The next node of package list
+} PackageList;
 
+/**
+ * @brief Section list structure.
+ */
+typedef struct section_list {
+  char *name;                      ///<Section name
+  int  sequence;                   ///<The sequence in section list
+  PackageList head;               ///<The first node of package list at this section
+  struct section_list *next;       ///<The next section list node
+} SectionList;
+
+/**
+ * @brief Get the list of all packages from lib ipkg
+ * @param appdata The application manager data
+ * @return If success, return OP_SUCCESS, else return error code
+ */
+gint 
+init_package_list (ApplicationManagerData *appdata)
+{
+  PKG_LIST_HEAD *head;
+  int ret;
+
+  head = g_malloc (sizeof (PKG_LIST_HEAD));
+  if (head == NULL)
+    {
+      g_debug ("Can not malloc memory for the package list header");
+      return OP_MAMORY_MALLOC_ERROR;
+    }
+
+  head->length = 0;
+  head->pkg_list = NULL;
+
+  ret = ipkg_initialize (0);
+  if (ret != 0)
+    {
+      //Can't initialize the lib ipkg
+      g_debug ("Can not initialize the libipkg, the result is %d\nthe error message is:%s",
+               ret, get_error_msg());
+      return OP_ERROR;
+    }
+
+  ret = ipkg_list_available_cmd (head);
+  if (ret != 0)
+    {
+      //Can't get the package list correctly
+      g_debug ("Can not get the package list, the result is %d\nthe error message is:%s",
+               ret, get_error_msg());
+      g_free (head);
+      return OP_ERROR;
+    }
+
+  application_manager_data_set_pkglist (appdata, head);
+  return OP_SUCCESS;
+}
+
+/**
+ * @brief Create a new node of section list.
+ *
+ * If the param name is NULL, return NULL;
+ * If it can not malloc memory for the node of section list, it will return NULL.
+ * @param name The section name.
+ * @return The section pointer.
+ */
+static SectionList *
+package_list_create_new_section_node (const char *name)
+{
+  SectionList   *sect;
+
+  g_return_val_if_fail (name != NULL, NULL);
+
+  sect = g_malloc (sizeof (SectionList));
+  if (sect == NULL)
+    {
+      g_debug ("ERROR: Malloc memory for section list error.");
+      return NULL;
+    }
+
+  sect->name = g_malloc (strlen (name) +1);
+  if (sect->name == NULL)
+    {
+      g_debug ("ERROR: Malloc memory for section list error.");
+      g_free (sect);
+      return NULL;
+    }
+
+  strcpy (sect->name, name);
+  sect->head.pkg = NULL;
+  sect->head.pre = &(sect->head);
+  sect->head.next = &(sect->head);
+  sect->next = NULL;
+
+  return sect;
+}
+
+/**
+ * @brief Search section node.
+ *
+ * Search the section node for a package. If the section of package isn't
+ * in the section list, add a new section node for it. Only when the 
+ * return value is OP_SUCCESS, the value of parameter "section" is valid.
+ *
+ * @param name The name of section
+ * @param section The section pointer
+ * @param sechead The header of section list
+ * @return Error code
+ * @retval OP_SUCCESS Operation success
+ */
+static gint 
+package_list_search_section_node (const char *name, 
+                                  SectionList **section, 
+                                  SectionList *sechead)
+{
+  SectionList  *tmp;
+  SectionList  *pre;
+  gint   ret;
+
+  if (name == NULL)
+    {
+      g_debug ("The name of section is NULL");
+      return OP_SECTION_NAME_NULL;
+    }
+  if (name[0] == 0)
+    {
+      g_debug ("The name of section is NULL");
+      return OP_SECTION_NAME_NULL;
+    }
+
+  pre = sechead;
+  tmp = sechead->next;
+  while (tmp != NULL)
+    {
+      ret = strcmp (tmp->name, name);
+
+      if (ret == 0)
+        {
+          //Find it.
+          *section = tmp;
+          return OP_SUCCESS;
+        }
+      if (ret > 0)
+        {
+          break;
+        }
+
+      pre = tmp;
+      tmp = pre->next;
+    }
+
+  tmp = package_list_create_new_section_node (name);
+  if (tmp == NULL)
+    {
+      g_debug ("Can not create section node");
+      return OP_MAMORY_MALLOC_ERROR;
+    }
+  tmp->next = pre->next;
+  pre->next = tmp;
+
+  *section = tmp;
+
+  return OP_SUCCESS;
+}
+
+/**
+ * @brief Free the package list
+ * @param pkglist The package list
+ */
+static void 
+package_list_free_package_list (PackageList *pkglist)
+{
+  PackageList *tmp;
+  PackageList *next;
+
+  tmp = pkglist->next;
+  while (tmp != pkglist)
+    {
+      next = tmp->next;
+      g_free (tmp);
+      tmp = next;
+    }
+  pkglist->next = pkglist;
+  pkglist->pre = pkglist;
+}
+
+/**
+ * @brief Free the section list
+ * @param seclist The section list
+ */
+static void 
+packaeg_list_free_section_list (SectionList *seclist)
+{
+  SectionList *tmp;
+  SectionList *next;
+
+  tmp = seclist->next;
+  while (tmp != NULL)
+    {
+      next = tmp->next;
+      package_list_free_package_list (&(tmp->head));
+      g_free (tmp->name);
+      g_free (tmp);
+      tmp = next;
+    }
+  g_free (seclist);
+}
+
+
+/**
+ * @brief Build a detailed index for the packages list in the application
+ * manager data
+ * @param appdata The application manager data
+ * @return If success, return OP_SUCCESS, else return error code
+ */
+gint 
+package_list_build_index (ApplicationManagerData *appdata)
+{
+  PKG_LIST_HEAD *pkglist;
+
+  SectionList *sectionlist = NULL;
+  PackageList *installed = NULL;
+  PackageList *upgrade = NULL;
+  PackageList *selected = NULL;
+
+  // Get the package list from application manager data
+  pkglist = (PKG_LIST_HEAD *) application_manager_data_get_pkglist (appdata);
+  if (pkglist == NULL)
+    {
+      g_debug ("The package list is not available");
+      return OP_ERROR;
+    }
+
+  if (pkglist->pkg_list == NULL)
+    {
+      g_debug ("The package list is not available");
+      return OP_ERROR;
+    }
+
+  // Get the section list from the application manager data
+  // If the section list is not NULL, clear it.
+  sectionlist = (SectionList *) application_manager_data_get_sectionlist (appdata);
+  if (sectionlist != NULL)
+    {
+      packaeg_list_free_section_list (sectionlist);
+      sectionlist = NULL;
+      application_manager_data_set_section_list (appdata, sectionlist);
+    }
+
+  // Get the installed list from the application manager data
+  // If the installed list is not NULL, clear it.
+  installed = (PackageList *)application_manager_data_get_installedlist (appdata);
+  if (installed != NULL)
+    {
+      package_list_free_package_list (installed);
+      g_free (installed);
+      installed = NULL;
+      application_manager_data_set_installed_list (appdata, installed);
+    }
+
+  // Get the upgrade list from the application manager data
+  // If the upgrade list is not NULL, clear it.
+  upgrade = (PackageList *)application_manager_data_get_upgradelist (appdata);
+  if (upgrade != NULL)
+    {
+      package_list_free_package_list (upgrade);
+      g_free (upgrade);
+      upgrade = NULL;
+      application_manager_data_set_upgrade_list (appdata, upgrade);
+    }
+
+  // Get the selected list from the application manager data
+  // If the selected list is not NULL, clear it.
+  selected = (PackageList *)application_manager_data_get_upgradelist (appdata);
+  if (selected != NULL)
+    {
+      package_list_free_package_list (selected);
+      g_free (selected);
+      selected = NULL;
+      application_manager_data_set_upgrade_list (appdata, selected);
+    }
+
+  sectionlist = g_malloc (sizeof (SectionList));
+
+  return OP_SUCCESS;
+}

Modified: trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/package-list.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/package-list.h	2006-11-30 00:53:21 UTC (rev 273)
+++ trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/package-list.h	2006-11-30 09:17:43 UTC (rev 274)
@@ -22,5 +22,6 @@
 
 #include <gtk/gtk.h>
 
+gint init_package_list (ApplicationManagerData *appdata);
 
 #endif

Modified: trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/pixbuf-list.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/pixbuf-list.c	2006-11-30 00:53:21 UTC (rev 273)
+++ trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/pixbuf-list.c	2006-11-30 09:17:43 UTC (rev 274)
@@ -20,3 +20,35 @@
 
 #include "pixbuf-list.h"
 
+/**
+ * @brief Create a pixbuf by the filename from the PKGDATADIR
+ * @param filename The filename of the pixbuf file
+ * @return The GdkPixbuf. If can not find the file, it will return NULL.
+ */
+GdkPixbuf *
+create_pixbuf (const gchar *filename)
+{
+  gchar     *pathname;
+  GdkPixbuf *pixbuf = NULL;
+  GError    *error = NULL;
+
+  pathname = g_strdup_printf ("%s%s%s", PKGDATADIR, G_DIR_SEPARATOR_S, 
+                              filename);
+  if (g_file_test (pathname, G_FILE_TEST_EXISTS))
+    {
+      pixbuf = gdk_pixbuf_new_from_file (pathname, &error);
+      if (!pixbuf)
+        {
+          fprintf (stderr, "Fail to load pixbuf file %s: %s\n", 
+                   pathname, error->message);
+          g_error_free (error);
+        }
+    }
+  else
+    {
+      g_debug ("Can not find the file %s", pathname);
+    }
+  g_free (pathname);
+  return pixbuf;
+}
+

Modified: trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/pixbuf-list.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/pixbuf-list.h	2006-11-30 00:53:21 UTC (rev 273)
+++ trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/pixbuf-list.h	2006-11-30 09:17:43 UTC (rev 274)
@@ -22,6 +22,11 @@
 
 #include <gtk/gtk.h>
 
+/**
+ * @brief The package status id
+ *
+ * The id is used to find the related pixbuf from pixbuf list.
+ */
 typedef enum _pkgstatusid {
   PKG_STATUS_AVAILABLE = 0,                ///<Package is available and not installed.
   PKG_STATUS_INSTALLED,                    ///<Package is installed and can not be upgrade.
@@ -33,5 +38,8 @@
   N_COUNT_PKG_STATUS                       ///<The number of valid status.
 } PkgStatusId;
 
+GdkPixbuf *create_pixbuf (const gchar *filename);
+
+
 #endif
 

Modified: trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/tool-box.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/tool-box.c	2006-11-30 00:53:21 UTC (rev 273)
+++ trunk/src/target/OM-2007/applications/openmoko-appmanager-demo/src/tool-box.c	2006-11-30 09:17:43 UTC (rev 274)
@@ -21,8 +21,8 @@
 #include "tool-box.h"
 
 /**
- * @brief Create a new tool box for the main window
- * @param window The main window
+ * @brief Create a new tool box for the application manager data
+ * @param appdata The application manager data
  * @return The toplevel widget of the tool box
  */
 MokoToolBox *





More information about the commitlog mailing list