[Frugalware-git] gfpm: gfpm: New feature: Gfpm can now display README.Frugalware for packages that have it.

Priyank priyank at frugalware.org
Wed Sep 26 22:13:06 CEST 2007


Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=gfpm.git;a=commitdiff;h=9aa69d3213fb7419215808f9f0c043971cd781a0

commit 9aa69d3213fb7419215808f9f0c043971cd781a0
Author: Priyank <priyank at frugalware.org>
Date:   Thu Sep 27 01:39:36 2007 +0530

gfpm: New feature: Gfpm can now display README.Frugalware for packages that have it.
* gfpm-quickpane: Added a 'View Readme' button to the Quickpane
* gfpm.glade: Added a new dialog for displaying README for packages
* gfpm-interface: some cleanups and fixes
(Feature Idea by Crazy)

diff --git a/data/gfpm.glade b/data/gfpm.glade
index ea194af..a6ce45d 100644
--- a/data/gfpm.glade
+++ b/data/gfpm.glade
@@ -405,9 +405,6 @@
</widget>
</child>
</widget>
-                                  <packing>
-                                    <property name="tab_expand">False</property>
-                                  </packing>
</child>
<child>
<widget class="GtkLabel" id="lblblll">
@@ -416,7 +413,6 @@
</widget>
<packing>
<property name="type">tab</property>
-                                    <property name="tab_expand">False</property>
<property name="tab_fill">False</property>
</packing>
</child>
@@ -436,7 +432,6 @@
</widget>
<packing>
<property name="position">1</property>
-                                    <property name="tab_expand">False</property>
</packing>
</child>
<child>
@@ -447,7 +442,6 @@
<packing>
<property name="type">tab</property>
<property name="position">1</property>
-                                    <property name="tab_expand">False</property>
<property name="tab_fill">False</property>
</packing>
</child>
@@ -468,7 +462,6 @@
</widget>
<packing>
<property name="position">2</property>
-                                    <property name="tab_expand">False</property>
</packing>
</child>
<child>
@@ -480,7 +473,6 @@
<packing>
<property name="type">tab</property>
<property name="position">2</property>
-                                    <property name="tab_expand">False</property>
<property name="tab_fill">False</property>
</packing>
</child>
@@ -505,8 +497,35 @@
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                    <property name="label" translatable="yes">Install</property>
<property name="response_id">0</property>
+                                    <child>
+                                      <widget class="GtkHBox" id="hbox6">
+                                        <property name="visible">True</property>
+                                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                        <child>
+                                          <widget class="GtkImage" id="image2">
+                                            <property name="visible">True</property>
+                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                            <property name="xalign">0</property>
+                                            <property name="yalign">0</property>
+                                            <property name="stock">gtk-add</property>
+                                          </widget>
+                                          <packing>
+                                            <property name="expand">False</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <widget class="GtkLabel" id="label13">
+                                            <property name="visible">True</property>
+                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                            <property name="label" translatable="yes">Install</property>
+                                          </widget>
+                                          <packing>
+                                            <property name="position">1</property>
+                                          </packing>
+                                        </child>
+                                      </widget>
+                                    </child>
</widget>
</child>
<child>
@@ -515,8 +534,35 @@
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                    <property name="label" translatable="yes">Remove</property>
<property name="response_id">0</property>
+                                    <child>
+                                      <widget class="GtkHBox" id="hbox7">
+                                        <property name="visible">True</property>
+                                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                        <child>
+                                          <widget class="GtkImage" id="image5">
+                                            <property name="visible">True</property>
+                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                            <property name="xalign">0</property>
+                                            <property name="yalign">0</property>
+                                            <property name="stock">gtk-remove</property>
+                                          </widget>
+                                          <packing>
+                                            <property name="expand">False</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <widget class="GtkLabel" id="label15">
+                                            <property name="visible">True</property>
+                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                            <property name="label" translatable="yes">Remove</property>
+                                          </widget>
+                                          <packing>
+                                            <property name="position">1</property>
+                                          </packing>
+                                        </child>
+                                      </widget>
+                                    </child>
</widget>
<packing>
<property name="position">1</property>
@@ -528,13 +574,80 @@
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                    <property name="label" translatable="yes">Upgrade</property>
<property name="response_id">0</property>
+                                    <child>
+                                      <widget class="GtkHBox" id="hbox8">
+                                        <property name="visible">True</property>
+                                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                        <child>
+                                          <widget class="GtkImage" id="image7">
+                                            <property name="visible">True</property>
+                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                            <property name="xalign">0</property>
+                                            <property name="yalign">0</property>
+                                            <property name="stock">gtk-redo</property>
+                                          </widget>
+                                          <packing>
+                                            <property name="expand">False</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <widget class="GtkLabel" id="label17">
+                                            <property name="visible">True</property>
+                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                            <property name="label" translatable="yes">Upgrade</property>
+                                          </widget>
+                                          <packing>
+                                            <property name="position">1</property>
+                                          </packing>
+                                        </child>
+                                      </widget>
+                                    </child>
</widget>
<packing>
<property name="position">2</property>
</packing>
</child>
+                                <child>
+                                  <widget class="GtkButton" id="quick_readme">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="receives_default">True</property>
+                                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                    <property name="response_id">0</property>
+                                    <child>
+                                      <widget class="GtkHBox" id="hbox9">
+                                        <property name="visible">True</property>
+                                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                        <child>
+                                          <widget class="GtkImage" id="image9">
+                                            <property name="visible">True</property>
+                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                            <property name="xalign">0</property>
+                                            <property name="yalign">0</property>
+                                            <property name="stock">gtk-info</property>
+                                          </widget>
+                                          <packing>
+                                            <property name="expand">False</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <widget class="GtkLabel" id="label19">
+                                            <property name="visible">True</property>
+                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                            <property name="label" translatable="yes">View Readme</property>
+                                          </widget>
+                                          <packing>
+                                            <property name="position">1</property>
+                                          </packing>
+                                        </child>
+                                      </widget>
+                                    </child>
+                                  </widget>
+                                  <packing>
+                                    <property name="position">3</property>
+                                  </packing>
+                                </child>
</widget>
</child>
</widget>
@@ -1397,4 +1510,94 @@
</widget>
</child>
</widget>
+  <widget class="GtkWindow" id="readme_dlg">
+    <property name="width_request">475</property>
+    <property name="height_request">400</property>
+    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+    <property name="border_width">6</property>
+    <child>
+      <widget class="GtkVBox" id="vbox12">
+        <property name="visible">True</property>
+        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+        <child>
+          <widget class="GtkHBox" id="hbox10">
+            <property name="visible">True</property>
+            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+            <child>
+              <widget class="GtkImage" id="image4">
+                <property name="visible">True</property>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <property name="yalign">0</property>
+                <property name="stock">gtk-info</property>
+              </widget>
+              <packing>
+                <property name="expand">False</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="GtkLabel" id="readme_dlg_label">
+                <property name="visible">True</property>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <property name="xpad">6</property>
+                <property name="label" translatable="yes">sdsadsdad</property>
+              </widget>
+              <packing>
+                <property name="expand">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </widget>
+          <packing>
+            <property name="expand">False</property>
+            <property name="padding">3</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="GtkScrolledWindow" id="scrolledwindow6">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+            <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+            <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+            <property name="shadow_type">GTK_SHADOW_IN</property>
+            <child>
+              <widget class="GtkTextView" id="readme_dlg_txtvw">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <property name="editable">False</property>
+              </widget>
+            </child>
+          </widget>
+          <packing>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="GtkHButtonBox" id="hbuttonbox2">
+            <property name="visible">True</property>
+            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+            <property name="layout_style">GTK_BUTTONBOX_END</property>
+            <child>
+              <widget class="GtkButton" id="button1">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <property name="label" translatable="yes">gtk-close</property>
+                <property name="use_stock">True</property>
+                <property name="response_id">0</property>
+                <signal name="clicked" handler="gtk_widget_hide" object="readme_dlg"/>
+              </widget>
+            </child>
+          </widget>
+          <packing>
+            <property name="expand">False</property>
+            <property name="padding">2</property>
+            <property name="position">2</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
</glade-interface>
diff --git a/src/gfpm-interface.c b/src/gfpm-interface.c
index dd720e6..94b0142 100644
--- a/src/gfpm-interface.c
+++ b/src/gfpm-interface.c
@@ -276,7 +276,7 @@ gfpm_interface_init (void)
gtk_window_set_title (GTK_WINDOW(gfpm_mw), title);
g_free (title);
gtk_widget_show (gfpm_mw);
-	gtk_window_present (gfpm_mw);
+	gtk_window_present (GTK_WINDOW(gfpm_mw));

