[yast-commit] r61551 - in /trunk/gtk: ./ src/pkg/

Author: rpmcruz Date: Thu Apr 1 00:12:18 2010 New Revision: 61551 URL: http://svn.opensuse.org/viewcvs/yast?rev=61551&view=rev Log: * src/ygtkpkghistorydialog.h/cc: fate#305859 and as requested by Atri: added Extras > Show History of Changes menu item. Added: trunk/gtk/src/pkg/ygtkpkghistorydialog.cc trunk/gtk/src/pkg/ygtkpkghistorydialog.h Modified: trunk/gtk/ChangeLog trunk/gtk/src/pkg/CMakeLists.txt trunk/gtk/src/pkg/ygtkpkgmenubar.cc trunk/gtk/src/pkg/ygtkpkgproductdialog.cc trunk/gtk/src/pkg/ygtkpkgstatusbar.cc Modified: trunk/gtk/ChangeLog URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/ChangeLog?rev=61551&r1=61... ============================================================================== --- trunk/gtk/ChangeLog (original) +++ trunk/gtk/ChangeLog Thu Apr 1 00:12:18 2010 @@ -1,3 +1,9 @@ +2010-03-31 Ricardo Cruz <rpmcruz@alunos.dcc.fc.up.pt> + + * src/ygtkpkghistorydialog.h/cc: fate#305859 and + as requested by Atri: added Extras > Show History + of Changes menu item. + 2010-03-25 Ricardo Cruz <rpmcruz@alunos.dcc.fc.up.pt> * src/pkg/ygtkpkglistview.cc: allocate sufficient memory Modified: trunk/gtk/src/pkg/CMakeLists.txt URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/pkg/CMakeLists.txt?rev=61... ============================================================================== --- trunk/gtk/src/pkg/CMakeLists.txt (original) +++ trunk/gtk/src/pkg/CMakeLists.txt Thu Apr 1 00:12:18 2010 @@ -4,6 +4,7 @@ YGPackageSelector.cc YGPackageSelectorPluginImpl.cc ygtkpkgdetailview.cc + ygtkpkghistorydialog.cc ygtkpkglistview.cc ygtkpkgfilterview.cc ygtkpkglanguageview.cc Added: trunk/gtk/src/pkg/ygtkpkghistorydialog.cc URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/pkg/ygtkpkghistorydialog.... ============================================================================== --- trunk/gtk/src/pkg/ygtkpkghistorydialog.cc (added) +++ trunk/gtk/src/pkg/ygtkpkghistorydialog.cc Thu Apr 1 00:12:18 2010 @@ -0,0 +1,192 @@ +/******************************************************************** + * YaST2-GTK - http://en.opensuse.org/YaST2-GTK * + ********************************************************************/ +/* Textdomain "yast2-gtk" */ +/* YGtkPkgMenuBar, menu bar */ +// check the header file for information about this widget + +#include "YGi18n.h" +#include "config.h" +#include "YGDialog.h" +#include "ygtkpkghistorydialog.h" +#include <gtk/gtk.h> +#include "ygtkrichtext.h" + +#include <zypp/parser/HistoryLogReader.h> +#define FILENAME "/var/log/zypp/history" + +static void selection_changed_cb (GtkTreeSelection *selection, YGtkRichText *text) +{ + GtkTreeModel *model; + GtkTreeIter iter; + if (gtk_tree_selection_get_selected (selection, &model, &iter)) { + char *date; + gtk_tree_model_get (model, &iter, 0, &date, -1); + + GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text)); + GtkTextMark *mark = gtk_text_buffer_get_mark (buffer, date); + gtk_text_view_scroll_to_mark (GTK_TEXT_VIEW (text), mark, 0, TRUE, 0, 0); + g_free (date); + } +} + +struct Handler +{ + Handler (GtkListStore *store, GtkTextBuffer *buffer) + : store (store), buffer (buffer) + {} + + bool operator() (const zypp::HistoryItem::Ptr &item) + { + std::string _date (item->date.form ("%d %B %Y")); + bool new_date = date != _date; + + GtkTextIter text_iter; + gtk_text_buffer_get_end_iter (buffer, &text_iter); + + if (new_date) { + date = _date; + GtkTreeIter list_iter; + gtk_list_store_append (store, &list_iter); + gtk_list_store_set (store, &list_iter, + 0, date.c_str(), -1); + + gtk_text_buffer_create_mark (buffer, date.c_str(), &text_iter, TRUE); + gtk_text_buffer_insert (buffer, &text_iter, (date + "\n").c_str(), -1); + } + + std::string line; + line.reserve (1024); + line = "\t"; + switch (item->action.toEnum()) { + case zypp::HistoryActionID::NONE_e: + break; + case zypp::HistoryActionID::INSTALL_e: { + zypp::HistoryItemInstall *_item = + static_cast <zypp::HistoryItemInstall *> (item.get()); + line += _("install"); line += " "; + line += _item->name + " "; + line += _item->edition.version(); + break; + } + case zypp::HistoryActionID::REMOVE_e: { + zypp::HistoryItemRemove *_item = + static_cast <zypp::HistoryItemRemove *> (item.get()); + line += _("remove"); line += " "; + line += _item->name + " "; + line += _item->edition.version(); + break; + } + case zypp::HistoryActionID::REPO_ADD_e: { + zypp::HistoryItemRepoAdd *_item = + static_cast <zypp::HistoryItemRepoAdd *> (item.get()); + line += _("add repository"); line += " "; + line += _item->alias; + break; + } + case zypp::HistoryActionID::REPO_REMOVE_e: { + zypp::HistoryItemRepoRemove *_item = + static_cast <zypp::HistoryItemRepoRemove *> (item.get()); + line += _("remove repository"); line += " "; + line += _item->alias; + break; + } + case zypp::HistoryActionID::REPO_CHANGE_ALIAS_e: { + zypp::HistoryItemRepoAliasChange *_item = + static_cast <zypp::HistoryItemRepoAliasChange *> (item.get()); + gchar *str = g_strdup_printf ("change repository %s alias: %s", + _item->oldalias.c_str(), _item->newalias.c_str()); + line += str; + g_free (str); + break; + } + case zypp::HistoryActionID::REPO_CHANGE_URL_e: { + zypp::HistoryItemRepoUrlChange *_item = + static_cast <zypp::HistoryItemRepoUrlChange *> (item.get()); + gchar *str = g_strdup_printf ("change repository %s url: %s", + _item->alias.c_str(), _item->newurl.asString().c_str()); + line += str; + g_free (str); + break; + } + } + line += "\n"; + gtk_text_buffer_insert (buffer, &text_iter, line.c_str(), -1); + return true; + } + + GtkListStore *store; + GtkTextBuffer *buffer; + std::string date; +}; + + +YGtkPkgHistoryDialog::YGtkPkgHistoryDialog() +{ + GtkWidget *text = ygtk_rich_text_new(); + GtkWidget *text_scroll = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (text_scroll), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_set_shadow_type ( + GTK_SCROLLED_WINDOW (text_scroll), GTK_SHADOW_IN); + gtk_container_add (GTK_CONTAINER (text_scroll), text); + + GtkListStore *store = gtk_list_store_new (1, G_TYPE_STRING); + GtkWidget *date_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store)); + g_object_unref (G_OBJECT (store)); + gtk_tree_view_set_search_column (GTK_TREE_VIEW (date_view), 0); + gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (date_view), FALSE); + + GtkCellRenderer *renderer = gtk_cell_renderer_text_new(); + GtkTreeViewColumn *column = gtk_tree_view_column_new_with_attributes ( + NULL, renderer, "text", 0, NULL); + gtk_tree_view_append_column (GTK_TREE_VIEW (date_view), column); + + //gtk_tree_view_column_set_sort_column_id (column, 1); + gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_set_fixed_height_mode (GTK_TREE_VIEW (date_view), TRUE); + + GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (date_view)); + g_signal_connect (G_OBJECT (selection), "changed", + G_CALLBACK (selection_changed_cb), text); + + GtkWidget *date_scroll = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (date_scroll), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_set_shadow_type ( + GTK_SCROLLED_WINDOW (date_scroll), GTK_SHADOW_IN); + gtk_container_add (GTK_CONTAINER (date_scroll), date_view); + + GtkWidget *dialog = gtk_message_dialog_new (YGDialog::currentWindow(), + GtkDialogFlags (0), GTK_MESSAGE_OTHER, GTK_BUTTONS_CLOSE, _("History of Changes")); + gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), FILENAME); + gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_CLOSE); + gtk_window_set_resizable (GTK_WINDOW (dialog), TRUE); + gtk_window_set_default_size (GTK_WINDOW (dialog), 600, 500); + + GtkWidget *hpaned = gtk_hpaned_new(); + gtk_paned_pack1 (GTK_PANED (hpaned), date_scroll, FALSE, FALSE); + gtk_paned_pack2 (GTK_PANED (hpaned), text_scroll, TRUE, FALSE); + gtk_paned_set_position (GTK_PANED (hpaned), 220); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hpaned); + + Handler handler (store, gtk_text_view_get_buffer (GTK_TEXT_VIEW (text))); + zypp::parser::HistoryLogReader parser (FILENAME, boost::ref (handler)); + try { + parser.readAll(); + } + catch (const zypp::Exception &ex) { + yuiWarning () << "Error: Could not load log file" << FILENAME << ": " + << ex.asUserHistory() << std::endl; + } + + gtk_widget_show_all (dialog); + m_dialog = dialog; +} + +YGtkPkgHistoryDialog::~YGtkPkgHistoryDialog() +{ gtk_widget_destroy (m_dialog); } + +void YGtkPkgHistoryDialog::popup() +{ gtk_dialog_run (GTK_DIALOG (m_dialog)); } + Added: trunk/gtk/src/pkg/ygtkpkghistorydialog.h URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/pkg/ygtkpkghistorydialog.... ============================================================================== --- trunk/gtk/src/pkg/ygtkpkghistorydialog.h (added) +++ trunk/gtk/src/pkg/ygtkpkghistorydialog.h Thu Apr 1 00:12:18 2010 @@ -0,0 +1,26 @@ +/******************************************************************** + * YaST2-GTK - http://en.opensuse.org/YaST2-GTK * + ********************************************************************/ + +/* Show /var/log/zypp/history. + Uses zypp::parser::HistoryLogReader. +*/ + +#ifndef YGTK_PKG_HISTORY_DIALOG_H +#define YGTK_PKG_HISTORY_DIALOG_H + +#include <gtk/gtkwidget.h> + +struct YGtkPkgHistoryDialog +{ + YGtkPkgHistoryDialog(); + ~YGtkPkgHistoryDialog(); + + void popup(); + +private: + GtkWidget *m_dialog; +}; + +#endif + Modified: trunk/gtk/src/pkg/ygtkpkgmenubar.cc URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/pkg/ygtkpkgmenubar.cc?rev... ============================================================================== --- trunk/gtk/src/pkg/ygtkpkgmenubar.cc (original) +++ trunk/gtk/src/pkg/ygtkpkgmenubar.cc Thu Apr 1 00:12:18 2010 @@ -524,6 +524,15 @@ static void show_pkg_changes_cb() { YGPackageSelector::get()->popupChanges(); } + +#include "ygtkpkghistorydialog.h" + +static void show_log_changes_cb() +{ + YGtkPkgHistoryDialog dialog; + dialog.popup(); +} + static void reset_ignored_dependency_conflicts_cb() { zypp::getZYpp()->resolver()->undo(); } @@ -589,6 +598,8 @@ G_CALLBACK (show_products_cb), this); append_menu_item (submenu, _("Show Package Changes"), NULL, G_CALLBACK (show_pkg_changes_cb), this); + append_menu_item (submenu, _("Show History of Changes"), NULL, + G_CALLBACK (show_log_changes_cb), this); append_menu_item (submenu, NULL, NULL, NULL, NULL); append_menu_item (submenu, _("Install All Matching -devel Packages"), NULL, G_CALLBACK (install_all_devel_pkgs_cb), this); Modified: trunk/gtk/src/pkg/ygtkpkgproductdialog.cc URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/pkg/ygtkpkgproductdialog.... ============================================================================== --- trunk/gtk/src/pkg/ygtkpkgproductdialog.cc (original) +++ trunk/gtk/src/pkg/ygtkpkgproductdialog.cc Thu Apr 1 00:12:18 2010 @@ -153,7 +153,7 @@ gtk_container_add (GTK_CONTAINER (scroll), view); GtkWidget *dialog = gtk_message_dialog_new (YGDialog::currentWindow(), - GtkDialogFlags (0), GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, _("Product Listing")); + GtkDialogFlags (0), GTK_MESSAGE_OTHER, GTK_BUTTONS_CLOSE, _("Product Listing")); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_CLOSE); gtk_window_set_resizable (GTK_WINDOW (dialog), TRUE); gtk_window_set_default_size (GTK_WINDOW (dialog), 600, 500); Modified: trunk/gtk/src/pkg/ygtkpkgstatusbar.cc URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/pkg/ygtkpkgstatusbar.cc?r... ============================================================================== --- trunk/gtk/src/pkg/ygtkpkgstatusbar.cc (original) +++ trunk/gtk/src/pkg/ygtkpkgstatusbar.cc Thu Apr 1 00:12:18 2010 @@ -86,7 +86,7 @@ const char *action = getStatusAction (sel); gchar *str; if (sel->toModifyAuto()) - str = g_strdup_printf (_("<b>%s</b> %d predefined packages"), action, auto_count); + str = g_strdup_printf (_("<b>%s</b> %d preselected packages"), action, auto_count); else { const char *format; if (auto_count > 1) -- To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org For additional commands, e-mail: yast-commit+help@opensuse.org
participants (1)
-
rpmcruz@svn.opensuse.org