r457 - in trunk/src/target/OM-2007/applications/openmoko-appmanager: . src

caowai_song at gta01.hmw-consulting.de caowai_song at gta01.hmw-consulting.de
Fri Dec 22 10:20:12 CET 2006


Author: caowai_song
Date: 2006-12-22 10:19:59 +0100 (Fri, 22 Dec 2006)
New Revision: 457

Added:
   trunk/src/target/OM-2007/applications/openmoko-appmanager/src/apply-dialog.c
   trunk/src/target/OM-2007/applications/openmoko-appmanager/src/apply-dialog.h
Modified:
   trunk/src/target/OM-2007/applications/openmoko-appmanager/configure.ac
   trunk/src/target/OM-2007/applications/openmoko-appmanager/openmoko-appmanager.pro
   trunk/src/target/OM-2007/applications/openmoko-appmanager/src/Makefile.am
   trunk/src/target/OM-2007/applications/openmoko-appmanager/src/package-list.c
   trunk/src/target/OM-2007/applications/openmoko-appmanager/src/package-list.h
   trunk/src/target/OM-2007/applications/openmoko-appmanager/src/tool-box.c
Log:
Add the function that marking all upgradeable packages.
Add the dialog that will display when user choose apply his change.


Modified: trunk/src/target/OM-2007/applications/openmoko-appmanager/configure.ac
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-appmanager/configure.ac	2006-12-22 07:03:16 UTC (rev 456)
+++ trunk/src/target/OM-2007/applications/openmoko-appmanager/configure.ac	2006-12-22 09:19:59 UTC (rev 457)
@@ -1,5 +1,5 @@
 AC_PREREQ(2.53)