/* unref the glade xml object */
g_object_unref (xml);
@@ -518,6 +518,8 @@ gfpm_load_pkgs_tvw (const char *group_name)
gtk_list_store_clear (GTK_LIST_STORE(model));
icon_yes = gfpm_get_icon (ICON_INSTALLED, 16);
icon_no = gfpm_get_icon (ICON_NINSTALLED, 16);
+	//icon_yes = gtk_widget_render_icon (gfpm_pkgs_tvw, GTK_STOCK_YES, GTK_ICON_SIZE_MENU, NULL);
+	//icon_no = gtk_widget_render_icon (gfpm_pkgs_tvw, GTK_STOCK_NO, GTK_ICON_SIZE_MENU, NULL);
icon_up = gfpm_get_icon (ICON_NEEDUPDATE, 16);
icon_ln = gfpm_get_icon (ICON_LOCALNEWER, 16);
while (gtk_events_pending()) gtk_main_iteration ();
@@ -1198,6 +1200,7 @@ cb_gfpm_pkgs_tvw_selected (GtkTreeSelection *selection, gpointer data)
inst = TRUE;
gfpm_load_files_txtvw (pkgname, inst);
gfpm_load_changelog_txtvw (pkgname, inst);
+
if (v1!=NULL && v2!=NULL)
{
gint ret = pacman_pkg_vercmp (v1, v2);
@@ -1215,6 +1218,25 @@ cb_gfpm_pkgs_tvw_selected (GtkTreeSelection *selection, gpointer data)
up = FALSE;
}
gfpm_quickpane_show (TRUE, inst, up);
+		/* show the 'View Readme' button for packages that have a README.Frugalware */
+		if (inst == TRUE)
+		{
+			char *readme_path = NULL;
+			/* strip the pkgrel from version string */
+			char *ver = g_strdup (v1);
+			char *pkgver;
+			pkgver = strrchr (ver, '-');
+			*pkgver = 0;
+			/* generate the path for the README.Frugalware file */
+			readme_path = g_strdup_printf ("/usr/share/doc/%s-%s/README.Frugalware", pkgname, ver);
+			if (g_file_test (readme_path, G_FILE_TEST_EXISTS))
+			{
+				gfpm_quickpane_readme_btn_show ();
+				gfpm_quickpane_readme_dlg_populate (readme_path);
+			}
+			g_free (readme_path);
+			g_free (ver);
+		}
}
else
{
diff --git a/src/gfpm-quickpane.c b/src/gfpm-quickpane.c
index 088b0bd..de50e78 100644
--- a/src/gfpm-quickpane.c
+++ b/src/gfpm-quickpane.c
@@ -29,15 +29,21 @@ extern GladeXML *xml;
extern GfpmList *install_list;
extern GfpmList *remove_list;
extern GtkWidget *gfpm_pkgs_tvw;
+extern GtkWidget *gfpm_mw;

static GtkWidget *quick_pane;
static GtkWidget *quick_pane_install_btn;
static GtkWidget *quick_pane_remove_btn;
static GtkWidget *quick_pane_upgrade_btn;
+static GtkWidget *quick_pane_readme_btn;
+static GtkWidget *quick_pane_readme_dlg;
+static GtkWidget *quick_pane_readme_dlg_txtvw;
+static GtkWidget *quick_pane_readme_dlg_label;

static void cb_gfpm_quickpane_install_clicked (GtkWidget *button, gpointer data);
static void cb_gfpm_quickpane_remove_clicked (GtkWidget *button, gpointer data);
static void cb_gfpm_quickpane_upgrade_clicked (GtkWidget *button, gpointer data);
+static void cb_gfpm_quickpane_readme_clicked (GtkWidget *button, gpointer data);

void
gfpm_quickpane_init (void)
@@ -45,6 +51,10 @@ gfpm_quickpane_init (void)
quick_pane_install_btn = glade_xml_get_widget (xml, "quick_install");
quick_pane_remove_btn = glade_xml_get_widget (xml, "quick_remove");
quick_pane_upgrade_btn = glade_xml_get_widget (xml, "quick_upgrade");
+	quick_pane_readme_btn = glade_xml_get_widget (xml, "quick_readme");
+	quick_pane_readme_dlg = glade_xml_get_widget (xml, "readme_dlg");
+	quick_pane_readme_dlg_label = glade_xml_get_widget (xml, "readme_dlg_label");
+	quick_pane_readme_dlg_txtvw = glade_xml_get_widget (xml, "readme_dlg_txtvw");
quick_pane = glade_xml_get_widget (xml, "quick_pane");
gfpm_quickpane_show (FALSE, 0, 0);
g_signal_connect (G_OBJECT(quick_pane_install_btn),
@@ -59,6 +69,18 @@ gfpm_quickpane_init (void)
"clicked",
G_CALLBACK(cb_gfpm_quickpane_upgrade_clicked),
NULL);
+	g_signal_connect (G_OBJECT(quick_pane_readme_btn),
+					"clicked",
+					G_CALLBACK(cb_gfpm_quickpane_readme_clicked),
+					NULL);
+
+	return;
+}
+
+void
+gfpm_quickpane_readme_btn_show (void)
+{
+	gtk_widget_show (quick_pane_readme_btn);

return;
}
@@ -84,6 +106,7 @@ gfpm_quickpane_show (gboolean show, gboolean what, gboolean upgrade)
gtk_widget_hide (quick_pane_upgrade_btn);
gtk_widget_show (quick_pane_install_btn);
}
+		gtk_widget_hide (quick_pane_readme_btn);
}
else
{
@@ -93,6 +116,51 @@ gfpm_quickpane_show (gboolean show, gboolean what, gboolean upgrade)
return;
}

