Author: rpmcruz
Date: Tue Jan 8 07:25:43 2008
New Revision: 43313
URL: http://svn.opensuse.org/viewcvs/yast?rev=43313&view=rev
Log:
* src/YGUI.h/cc: keep up with libyui: file dialogs moved to YApplication.
* src/YGPackageSelector.cc (ChangesPane, Filters & PackageDetails): don't
enable package management for patches.
* src/yzyppwrapper.cc: show summary on patches list, and show reboot needed
info on description text.
Modified:
trunk/gtk/ChangeLog
trunk/gtk/src/YGPackageSelector.cc
trunk/gtk/src/YGUI.cc
trunk/gtk/src/YGUI.h
trunk/gtk/src/yzyppwrapper.cc
Modified: trunk/gtk/ChangeLog
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/ChangeLog?rev=43313&r1=43312&r2=43313&view=diff
==============================================================================
--- trunk/gtk/ChangeLog (original)
+++ trunk/gtk/ChangeLog Tue Jan 8 07:25:43 2008
@@ -1,3 +1,12 @@
+2007-01-08 Ricardo Cruz
+
+ * src/YGUI.h/cc: keep up with libyui: file dialogs moved to YApplication.
+
+ * src/YGPackageSelector.cc (ChangesPane, Filters & PackageDetails): don't
+ enable package management for patches.
+ * src/yzyppwrapper.cc: show summary on patches list, and show reboot needed
+ info on description text.
+
2007-01-05 Ricardo Cruz
* src/yzyppwrapper (Query): reordered query checks for performance.
Modified: trunk/gtk/src/YGPackageSelector.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/YGPackageSelector.cc?rev=43313&r1=43312&r2=43313&view=diff
==============================================================================
--- trunk/gtk/src/YGPackageSelector.cc (original)
+++ trunk/gtk/src/YGPackageSelector.cc Tue Jan 8 07:25:43 2008
@@ -378,7 +378,12 @@
Ypp::Query *query = new Ypp::Query();
query->setIsModified (true);
- m_pool = new Ypp::Pool (query, !update_mode);
+ if (update_mode) {
+ query->addType (Ypp::Package::PATCH_TYPE);
+ m_pool = new Ypp::Pool (query);
+ }
+ else
+ m_pool = new Ypp::Pool (query, true);
// initialize list -- there could already be packages modified
for (Ypp::Pool::Iter it = m_pool->getFirst(); it; it = m_pool->getNext (it))
ChangesPane::entryInserted (it, m_pool->get (it));
@@ -814,6 +819,7 @@
Listener *m_listener;
guint timeout_id;
int m_selectedType;
+ bool m_updateMode;
public:
GtkWidget *getCollectionWidget() { return m_collection->getWidget(); }
@@ -823,7 +829,7 @@
GtkWidget *getTypeWidget() { return m_type; }
Filters (bool update_mode)
- : m_listener (NULL), timeout_id (0), m_selectedType (-1)
+ : m_listener (NULL), timeout_id (0), m_selectedType (-1), m_updateMode (update_mode)
{
m_collection = new Collections (this);
m_statuses = new StatusButtons (this);
@@ -851,12 +857,14 @@
G_CALLBACK (combo_changed_cb), this);
m_type = gtk_combo_box_new_text();
- gtk_combo_box_append_text (GTK_COMBO_BOX (m_type), _("Categories"));
- gtk_combo_box_append_text (GTK_COMBO_BOX (m_type), _("Patterns"));
- gtk_combo_box_append_text (GTK_COMBO_BOX (m_type), _("Languages"));
if (update_mode)
gtk_combo_box_append_text (GTK_COMBO_BOX (m_type), _("Patches"));
- gtk_combo_box_set_active (GTK_COMBO_BOX (m_type), update_mode ? 3 : 0);
+ else {
+ gtk_combo_box_append_text (GTK_COMBO_BOX (m_type), _("Categories"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (m_type), _("Patterns"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (m_type), _("Languages"));
+ }
+ gtk_combo_box_set_active (GTK_COMBO_BOX (m_type), 0);
g_signal_connect_after (G_OBJECT (m_type), "changed",
G_CALLBACK (combo_changed_cb), this);
}
@@ -884,8 +892,11 @@
{
if (!m_listener) return;
- Ypp::Package::Type type = (Ypp::Package::Type)
- gtk_combo_box_get_active (GTK_COMBO_BOX (m_type));
+ Ypp::Package::Type type;
+ if (m_updateMode)
+ type = Ypp::Package::PATCH_TYPE;
+ else
+ type = (Ypp::Package::Type) gtk_combo_box_get_active (GTK_COMBO_BOX (m_type));
// adjust interface
if (type != m_selectedType) {
@@ -1257,18 +1268,22 @@
GtkWidget *getWidget()
{ return m_widget; }
- PackageDetails (Filters *filters)
+ PackageDetails (Filters *filters, bool update_mode)
{
m_control = new PackageControl (filters);
m_widget = gtk_notebook_new();
gtk_notebook_set_tab_pos (GTK_NOTEBOOK (m_widget), GTK_POS_BOTTOM);
addPage (_("Status"), m_control->getWidget());
addPage (_("Description"), createHtmlWidget (&m_description));
- addPage (_("File List"), createHtmlWidget (&m_filelist));
- addPage (_("ChangeLog"), createHtmlWidget (&m_changelog));
- addPage (_("Authors"), createHtmlWidget (&m_authors));
- ygtk_html_wrap_connect_link_clicked (m_filelist,
- G_CALLBACK (path_pressed_cb), NULL);
+ if (update_mode)
+ m_filelist = m_changelog = m_authors = NULL;
+ else {
+ addPage (_("File List"), createHtmlWidget (&m_filelist));
+ addPage (_("ChangeLog"), createHtmlWidget (&m_changelog));
+ addPage (_("Authors"), createHtmlWidget (&m_authors));
+ ygtk_html_wrap_connect_link_clicked (m_filelist,
+ G_CALLBACK (path_pressed_cb), NULL);
+ }
}
void setPackages (std::list packages)
@@ -1281,10 +1296,10 @@
m_control->setPackages (packages);
Ypp::Package *package = packages.front();
if (package) {
- setText (m_description, package->description());
- setText (m_filelist, package->filelist());
- setText (m_changelog, package->changelog());
- setText (m_authors, package->authors());
+ setText (m_description, package->description(), false);
+ setText (m_filelist, package->filelist(), true);
+ setText (m_changelog, package->changelog(), true);
+ setText (m_authors, package->authors(), false);
if (!GTK_WIDGET_VISIBLE (m_widget)) {
gtk_notebook_set_current_page (GTK_NOTEBOOK (m_widget), 0);
gtk_widget_show (m_widget);
@@ -1325,14 +1340,17 @@
gtk_notebook_append_page (GTK_NOTEBOOK (m_widget), content, gtk_label_new (title));
}
- void setText (GtkWidget *rtext, const std::string &text)
+ void setText (GtkWidget *rtext, const std::string &text, bool only_availables)
{
+ if (!rtext) return;
+ const char *str = text.c_str();
if (text.empty()) {
- const char *empty = _("<i>(only available for installed packages)</i>");
- ygtk_html_wrap_set_text (rtext, empty);
+ if (only_availables)
+ str = _("<i>(only available for installed packages)</i>");
+ else
+ str = "--";
}
- else
- ygtk_html_wrap_set_text (rtext, text.c_str());
+ ygtk_html_wrap_set_text (rtext, str);
ygtk_html_wrap_scroll (rtext, TRUE);
}
};
@@ -1480,7 +1498,7 @@
{
m_packages = new PackagesView();
m_filters = new Filters (update_mode);
- m_details = new PackageDetails (m_filters);
+ m_details = new PackageDetails (m_filters, update_mode);
m_disk = new DiskView();
m_changes = new ChangesPane (update_mode);
m_packages->setListener (this);
Modified: trunk/gtk/src/YGUI.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/YGUI.cc?rev=43313&r1=43312&r2=43313&view=diff
==============================================================================
--- trunk/gtk/src/YGUI.cc (original)
+++ trunk/gtk/src/YGUI.cc Tue Jan 8 07:25:43 2008
@@ -14,6 +14,9 @@
#include
#include
+static std::string askForFileOrDirectory (GtkFileChooserAction action,
+ const std::string &path, const std::string &filter, const std::string &title);
+
#define DEFAULT_MACRO_FILE_NAME "macro.ycp"
#define BUSY_CURSOR_TIMEOUT 250
@@ -267,112 +270,6 @@
abort(); // going down
}
-/* File/directory dialogs. */
-#include <sstream>
-
-static YCPValue askForFileOrDirectory (GtkFileChooserAction action,
- const YCPString &path, const YCPString &filter_pattern,
- const YCPString &title)
-{
- IMPL
- GtkWidget *dialog;
- dialog = gtk_file_chooser_dialog_new (title->value_cstr(),
- YGDialog::currentWindow(), action, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- action == GTK_FILE_CHOOSER_ACTION_SAVE ? GTK_STOCK_SAVE : GTK_STOCK_OPEN,
- GTK_RESPONSE_ACCEPT, NULL);
- gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (dialog), TRUE);
-
- // Yast likes to pass the path and suggested filename as a whole. We will need to
- // split that up for GTK+.
- string dirpath (path->value()), filename;
- if (!dirpath.empty()) {
- string::size_type i;
- // we don't support local paths
- if (dirpath [0] != '/') {
- filename = dirpath;
- dirpath = "";
- }
- else if (!(g_file_test (dirpath.c_str(), G_FILE_TEST_IS_DIR))) {
- i = dirpath.find_last_of ("/");
- if (i == string::npos) {
- filename = dirpath;
- dirpath = "";
- }
- else {
- string path (dirpath);
- dirpath = path.substr (0, i+1);
- filename = path.substr (i+1);
- }
- }
-
- // check if dirpath and filename are valid
- if (!dirpath.empty())
- if (!g_file_test (dirpath.c_str(), G_FILE_TEST_IS_DIR)) {
- y2warning ("Path passed to file dialog isn't valid: '%s'", path->value_cstr());
- dirpath = "";
- }
- i = filename.find ("/");
- if (i != string::npos) {
- y2warning ("Path passed to file dialog isn't valid: '%s'", path->value_cstr());
- filename = "";
- }
- }
-
- if (!dirpath.empty())
- gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), dirpath.c_str());
- if (!filename.empty())
- gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), filename.c_str());
-
- string filter_str (filter_pattern->value());
- if (filter_str != "" && filter_str != "*") {
- GtkFileFilter *filter = gtk_file_filter_new();
- gtk_file_filter_set_name (filter, filter_str.c_str());
- // cut filter_pattern into chuncks like GTK likes
- std::istringstream stream (filter_str);
- while (!stream.eof()) {
- string str;
- stream >> str;
- if (!str.empty() && str [str.size()-1] == ',')
- str.erase (str.size()-1);
- gtk_file_filter_add_pattern (filter, str.c_str());
- }
- gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter);
- }
-
- if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) {
- char* filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
- YCPString ret (filename);
- g_free (filename);
-
- gtk_widget_destroy (dialog);
- return ret;
- }
- gtk_widget_destroy (dialog);
- return YCPVoid();
-}
-
-YCPValue YGUI::askForExistingDirectory (const YCPString &path,
- const YCPString &title)
-{
- IMPL
- return askForFileOrDirectory (GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, path,
- YCPString (""), title);
-}
-
-YCPValue YGUI::askForExistingFile (const YCPString &path,
- const YCPString &filter, const YCPString &title)
-{
- IMPL
- return askForFileOrDirectory (GTK_FILE_CHOOSER_ACTION_OPEN, path, filter, title);
-}
-
-YCPValue YGUI::askForSaveFileName (const YCPString &path,
- const YCPString &filter, const YCPString &title)
-{
- IMPL
- return askForFileOrDirectory (GTK_FILE_CHOOSER_ACTION_SAVE, path, filter, title);
-}
-
gboolean YGUI::busy_timeout_cb (gpointer data)
{
YGUI *pThis = (YGUI *) data;
@@ -481,15 +378,13 @@
}
y2debug ("screenshot: %s", filename.c_str());
- YCPValue ret = askForSaveFileName (YCPString (filename.c_str()),
- YCPString ("*.png"),
- YCPString ("Save screenshot to"));
- if (!ret->isString()) { // user dismissed the dialog
+ filename = askForFileOrDirectory (
+ GTK_FILE_CHOOSER_ACTION_SAVE, "", "*.png", "Save screenshot to");
+ if (filename.empty()) { // user dismissed the dialog
y2debug ("Save screen shot canceled by user");
goto makeScreenShot_ret;
}
- filename = ret->asString()->value();
screenShotNb.erase (baseName);
screenShotNb[baseName] = nb + 1;
}
@@ -561,42 +456,35 @@
gtk_widget_destroy (dialog);
}
else {
- YCPValue ret = askForSaveFileName (YCPString (DEFAULT_MACRO_FILE_NAME),
- YCPString ("*.ycp"),
- YCPString ("Select Macro File to Record to"));
- if (ret->isString()) {
- YCPString filename = ret->asString();
- recordMacro (filename->value_cstr());
- }
+ string filename = askForFileOrDirectory (GTK_FILE_CHOOSER_ACTION_SAVE,
+ DEFAULT_MACRO_FILE_NAME, "*.ycp", "Select Macro File to Record to");
+ if (!filename.empty())
+ recordMacro (filename);
}
}
void YGUI::askPlayMacro()
{
- YCPValue ret = askForExistingFile (YCPString (DEFAULT_MACRO_FILE_NAME),
- YCPString ("*.ycp"), YCPString ("Select Macro File to Play"));
-
- if (ret->isString()) {
+ string filename = askForFileOrDirectory (GTK_FILE_CHOOSER_ACTION_OPEN,
+ DEFAULT_MACRO_FILE_NAME, "*.ycp", "Select Macro File to Play");
+ if (!filename.empty()) {
busyCursor();
- YCPString filename = ret->asString();
-
- playMacro (filename->value_cstr());
+ playMacro (filename);
sendEvent (new YEvent()); // flush
}
}
void YGUI::askSaveLogs()
{
- YCPValue file = askForSaveFileName (YCPString ("/tmp/y2logs.tgz"),
- YCPString ("*.tgz *.tar.gz"), YCPString ("Save y2logs to..."));
-
- if (file->isString()) {
+ string filename = askForFileOrDirectory (GTK_FILE_CHOOSER_ACTION_SAVE,
+ "/tmp/y2logs.tgz", "*.tgz *.tar.gz", "Save y2logs to...");
+ if (!filename.empty()) {
std::string command = "/sbin/save_y2logs";
- command += " '" + file->asString()->value() + "'";
+ command += " '" + filename + "'";
y2milestone ("Saving y2logs: %s", command.c_str());
int ret = system (command.c_str());
if (ret == 0)
- y2milestone ("y2logs saved to %s", file->asString()->value_cstr());
+ y2milestone ("y2logs saved to %s", filename.c_str());
else {
char *error = g_strdup_printf (
"Error: couldn't save y2logs: \"%s\" (exit value: %d)",
@@ -608,11 +496,97 @@
}
}
+//** YGApplication
+
YGApplication::YGApplication()
{
setIconBasePath (ICON_DIR);
}
+/* File/directory dialogs. */
+#include <sstream>
+
+std::string askForFileOrDirectory (GtkFileChooserAction action,
+ const std::string &path, const std::string &filter, const std::string &title)
+{
+ IMPL
+ GtkWidget *dialog;
+ dialog = gtk_file_chooser_dialog_new (title.c_str(),
+ YGDialog::currentWindow(), action, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ action == GTK_FILE_CHOOSER_ACTION_SAVE ? GTK_STOCK_SAVE : GTK_STOCK_OPEN,
+ GTK_RESPONSE_ACCEPT, NULL);
+ gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (dialog), TRUE);
+
+ // filepath can be a dir or a file path, split that up
+ string dirname, filename;
+ if (!path.empty()) {
+ if (path[0] != '/')
+ y2warning ("FileDialog: Relative paths are unsupported: '%s'", path.c_str());
+ else if (!g_file_test (path.c_str(), G_FILE_TEST_EXISTS))
+ y2warning ("FileDialog: Path doesn't exist: '%s'", path.c_str());
+ else if (g_file_test (path.c_str(), G_FILE_TEST_IS_DIR))
+ dirname = path;
+ else { // its a file
+ string::size_type i = path.find_last_of ("/");
+ if (i != string::npos) {
+ dirname = path.substr (0, i+1);
+ filename = path.substr (i+1);
+ }
+ }
+ }
+
+ if (!dirname.empty())
+ gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), dirname.c_str());
+ if (!filename.empty())
+ gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), filename.c_str());
+
+ if (!filter.empty() && filter != "*") {
+ GtkFileFilter *gtk_filter = gtk_file_filter_new();
+ gtk_file_filter_set_name (gtk_filter, filter.c_str());
+ // cut filter_pattern into chuncks like GTK likes
+ std::istringstream stream (filter);
+ while (!stream.eof()) {
+ string str;
+ stream >> str;
+ if (!str.empty() && str [str.size()-1] == ',')
+ str.erase (str.size()-1);
+ gtk_file_filter_add_pattern (gtk_filter, str.c_str());
+ }
+ gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), gtk_filter);
+ }
+
+ std::string ret;
+ if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) {
+ char* filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
+ ret = filename;
+ g_free (filename);
+ }
+ gtk_widget_destroy (dialog);
+ return ret;
+}
+
+std::string YGApplication::askForExistingDirectory (
+ const std::string &path, const std::string &title)
+{
+ IMPL
+ return askForFileOrDirectory (GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, path,
+ "", title);
+}
+
+std::string YGApplication::askForExistingFile (
+ const std::string &path, const std::string &filter, const std::string &title)
+{
+ IMPL
+ return askForFileOrDirectory (GTK_FILE_CHOOSER_ACTION_OPEN, path, filter, title);
+}
+
+std::string YGApplication::askForSaveFileName (
+ const std::string &path, const std::string &filter, const std::string &title)
+{
+ IMPL
+ return askForFileOrDirectory (GTK_FILE_CHOOSER_ACTION_SAVE, path, filter, title);
+}
+
YWidgetFactory *YGUI::createWidgetFactory()
{ return new YGWidgetFactory; }
YOptionalWidgetFactory *YGUI::createOptionalWidgetFactory()
Modified: trunk/gtk/src/YGUI.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/YGUI.h?rev=43313&r1=43312&r2=43313&view=diff
==============================================================================
--- trunk/gtk/src/YGUI.h (original)
+++ trunk/gtk/src/YGUI.h Tue Jan 8 07:25:43 2008
@@ -87,13 +87,6 @@
virtual void beep();
virtual YCPValue runPkgSelection (YWidget *packageSelector);
- virtual YCPValue askForExistingDirectory (const YCPString &startDir,
- const YCPString &headline);
- virtual YCPValue askForExistingFile (const YCPString &startWith,
- const YCPString &filter, const YCPString &headline);
- virtual YCPValue askForSaveFileName (const YCPString &startWith,
- const YCPString & filter, const YCPString &headline);
-
void toggleRecordMacro();
// Plays a macro, opening a dialog first to ask for the filename
@@ -237,6 +230,13 @@
{
public:
YGApplication();
+
+ virtual std::string askForExistingDirectory (const std::string &startDir,
+ const std::string &headline);
+ virtual std::string askForExistingFile (const std::string &startWith,
+ const std::string &filter, const std::string &headline);
+ virtual std::string askForSaveFileName (const std::string &startWith,
+ const std::string &filter, const std::string &headline);
};
#endif /*YGUI_H*/
Modified: trunk/gtk/src/yzyppwrapper.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/yzyppwrapper.cc?rev=43313&r1=43312&r2=43313&view=diff
==============================================================================
--- trunk/gtk/src/yzyppwrapper.cc (original)
+++ trunk/gtk/src/yzyppwrapper.cc Tue Jan 8 07:25:43 2008
@@ -248,7 +248,7 @@
{
std::string &ret = impl->summary;
if (ret.empty()) {
- if (impl->type == PACKAGE_TYPE)
+ if (impl->type == PACKAGE_TYPE || impl->type == PATCH_TYPE)
ret = impl->zyppSel->theObj()->summary();
}
return ret;
@@ -263,15 +263,9 @@
const char *header = "<!-- DT:Rich -->", header_len = 16;
if (!text.compare (0, header_len, header, header_len))
text.erase (0, header_len);
- else {
+ else
// add breakline for every double one...
YGUtils::replace (text, "\n\n", 2, "<br>");
-/* std::string::size_type i = 0;
- while ((i = text.find ("\n\n", i)) < std::string::npos) {
- text.erase (i, 2); // remove it, so we don't trip on it again
- text.insert (i, "<br>");
- }*/
- }
ZyppPackage package = tryCastToZyppPkg (object);
std::string url = package->url(), license = package->license();
@@ -281,7 +275,9 @@
text += br + "<b>" + _("License: ") + "</b>" + license;
}
else if (impl->type == PATCH_TYPE) {
-
+ ZyppPatch patch = tryCastToZyppPatch (object);
+ if (patch->reboot_needed())
+ text += br + br + "<b>" + "Reboot needed!" + "</b>";
}
if (impl->type != PATCH_TYPE)
text += br + "<b>" + _("Size: ") + "</b>" + object->size().asString();
--
To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org
For additional commands, e-mail: yast-commit+help@opensuse.org