-AC_INIT(openmoko-appmanager-demo, 1.0.0, http://www.openmoko.org/)
+AC_INIT(openmoko-appmanager, 1.0.0, http://www.openmoko.org/)
 AM_INIT_AUTOMAKE()
 AC_CONFIG_SRCDIR(src/appmanager-window.c)
 AM_CONFIG_HEADER(config.h)

Modified: trunk/src/target/OM-2007/applications/openmoko-appmanager/openmoko-appmanager.pro
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-appmanager/openmoko-appmanager.pro	2006-12-22 07:03:16 UTC (rev 456)
+++ trunk/src/target/OM-2007/applications/openmoko-appmanager/openmoko-appmanager.pro	2006-12-22 09:19:59 UTC (rev 457)
@@ -12,7 +12,8 @@
            src/package-list.h \
            src/pixbuf-list.h \
            src/select-menu.h \
-           src/tool-box.h
+           src/tool-box.h \
+           src/apply-dialog.h
 SOURCES += src/application-menu.c \
            src/appmanager-data.c \
            src/appmanager-window.c \
@@ -23,7 +24,8 @@
            src/package-list.c \
            src/pixbuf-list.c \
            src/select-menu.c \
-           src/tool-box.c
+           src/tool-box.c \
+           src/apply-dialog.c
 
 include ( $(OPENMOKODIR)/devel/qmake/openmoko-include.pro )
 

Modified: trunk/src/target/OM-2007/applications/openmoko-appmanager/src/Makefile.am
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-appmanager/src/Makefile.am	2006-12-22 07:03:16 UTC (rev 456)
+++ trunk/src/target/OM-2007/applications/openmoko-appmanager/src/Makefile.am	2006-12-22 09:19:59 UTC (rev 457)
@@ -12,6 +12,7 @@
                               appmanager-data.c\
                               package-list.c\
                               pixbuf-list.c\
-                              select-menu.c
+                              select-menu.c\
+                              apply-dialog.c
 
 openmoko_appmanager_LDADD = @OPENMOKO_LIBS@

Added: trunk/src/target/OM-2007/applications/openmoko-appmanager/src/apply-dialog.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-appmanager/src/apply-dialog.c	2006-12-22 07:03:16 UTC (rev 456)
+++ trunk/src/target/OM-2007/applications/openmoko-appmanager/src/apply-dialog.c	2006-12-22 09:19:59 UTC (rev 457)
@@ -0,0 +1,114 @@
+/**
+ *  @file apply-dialog.c
+ *  @brief It is an infomation dialog that will display the all package 
+ *  that will be changed.
+ *
+ *  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)
+ */
+#include <libmokoui/moko-tree-view.h>
+
+#include "apply-dialog.h"
+#include "appmanager-window.h"
+#include "package-list.h"
+
+/**
+ * @brief The id of package list that display in apply dialog.
+ */
+enum {
+  MARK_COL_NAME = 0,      ///<Package name
+  MARK_NUM_COL            ///<Column number
+};
+
+/**
+ * @brief Create a new apply dialog
+ * @param The application manager data
+ * @return The apply dialog
+ */
+GtkWidget *
+apply_dialog_new (ApplicationManagerData *appdata)
+{
+  GtkWidget *applydialog;
+  GtkWidget *dialogvbox;
+  GtkWidget *applymsg;
+  GtkWidget *listwindow;
+  GtkWidget *applylist;
+  GtkWidget *actionarea;
+  GtkWidget *calcelbutton;
+  GtkWidget *okbutton;
+
+  GtkTreeViewColumn   *col;
+  GtkCellRenderer     *renderer;
+  GtkTreeStore    *store;
+
+  // Create a new dialog and add a GtkTreeview and two button to the dialog
+  applydialog = gtk_dialog_new ();
+  gtk_window_set_title (GTK_WINDOW (applydialog), _("summary"));
+  gtk_window_set_position (GTK_WINDOW (applydialog), GTK_WIN_POS_CENTER_ALWAYS);
+  gtk_window_set_default_size (GTK_WINDOW (applydialog), 200, 300);
+  gtk_window_set_type_hint (GTK_WINDOW (applydialog), GDK_WINDOW_TYPE_HINT_DIALOG);
+
+  dialogvbox = GTK_DIALOG (applydialog)->vbox;
+  gtk_widget_show (dialogvbox);
+
+  applymsg = gtk_label_new (_("Apply the following changes"));
+  gtk_widget_show (applymsg);
+  gtk_box_pack_start (GTK_BOX (dialogvbox), applymsg, FALSE, FALSE, 0);
+
+  applylist = moko_tree_view_new ();
+  gtk_widget_show (applylist);
+  gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (applylist), FALSE);
+  gtk_tree_view_set_enable_search (GTK_TREE_VIEW (applylist), FALSE);
+
+  listwindow = GTK_WIDGET (moko_tree_view_put_into_scrolled_window (MOKO_TREE_VIEW (applylist)));
+  gtk_widget_show (listwindow);
+  gtk_box_pack_start (GTK_BOX (dialogvbox), listwindow, TRUE, TRUE, 0);
+
+  actionarea = GTK_DIALOG (applydialog)->action_area;
+  gtk_widget_show (actionarea);
+  gtk_button_box_set_layout (GTK_BUTTON_BOX (actionarea), GTK_BUTTONBOX_END);
+
+  calcelbutton = gtk_button_new_from_stock ("gtk-cancel");
+  gtk_widget_show (calcelbutton);
+  gtk_dialog_add_action_widget (GTK_DIALOG (applydialog), calcelbutton, GTK_RESPONSE_CANCEL);
+  GTK_WIDGET_SET_FLAGS (calcelbutton, GTK_CAN_DEFAULT);
+
+  okbutton = gtk_button_new_from_stock ("gtk-ok");
+  gtk_widget_show (okbutton);
+  gtk_dialog_add_action_widget (GTK_DIALOG (applydialog), okbutton, GTK_RESPONSE_OK);
+  GTK_WIDGET_SET_FLAGS (okbutton, GTK_CAN_DEFAULT);
+
+  // Add column to the treeview
+  col = gtk_tree_view_column_new ();
+  gtk_tree_view_column_set_title (col, _("Package Name"));
+
+  renderer = gtk_cell_renderer_text_new ();
+  gtk_tree_view_column_pack_start (col, renderer, FALSE);
+  gtk_tree_view_column_set_attributes (col, renderer,
+                                       "text", MARK_COL_NAME,
+                                       NULL);
+  moko_tree_view_append_column (MOKO_TREE_VIEW (applylist), col);
+
+  store = gtk_tree_store_new (MARK_NUM_COL, G_TYPE_STRING);
+
+  package_list_fill_store_with_selected_list (store, 
+          application_manager_data_get_selectedlist (appdata),
+          MARK_COL_NAME);
+
+  gtk_tree_view_set_model (GTK_TREE_VIEW (applylist), GTK_TREE_MODEL (store));
+  g_object_unref (GTK_TREE_MODEL (store));
+
+  return applydialog;
+}

Added: trunk/src/target/OM-2007/applications/openmoko-appmanager/src/apply-dialog.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-appmanager/src/apply-dialog.h	2006-12-22 07:03:16 UTC (rev 456)
+++ trunk/src/target/OM-2007/applications/openmoko-appmanager/src/apply-dialog.h	2006-12-22 09:19:59 UTC (rev 457)
@@ -0,0 +1,31 @@
+/**
+ *  @file apply-dialog.h
+ *  @brief It is an infomation dialog that will display the all package 
+ *  that will be changed.
+ *
+ *  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_APPLY_DIALOG_H
+#define _FIC_APPLY_DIALOG_H
+
+#include <gtk/gtk.h>
+
+#include "appmanager-data.h"
+
+GtkWidget *apply_dialog_new (ApplicationManagerData *appdata);
+
+#endif
+

Modified: trunk/src/target/OM-2007/applications/openmoko-appmanager/src/package-list.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-appmanager/src/package-list.c	2006-12-22 07:03:16 UTC (rev 456)
+++ trunk/src/target/OM-2007/applications/openmoko-appmanager/src/package-list.c	2006-12-22 09:19:59 UTC (rev 457)
@@ -1045,3 +1045,162 @@
       tmplist = tmplist->next;
     }
 }
+
+/**
+ * @brief Check the status of the marked list
+ *
+ * Takecare, the return value of this function is reversed. 
+ * If it returns TRUE, means that the marked list is empty
+ * If it returns FALSE, means that the marked list is not empty
+ * @return FALSE The marked list is not empty.\n
+ *  TRUE The marked list is empty.
+ */
+gboolean 
+package_list_check_marked_list_empty (ApplicationManagerData *appdata)
+{
+  PackageList *mark;
+
+  g_return_val_if_fail (MOKO_IS_APPLICATION_MANAGER_DATA (appdata), TRUE);
+
+  mark = application_manager_data_get_selectedlist (appdata);
+  if (mark == NULL)
+    {
+      return TRUE;
+    }
+
+  if (mark->next == mark)
+    {
+      return TRUE;
+    }
+
+  return FALSE;
+}
+
+/**
+ * @brief Fill the GtkTreeStore with the selected package
+ * @param treestore The tree store
+ * @param selectedlist The selected package list
+ * @param column The column that package name will insert
+ */
+void 
+package_list_fill_store_with_selected_list (GtkTreeStore *treestore,
+                                            gpointer *selectedlist,
+                                            gint column)
+{
+  PackageList  *tmplist;
+  PackageList  *slist = (PackageList *)selectedlist;
+  GtkTreeIter  iter;
+  gboolean     needupgrade, needinstall, needremove;
+  GtkTreeIter  iterupgrade, iterinstall, iterremove;
+
+  needupgrade = needinstall = needremove = FALSE;
+  tmplist = slist->next;
+  while (tmplist != slist)
+    {
+      switch (tmplist->pkg->mark)
+        {
+          case PKG_STATUS_AVAILABLE_MARK_FOR_INSTALL:
+            needinstall = TRUE;
+            break;
+
+          case PKG_STATUS_UPGRADEABLE_MARK_FOR_UPGRADE:
+            needupgrade = TRUE;
+            break;
+
+          case PKG_STATUS_INSTALLED_MARK_FOR_REMOVE:
+          case PKG_STATUS_UPGRADEABLE_MARK_FOR_REMOVE:
+            needremove = TRUE;
+            break;
+
+          default:
+            g_debug ("The status of package in the marked list is error, the package name is:%s", 
+                     tmplist->pkg->name);
+            break;
+        }
+      tmplist = tmplist->next;
+    }
+
+  if (needinstall)
+    {
+      gtk_tree_store_append (treestore, &iterinstall, NULL);
+      gtk_tree_store_set (treestore, &iterinstall, column, "To be installed", -1);
+    }
+
+  if (needupgrade)
+    {
+      gtk_tree_store_append (treestore, &iterupgrade, NULL);
+      gtk_tree_store_set (treestore, &iterupgrade, column, "To be upgraded", -1);
+    }
+
+  if (needremove)
+    {
+      gtk_tree_store_append (treestore, &iterremove, NULL);
+      gtk_tree_store_set (treestore, &iterremove, column, "To be removed", -1);
+    }
+
+  tmplist = slist->next;
+  while (tmplist != slist)
+    {
+      switch (tmplist->pkg->mark)
+        {
+          case PKG_STATUS_AVAILABLE_MARK_FOR_INSTALL:
+            gtk_tree_store_append (treestore, &iter, &iterinstall);
+            break;
+
+          case PKG_STATUS_UPGRADEABLE_MARK_FOR_UPGRADE:
+            gtk_tree_store_append (treestore, &iter, &iterupgrade);
+            break;
+
+          case PKG_STATUS_INSTALLED_MARK_FOR_REMOVE:
+          case PKG_STATUS_UPGRADEABLE_MARK_FOR_REMOVE:
+            gtk_tree_store_append (treestore, &iter, &iterremove);
+            break;
+
+          default:
+            tmplist = tmplist->next;
+            continue;
+        }
+      gtk_tree_store_set (treestore, &iter, column, tmplist->pkg->name, -1);
+      tmplist = tmplist->next;
+    }
+}
+
+/**
+ * @brief Mark all upgradeable package for upgrade
+ * @param appdata The application manager data
+ */
+void 
+package_list_mark_all_upgradeable (ApplicationManagerData *appdata)
+{
+  PackageList *selectedlist;
+  PackageList *upgradelist;
+  PackageList *tmplist;
+
+  g_return_if_fail (MOKO_IS_APPLICATION_MANAGER_DATA (appdata));
+
+  selectedlist = application_manager_data_get_selectedlist (appdata);
+  g_return_if_fail (selectedlist);
+
+  upgradelist = application_manager_data_get_upgradelist (appdata);
+  g_return_if_fail (upgradelist);
+
+  tmplist = upgradelist->next;
+  while (tmplist != upgradelist)
+    {
+      switch (tmplist->pkg->mark)
+        {
+          case PKG_STATUS_UPGRADEABLE:
+            tmplist->pkg->mark = PKG_STATUS_UPGRADEABLE_MARK_FOR_UPGRADE;
+            package_list_insert_node_without_check (selectedlist, tmplist->pkg);
+            break;
+
+          case PKG_STATUS_UPGRADEABLE_MARK_FOR_REMOVE:
+            tmplist->pkg->mark = PKG_STATUS_UPGRADEABLE_MARK_FOR_UPGRADE;
+            break;
+
+          default:
+            break;
+        } // end switch
+      tmplist = tmplist->next;
+    }// end while
+}

Modified: trunk/src/target/OM-2007/applications/openmoko-appmanager/src/package-list.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-appmanager/src/package-list.h	2006-12-22 07:03:16 UTC (rev 456)
+++ trunk/src/target/OM-2007/applications/openmoko-appmanager/src/package-list.h	2006-12-22 09:19:59 UTC (rev 457)
@@ -61,4 +61,11 @@
                                                  GtkListStore *store, 
                                                  gpointer pkglist,
                                                  const gchar *str);