+void
+gfpm_quickpane_readme_dlg_populate (const char *pathname)
+{
+	GtkTextBuffer	*buffer;
+	GtkTextIter		iter;
+
+	buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(quick_pane_readme_dlg_txtvw));
+	gtk_text_buffer_set_text (buffer, "", 0);
+	gtk_text_buffer_get_iter_at_offset (buffer, &iter, 0);
+	gtk_label_set_text (GTK_LABEL(quick_pane_readme_dlg_label), pathname);
+	if (g_file_test (pathname, G_FILE_TEST_EXISTS))
+	{
+		FILE *fp = NULL;
+		gchar line[PATH_MAX+1];
+		if ((fp = fopen(pathname, "r")) == NULL)
+		{
+			gtk_text_buffer_insert (buffer, &iter, _("No Readme available for this package"), -1);
+		}
+		else
+		{
+			while (!feof(fp))
+			{
+				fgets (line, PATH_MAX, fp);
+				gtk_text_buffer_insert (buffer, &iter, line, -1);
+				line[0] = 0;
+			}
+			fclose (fp);
+		}
+	}
+	else
+	{
+		gtk_text_buffer_insert (buffer, &iter, _("Package is not installed"), -1);
+	}
+
+	return;
+}
+
+void
+gfpm_quickpane_readme_dlg_show (void)
+{
+	gtk_window_set_transient_for (GTK_WINDOW(quick_pane_readme_dlg), GTK_WINDOW(gfpm_mw));
+	gtk_widget_show (quick_pane_readme_dlg);
+
+	return;
+}

/* CALLBACKS */

@@ -132,3 +200,11 @@ cb_gfpm_quickpane_upgrade_clicked (GtkWidget *button, gpointer data)
return;
}

+static void
+cb_gfpm_quickpane_readme_clicked (GtkWidget *button, gpointer data)
+{
+	gfpm_quickpane_readme_dlg_show ();
+
+	return;
+}
+
diff --git a/src/gfpm-quickpane.h b/src/gfpm-quickpane.h
index f487233..a7855ab 100644
--- a/src/gfpm-quickpane.h
+++ b/src/gfpm-quickpane.h
@@ -8,7 +8,13 @@

void gfpm_quickpane_init (void);

+void gfpm_quickpane_readme_btn_show (void);
+
void gfpm_quickpane_show (gboolean, gboolean, gboolean);

+void gfpm_quickpane_readme_dlg_populate (const char *);
+
+void gfpm_quickpane_readme_dlg_show (void);
+
#endif


More information about the Frugalware-git mailing list