+gboolean 
+package_list_check_marked_list_empty (ApplicationManagerData *appdata);
+
+void package_list_fill_store_with_selected_list (GtkTreeStore *treestore,
+                                                 gpointer *selectedlist,
+                                                 gint column);
+void package_list_mark_all_upgradeable (ApplicationManagerData *appdata);
 #endif

Modified: trunk/src/target/OM-2007/applications/openmoko-appmanager/src/tool-box.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-appmanager/src/tool-box.c	2006-12-22 07:03:16 UTC (rev 456)
+++ trunk/src/target/OM-2007/applications/openmoko-appmanager/src/tool-box.c	2006-12-22 09:19:59 UTC (rev 457)
@@ -21,6 +21,9 @@
 
 #include "tool-box.h"
 #include "navigation-area.h"
+#include "package-list.h"
+#include "appmanager-window.h"
+#include "apply-dialog.h"
 
 /**
  * @brief The callback function of the button "upgrade"
@@ -28,7 +31,19 @@
 void 
 on_upgrade_clicked (GtkButton *bupgrade, gpointer data)
 {
+  GtkWidget *dialog;
+
   g_debug ("Clicked the button upgrade");
+  package_list_mark_all_upgradeable (MOKO_APPLICATION_MANAGER_DATA (data));
+  navigation_area_rebuild_from_latest (MOKO_APPLICATION_MANAGER_DATA (data));
+
+  dialog = gtk_message_dialog_new (NULL,
+                                   GTK_DIALOG_DESTROY_WITH_PARENT,
+                                   GTK_MESSAGE_INFO,
+                                   GTK_BUTTONS_OK,
+                                   _("Marked all upgradeable packages"));
+  gtk_dialog_run (GTK_DIALOG (dialog));
+  gtk_widget_destroy (dialog);
 }
 
 /**
@@ -37,7 +52,29 @@
 void 
 on_apply_clicked (GtkButton *bapply, gpointer data)
 {
+  GtkWidget *dialog;
+  gint      res;
   g_debug ("Clicked the button apply");
+
+  if (package_list_check_marked_list_empty (
+         MOKO_APPLICATION_MANAGER_DATA (data)))
+    {
+      dialog = gtk_message_dialog_new (NULL,
+                                       GTK_DIALOG_DESTROY_WITH_PARENT,
+                                       GTK_MESSAGE_INFO,
+                                       GTK_BUTTONS_OK,
+                                       _("No package that has been selected"));
+      gtk_dialog_run (GTK_DIALOG (dialog));
+      gtk_widget_destroy (dialog);
+      return;
+    }
+
+  dialog = apply_dialog_new (MOKO_APPLICATION_MANAGER_DATA (data));
+  res = gtk_dialog_run (GTK_DIALOG (dialog));
+
+  //FIXME Add code to install/remove/upgrade package
+
+  gtk_widget_destroy (dialog);
 }
 
 /**





More information about the commitlog mailing list