YaST Commits
Threads by month
- ----- 2024 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
January 2010
- 22 participants
- 425 discussions
![](https://seccdn.libravatar.org/avatar/2e1a2d7374f0eeb790839676bdd1123a.jpg?s=120&d=mm&r=g)
[yast-commit] r60392 - in /trunk/installation: VERSION package/yast2-installation.changes
by locilka@svn.opensuse.org 15 Jan '10
by locilka@svn.opensuse.org 15 Jan '10
15 Jan '10
Author: locilka
Date: Fri Jan 15 11:19:12 2010
New Revision: 60392
URL: http://svn.opensuse.org/viewcvs/yast?rev=60392&view=rev
Log:
New version
Modified:
trunk/installation/VERSION
trunk/installation/package/yast2-installation.changes
Modified: trunk/installation/VERSION
URL: http://svn.opensuse.org/viewcvs/yast/trunk/installation/VERSION?rev=60392&r…
==============================================================================
--- trunk/installation/VERSION (original)
+++ trunk/installation/VERSION Fri Jan 15 11:19:12 2010
@@ -1 +1 @@
-2.19.0
+2.19.1
Modified: trunk/installation/package/yast2-installation.changes
URL: http://svn.opensuse.org/viewcvs/yast/trunk/installation/package/yast2-insta…
==============================================================================
--- trunk/installation/package/yast2-installation.changes (original)
+++ trunk/installation/package/yast2-installation.changes Fri Jan 15 11:19:12 2010
@@ -3,6 +3,7 @@
- inst_complex_welcome adapted to Language::SwitchToEnglishIfNeeded
(bnc#479529)
+- 2.19.1
-------------------------------------------------------------------
Fri Dec 11 16:48:58 CET 2009 - locilka(a)suse.cz
--
To unsubscribe, e-mail: yast-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: yast-commit+help(a)opensuse.org
1
0
![](https://seccdn.libravatar.org/avatar/2e1a2d7374f0eeb790839676bdd1123a.jpg?s=120&d=mm&r=g)
15 Jan '10
Author: locilka
Date: Fri Jan 15 11:18:42 2010
New Revision: 60391
URL: http://svn.opensuse.org/viewcvs/yast?rev=60391&view=rev
Log:
Created tag stable-2_19_1 for installation
Added:
tags/stable-2_19_1/installation/
- copied from r60390, trunk/installation/
--
To unsubscribe, e-mail: yast-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: yast-commit+help(a)opensuse.org
1
0
![](https://seccdn.libravatar.org/avatar/aad221099a4a6229c4881494c921128a.jpg?s=120&d=mm&r=g)
15 Jan '10
Author: mcalmer
Date: Fri Jan 15 10:52:04 2010
New Revision: 60390
URL: http://svn.opensuse.org/viewcvs/yast?rev=60390&view=rev
Log:
Created tag stable-2_19_1 for ca-management
Added:
tags/stable-2_19_1/ca-management/
- copied from r60389, trunk/ca-management/
--
To unsubscribe, e-mail: yast-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: yast-commit+help(a)opensuse.org
1
0
![](https://seccdn.libravatar.org/avatar/aad221099a4a6229c4881494c921128a.jpg?s=120&d=mm&r=g)
[yast-commit] r60389 - in /trunk/ca-management: VERSION package/yast2-ca-management.changes src/common_cert.ycp yast2-ca-management.spec.in
by mcalmer@svn.opensuse.org 15 Jan '10
by mcalmer@svn.opensuse.org 15 Jan '10
15 Jan '10
Author: mcalmer
Date: Fri Jan 15 10:46:15 2010
New Revision: 60389
URL: http://svn.opensuse.org/viewcvs/yast?rev=60389&view=rev
Log:
- version 2.19.1
- add remove certificate function to common server certificate module
(fate#306590)
- improve the help text.
Modified:
trunk/ca-management/VERSION
trunk/ca-management/package/yast2-ca-management.changes
trunk/ca-management/src/common_cert.ycp
trunk/ca-management/yast2-ca-management.spec.in
Modified: trunk/ca-management/VERSION
URL: http://svn.opensuse.org/viewcvs/yast/trunk/ca-management/VERSION?rev=60389&…
==============================================================================
--- trunk/ca-management/VERSION (original)
+++ trunk/ca-management/VERSION Fri Jan 15 10:46:15 2010
@@ -1 +1 @@
-2.19.0
+2.19.1
Modified: trunk/ca-management/package/yast2-ca-management.changes
URL: http://svn.opensuse.org/viewcvs/yast/trunk/ca-management/package/yast2-ca-m…
==============================================================================
--- trunk/ca-management/package/yast2-ca-management.changes (original)
+++ trunk/ca-management/package/yast2-ca-management.changes Fri Jan 15 10:46:15 2010
@@ -1,4 +1,12 @@
-------------------------------------------------------------------
+Fri Jan 15 10:34:48 CET 2010 - mc(a)suse.de
+
+- version 2.19.1
+- add remove certificate function to common server certificate module
+ (fate#306590)
+- improve the help text.
+
+-------------------------------------------------------------------
Thu Jan 14 12:35:43 CET 2010 - mc(a)suse.de
- version 2.19.0
Modified: trunk/ca-management/src/common_cert.ycp
URL: http://svn.opensuse.org/viewcvs/yast/trunk/ca-management/src/common_cert.yc…
==============================================================================
--- trunk/ca-management/src/common_cert.ycp (original)
+++ trunk/ca-management/src/common_cert.ycp Fri Jan 15 10:46:15 2010
@@ -37,19 +37,27 @@
Wizard::CreateDialog();
Wizard::SetDesktopIcon("ca-management");
-// help text 1/5
-string helptext = _("<p>The <b>Common Server Certificate</b> will be used by other YaST modules.</p>");
-// help text 2/5
-helptext = helptext + _("<p>This certificate can be exchanged by importing a certificate from a file.</p>");
-// help text 3/5
+// help text 1/7
+string helptext = _("<p>A Server Certificate is used by services which provide SSL/TLS encrypted network connections.</p>");
+
+// help text 2/7
+helptext = helptext + _("<p>The purpose of the <b>Common Server Certificate</b> is, to provide a certificate for several services running on this host. ");
+
+// help text 3/7
+helptext = helptext + _("Some YaST modules provide the capability to use this certificate during configuration of such a service.</p>");
+
+// help text 4/7
+helptext = helptext + _("<p>With the <b>Import/Replace</b> button you can add a new server certificate or replace the currect one.</p>");
+
+// help text 5/7
+helptext = helptext + _("<p>You can remove the Certificates by clicking the <b>Remove</b> button. But make sure, that it is not used anymore by other services.</p>");
+
+// help text 6/7
helptext = helptext + _("<p>Certificates can be written to a file using <b>Export to File</b> in section <b>Certificate</b> in the <b>CA Management</b> module.</p>");
-// help text 4/5
+// help text 7/7
helptext = helptext + _("<p>Certificates to import from disk must have been written in <b>PKCS12 format with CA chain</b>.</p>");
-// help text 5/5
-helptext = helptext + _("<p>You can remove the Certificates from disk. But make sure, that it is not used anymore by other services.</p>");
-
symbol ui = nil;
repeat
@@ -74,10 +82,12 @@
`VSpacing (0.5),
`RichText (ret),
`VSpacing (0.5),
- `HBox ( // push button label
+ `HBox (
`HStretch(),
+ // push button label
`PushButton (`id(`remove), _("&Remove")),
- `PushButton (`id(`importDisk), _("&Import")))
+ // push button label
+ `PushButton (`id(`importDisk), _("&Import/Replace")))
);
// To translators: dialog label
Modified: trunk/ca-management/yast2-ca-management.spec.in
URL: http://svn.opensuse.org/viewcvs/yast/trunk/ca-management/yast2-ca-managemen…
==============================================================================
--- trunk/ca-management/yast2-ca-management.spec.in (original)
+++ trunk/ca-management/yast2-ca-management.spec.in Fri Jan 15 10:46:15 2010
@@ -1,15 +1,13 @@
@HEADER-COMMENT@
@HEADER@
-Group: System/YaST
-License: GPL v2 or later
-BuildRequires: dosfstools limal-ca-mgm-perl limal-perl perl-Date-Calc perl-URI perl-X500-DN docbook-xsl-stylesheets doxygen libxslt perl-XML-Writer yast2-devtools pkg-config yast2-core yast2 update-desktop-files
-Requires: yast2 perl perl-gettext yast2-perl-bindings perl-X500-DN perl-Date-Calc limal-perl perl-Config-IniFiles perl-URI
-Requires: limal-ca-mgm-perl >= 1.4.0
-
-BuildArchitectures: noarch
-
-Summary: YaST2 - CAs, Certificates and Requests Management
+Group: System/YaST
+License: GPLv2+
+BuildRequires: docbook-xsl-stylesheets dosfstools doxygen libxslt limal-ca-mgm-perl limal-perl perl-Date-Calc perl-URI perl-X500-DN perl-XML-Writer pkg-config update-desktop-files yast2 yast2-core yast2-devtools
+Requires: yast2 perl perl-gettext yast2-perl-bindings perl-X500-DN perl-Date-Calc limal-perl perl-Config-IniFiles perl-URI
+Requires: limal-ca-mgm-perl >= 1.4.0
+BuildArch: noarch
+Summary: YaST2 - CAs, Certificates and Requests Management
%description
Managing CAs, Certificates and Requests in an understanding way.
@@ -19,7 +17,6 @@
@BUILD@
@INSTALL@
-
@CLEAN@
%files
@@ -45,5 +42,4 @@
/usr/bin/generateCRL.pl
/usr/bin/exportCRL.pl
%attr(600, root, root) %config(noreplace) /etc/generateCRL.conf
-
%changelog
--
To unsubscribe, e-mail: yast-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: yast-commit+help(a)opensuse.org
1
0
![](https://seccdn.libravatar.org/avatar/4b1b602021abbfa5a5994ab0ad90e8b7.jpg?s=120&d=mm&r=g)
15 Jan '10
Author: mzugec
Date: Fri Jan 15 10:03:43 2010
New Revision: 60388
URL: http://svn.opensuse.org/viewcvs/yast?rev=60388&view=rev
Log:
Created tag stable-2_19_7 for network
Added:
tags/stable-2_19_7/network/
- copied from r60387, trunk/network/
--
To unsubscribe, e-mail: yast-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: yast-commit+help(a)opensuse.org
1
0
![](https://seccdn.libravatar.org/avatar/4b1b602021abbfa5a5994ab0ad90e8b7.jpg?s=120&d=mm&r=g)
[yast-commit] r60387 - in /trunk/network: VERSION package/yast2-network.changes src/lan/address.ycp
by mzugec@svn.opensuse.org 15 Jan '10
by mzugec@svn.opensuse.org 15 Jan '10
15 Jan '10
Author: mzugec
Date: Fri Jan 15 10:03:29 2010
New Revision: 60387
URL: http://svn.opensuse.org/viewcvs/yast?rev=60387&view=rev
Log:
allow bridge as ETHERDEVICE for VLAN (bnc#569970)
Modified:
trunk/network/VERSION
trunk/network/package/yast2-network.changes
trunk/network/src/lan/address.ycp
Modified: trunk/network/VERSION
URL: http://svn.opensuse.org/viewcvs/yast/trunk/network/VERSION?rev=60387&r1=603…
==============================================================================
--- trunk/network/VERSION (original)
+++ trunk/network/VERSION Fri Jan 15 10:03:29 2010
@@ -1 +1 @@
-2.19.6
+2.19.7
Modified: trunk/network/package/yast2-network.changes
URL: http://svn.opensuse.org/viewcvs/yast/trunk/network/package/yast2-network.ch…
==============================================================================
--- trunk/network/package/yast2-network.changes (original)
+++ trunk/network/package/yast2-network.changes Fri Jan 15 10:03:29 2010
@@ -1,4 +1,10 @@
-------------------------------------------------------------------
+Fri Jan 15 10:02:26 CET 2010 - mzugec(a)suse.cz
+
+- allow bridge as ETHERDEVICE for VLAN (bnc#569970)
+- 2.19.7
+
+-------------------------------------------------------------------
Thu Jan 14 17:59:48 CET 2010 - mzugec(a)suse.cz
- support for BOOTPROTO=ibft option (bnc#551380)
Modified: trunk/network/src/lan/address.ycp
URL: http://svn.opensuse.org/viewcvs/yast/trunk/network/src/lan/address.ycp?rev=…
==============================================================================
--- trunk/network/src/lan/address.ycp (original)
+++ trunk/network/src/lan/address.ycp Fri Jan 15 10:03:29 2010
@@ -128,7 +128,7 @@
map <string, any> configurations = NetworkInterfaces::FilterDevices("netcard");
foreach(string devtype, splitstring(NetworkInterfaces::CardRegex["netcard"]:"", "|"), {
foreach(string devname, (list<string>) Map::Keys(configurations[devtype]:$[]), {
- if (contains(["vlan", "bond", "br"], NetworkInterfaces::GetType(devname))) continue;
+ if (contains(["vlan", "bond"], NetworkInterfaces::GetType(devname))) continue;
items = add (items, `item(`id(devname), sformat("%1 - %2", devname, configurations[devtype, devname, "NAME"]:""), settings["ETHERDEVICE"]:""==devname) );
});
});
--
To unsubscribe, e-mail: yast-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: yast-commit+help(a)opensuse.org
1
0
![](https://seccdn.libravatar.org/avatar/660f918b95fb16b6bf617ac05c9637e3.jpg?s=120&d=mm&r=g)
[yast-commit] r60386 - in /trunk/gtk: ./ src/ src/pkg/ tests/
by rpmcruz@svn.opensuse.org 15 Jan '10
by rpmcruz@svn.opensuse.org 15 Jan '10
15 Jan '10
Author: rpmcruz
Date: Fri Jan 15 03:22:46 2010
New Revision: 60386
URL: http://svn.opensuse.org/viewcvs/yast?rev=60386&view=rev
Log:
* src/pkg/YGPackageSelector.cc: added repositories combo and
view widgets together with a simplifification of the pairing
categories and status code.
* src/pkg/YGPackageSelector.cc: added GtkVBox subclass widget
to fine-tune handling of GtkExpander children, as well as
call to easily link multiple GtkVPaned widgets.
* src/pkg/YGPackageSelector.cc: added StackWidget to
support deck of widgets, optionally under a combo-box or
a note-book.
* src/pkg/YGPackageSelector.cc: added StartupMenu widget
that mimics the initial menu of Suse studio.
* src/pkg/ygtkpackageview.h/cc: changed action check
behavior.
* src/YGPackageSelectorPluginStub.cc: added flags:
sidebar: --expander-sidebar, --flex-sidebar, --grid-sidebar,
--layered-sidebar, --layered-tabs-sidebar, --startup-menu,
--big-icons-sidebar, --icons-sidebar, --repositories-side,
and --repositories-top
row colorization: --italicize-changed-row, and
--golden-changed-row.
Added:
trunk/gtk/tests/Label-Underline.ycp
Modified:
trunk/gtk/ChangeLog
trunk/gtk/src/YGDumbTab.cc
trunk/gtk/src/YGPackageSelectorPluginStub.cc
trunk/gtk/src/YGUtils.cc
trunk/gtk/src/pkg/YGPackageSelector.cc
trunk/gtk/src/pkg/ygtkpackageview.cc
trunk/gtk/src/pkg/ygtkpackageview.h
Modified: trunk/gtk/ChangeLog
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/ChangeLog?rev=60386&r1=60385…
==============================================================================
--- trunk/gtk/ChangeLog (original)
+++ trunk/gtk/ChangeLog Fri Jan 15 03:22:46 2010
@@ -1,3 +1,31 @@
+2010-01-15 Ricardo Cruz <rpmcruz(a)alunos.dcc.fc.up.pt>
+
+ * src/pkg/YGPackageSelector.cc: added repositories combo and
+ view widgets together with a simplifification of the pairing
+ categories and status code.
+
+ * src/pkg/YGPackageSelector.cc: added GtkVBox subclass widget
+ to fine-tune handling of GtkExpander children, as well as
+ call to easily link multiple GtkVPaned widgets.
+
+ * src/pkg/YGPackageSelector.cc: added StackWidget to
+ support deck of widgets, optionally under a combo-box or
+ a note-book.
+
+ * src/pkg/YGPackageSelector.cc: added StartupMenu widget
+ that mimics the initial menu of Suse studio.
+
+ * src/pkg/ygtkpackageview.h/cc: changed action check
+ behavior.
+
+ * src/YGPackageSelectorPluginStub.cc: added flags:
+ sidebar: --expander-sidebar, --flex-sidebar, --grid-sidebar,
+ --layered-sidebar, --layered-tabs-sidebar, --startup-menu,
+ --big-icons-sidebar, --icons-sidebar, --repositories-side,
+ and --repositories-top
+ row colorization: --italicize-changed-row, and
+ --golden-changed-row.
+
2010-01-07 Ricardo Cruz <rpmcruz(a)alunos.dcc.fc.up.pt>
* src/pkg/yzyppwrapper.h/cc: added API to read changes log.
Modified: trunk/gtk/src/YGDumbTab.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/YGDumbTab.cc?rev=60386&r…
==============================================================================
--- trunk/gtk/src/YGDumbTab.cc (original)
+++ trunk/gtk/src/YGDumbTab.cc Fri Jan 15 03:22:46 2010
@@ -31,7 +31,7 @@
// the notebook reduce its size.
ygtk_adj_size_set_only_expand (YGTK_ADJ_SIZE (m_adj_size), TRUE);
- connect (getWidget(), "switch-page", G_CALLBACK (changed_tab_cb), this);
+ connect (getWidget(), "switch-page", G_CALLBACK (switch_page_cb), this);
}
virtual ~YGDumbTab()
@@ -141,8 +141,8 @@
}
// callbacks
- static void changed_tab_cb (GtkNotebook *notebook, GtkNotebookPage *page,
- gint tab_nb, YGDumbTab *pThis)
+ static void switch_page_cb (GtkNotebook *notebook, GtkNotebookPage *page,
+ guint tab_nb, YGDumbTab *pThis)
{
GtkWidget *child = gtk_notebook_get_nth_page (notebook, tab_nb);
YItem *item = (YItem *) g_object_get_data (G_OBJECT (child), "yitem");
Modified: trunk/gtk/src/YGPackageSelectorPluginStub.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/YGPackageSelectorPluginS…
==============================================================================
--- trunk/gtk/src/YGPackageSelectorPluginStub.cc (original)
+++ trunk/gtk/src/YGPackageSelectorPluginStub.cc Fri Jan 15 03:22:46 2010
@@ -11,14 +11,20 @@
#include <YEvent.h>
#include <string.h>
-bool search_entry_side = true, search_entry_top = false, dynamic_sidebar = false,
- categories_side = true, categories_top = false, status_side = false,
- status_top = false, status_tabs = true, status_tabs_as_actions = false,
- undo_side = false, undo_tab = true, undo_old_style = false, undo_log_all = false,
- undo_log_changed = false, status_col = false, action_col = true,
- action_col_as_button = true, action_col_as_check = false, action_col_label = true,
+bool search_entry_side = true, search_entry_top = false, dynamic_sidebar = true,
+ expander_sidebar = false, flex_sidebar = false, grid_sidebar = false,
+ layered_sidebar = false, layered_tabs_sidebar = false, startup_menu = false,
+ big_icons_sidebar = false, icons_sidebar = false,
+ categories_side = true, repositories_side = true, categories_top = false,
+ repositories_top = false,
+ status_side = true, status_top = false, status_tabs = false,
+ status_tabs_as_actions = false, undo_side = false, undo_tab = true,
+ undo_old_style = false, undo_log_all = false, undo_log_changed = false,
+ status_col = false, action_col = true,
+ action_col_as_button = false, action_col_as_check = false, action_col_label = true,
version_col = true, single_line_rows = false, colorful_rows = false,
- details_start_hide = true, toolbar_top = false, toolbar_yast = false,
+ italicize_changed_row = false, golden_changed_row = false,
+ details_start_hide = false, toolbar_top = false, toolbar_yast = false,
arrange_by = false;
struct Arg {
@@ -29,8 +35,18 @@
{ "search-entry-side", &search_entry_side },
{ "search-entry-top", &search_entry_top },
{ "dynamic-sidebar", &dynamic_sidebar },
+ { "expander-sidebar", &expander_sidebar },
+ { "flex-sidebar", &flex_sidebar },
+ { "grid-sidebar", &grid_sidebar },
+ { "layered-sidebar", &layered_sidebar },
+ { "layered-tabs-sidebar", &layered_tabs_sidebar },
+ { "startup-menu", &startup_menu },
+ { "big-icons-sidebar", &big_icons_sidebar },
+ { "icons-sidebar", &icons_sidebar },
{ "categories-side", &categories_side },
+ { "repositories-side", &repositories_side },
{ "categories-top", &categories_top },
+ { "repositories-top", &repositories_top },
{ "status-side", &status_side },
{ "status-top", &status_top },
{ "status-tabs", &status_tabs },
@@ -48,6 +64,8 @@
{ "version-col", &version_col },
{ "single-line-rows", &single_line_rows },
{ "colorful-rows", &colorful_rows },
+ { "italicize-changed-row", &italicize_changed_row },
+ { "golden-changed-row", &golden_changed_row },
{ "details-start-hide", &details_start_hide },
{ "toolbar-top", &toolbar_top },
{ "toolbar-yast", &toolbar_yast },
Modified: trunk/gtk/src/YGUtils.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/YGUtils.cc?rev=60386&r1=…
==============================================================================
--- trunk/gtk/src/YGUtils.cc (original)
+++ trunk/gtk/src/YGUtils.cc Fri Jan 15 03:22:46 2010
@@ -291,6 +291,7 @@
std::string YGUtils::mapKBAccel (const std::string &src)
{
+ // conversion pairs: ('_', '__') ('&&', '&') ('&', '_')
std::string::size_type length = src.length(), i;
string str;
str.reserve (length);
Modified: trunk/gtk/src/pkg/YGPackageSelector.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/pkg/YGPackageSelector.cc…
==============================================================================
--- trunk/gtk/src/pkg/YGPackageSelector.cc (original)
+++ trunk/gtk/src/pkg/YGPackageSelector.cc Fri Jan 15 03:22:46 2010
@@ -27,14 +27,30 @@
#include "ygtknotebook.h"
// experiments:
-extern bool search_entry_side, search_entry_top, dynamic_sidebar, categories_side,
- categories_top, status_side, status_top, status_tabs, status_tabs_as_actions,
+extern bool search_entry_side, search_entry_top, dynamic_sidebar,
+ expander_sidebar, flex_sidebar, grid_sidebar, layered_sidebar,
+ layered_tabs_sidebar, startup_menu, big_icons_sidebar, icons_sidebar,
+ categories_side,
+ repositories_side, categories_top, repositories_top, status_side, status_top,
+ status_tabs, status_tabs_as_actions,
undo_side, undo_tab, undo_old_style, undo_log_all, undo_log_changed, status_col,
action_col, action_col_as_button, action_col_as_check, version_col,
single_line_rows, details_start_hide, toolbar_top, toolbar_yast, arrange_by;
//** UI components -- split up for re-usability, but mostly for readability
+static gboolean paint_white_expose_cb (GtkWidget *widget, GdkEventExpose *event)
+{
+ cairo_t *cr = gdk_cairo_create (widget->window);
+ GdkColor color = { 0, 255 << 8, 255 << 8, 255 << 8 };
+ gdk_cairo_set_source_color (cr, &color);
+ cairo_rectangle (cr, event->area.x, event->area.y,
+ event->area.width, event->area.height);
+ cairo_fill (cr);
+ cairo_destroy (cr);
+ return FALSE;
+}
+
class UndoView
{
Ypp::PkgList m_changes;
@@ -342,21 +358,8 @@
gtk_box_pack_start (GTK_BOX (vbox), m_empty_label, TRUE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (vbox), m_entries_box, TRUE, TRUE, 0);
- struct inner {
- static gboolean expose_cb (GtkWidget *widget, GdkEventExpose *event)
- {
- cairo_t *cr = gdk_cairo_create (widget->window);
- GdkColor color = { 0, 255 << 8, 255 << 8, 255 << 8 };
- gdk_cairo_set_source_color (cr, &color);
- cairo_rectangle (cr, event->area.x, event->area.y,
- event->area.width, event->area.height);
- cairo_fill (cr);
- cairo_destroy (cr);
- return FALSE;
- }
- };
g_signal_connect (G_OBJECT (vbox), "expose-event",
- G_CALLBACK (inner::expose_cb), NULL);
+ G_CALLBACK (paint_white_expose_cb), NULL);
GtkWidget *scroll = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
@@ -2255,80 +2258,149 @@
{ gtk_widget_grab_focus (widget); }
};
-static void selection_changed_cb (GtkTreeSelection *selection, _QueryWidget *pThis)
-{
- if (gtk_tree_selection_get_selected (selection, NULL, NULL))
- pThis->notify();
-}
-
-static GtkWidget *tree_view_new()
-{
- GtkWidget *view = gtk_tree_view_new();
- GtkTreeView *tview = GTK_TREE_VIEW (view);
- gtk_tree_view_set_headers_visible (tview, FALSE);
- gtk_tree_view_set_search_column (tview, 0);
- GtkTreeSelection *selection = gtk_tree_view_get_selection (tview);
- gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
- GtkCellRenderer *renderer = gtk_cell_renderer_text_new();
- g_object_set (G_OBJECT (renderer), "ellipsize", PANGO_ELLIPSIZE_END, NULL);
- GtkTreeViewColumn *column = gtk_tree_view_column_new_with_attributes (
- NULL, renderer, "markup", 0, NULL);
- gtk_tree_view_append_column (tview, column);
- return view;
-}
-
-static GtkWidget *scrolled_window_new (GtkWidget *child)
-{
- GtkWidget *scroll = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
- GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scroll), GTK_SHADOW_IN);
- gtk_container_add (GTK_CONTAINER (scroll), child);
- return scroll;
-}
-
-static void list_store_set_text_count (GtkListStore *store, GtkTreeIter *iter,
- const char *text, int count)
+class PropertyModel
{
- gchar *_text = g_strdup_printf ("%s <small>(%d)</small>", text, count);
- gtk_list_store_set (store, iter, 0, _text, 1, count > 0, -1);
- g_free (_text);
-}
-
-class CategoryModel
-{
-GtkListStore *m_store;
-GtkTreeModel *m_filter;
-bool m_type2, m_dynamic;
+protected:
+ GtkListStore *m_store;
+ GtkTreeModel *m_filter;
public:
- CategoryModel (bool dynamic)
- : m_type2 (false), m_dynamic (dynamic)
+ enum Column { TEXT_COLUMN, VISIBLE_COLUMN, DATA_COLUMN, ICON_COLUMN, TOTAL_COLUMNS };
+
+ PropertyModel()
{
- m_store = gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_POINTER);
- if (m_dynamic) {
+ m_store = gtk_list_store_new (TOTAL_COLUMNS, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_POINTER, G_TYPE_STRING);
+ if (dynamic_sidebar) {
m_filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (m_store), NULL);
gtk_tree_model_filter_set_visible_column (GTK_TREE_MODEL_FILTER (m_filter), 1);
g_object_unref (G_OBJECT (m_store));
}
}
- ~CategoryModel()
+ virtual ~PropertyModel()
{ g_object_unref (G_OBJECT (getModel())); }
GtkTreeModel *getModel()
- { return m_dynamic ? m_filter : GTK_TREE_MODEL (m_store); }
+ { return dynamic_sidebar ? m_filter : GTK_TREE_MODEL (m_store); }
+
+ virtual const char *getLabel() = 0;
+ virtual void setType (Ypp::Package::Type type) = 0;
+ virtual void updateList (Ypp::PkgList list) = 0;
+ virtual bool writeQuery (Ypp::QueryAnd *query, GtkTreeIter *iter) = 0;
+
+ static void list_store_set_text_count (GtkListStore *store, GtkTreeIter *iter,
+ const char *text, int count)
+ {
+ gchar *_text = g_strdup_printf ("%s <small>(%d)</small>", text, count);
+ gtk_list_store_set (store, iter, 0, _text, 1, count > 0, -1);
+ g_free (_text);
+ }
+};
+
+class StatusModel : public PropertyModel
+{
+public:
+ StatusModel() : PropertyModel()
+ {
+ GtkTreeIter iter;
+ gtk_list_store_append (m_store, &iter);
+ if (!dynamic_sidebar)
+ gtk_list_store_set (m_store, &iter, 0, _("All packages"), -1);
+ gtk_list_store_set (m_store, &iter, 1, TRUE, 2, GINT_TO_POINTER (0), 3, NULL, -1);
+ gtk_list_store_append (m_store, &iter);
+ if (!dynamic_sidebar)
+ gtk_list_store_set (m_store, &iter, 0, _("Available"), -1);
+ gtk_list_store_set (m_store, &iter, 1, TRUE, 2, GINT_TO_POINTER (1), 3, GTK_STOCK_NETWORK, -1);
+ gtk_list_store_append (m_store, &iter);
+ if (!dynamic_sidebar)
+ gtk_list_store_set (m_store, &iter, 0, _("Installed"), -1);
+ gtk_list_store_set (m_store, &iter, 1, TRUE, 2, GINT_TO_POINTER (2), 3, GTK_STOCK_HARDDISK, -1);
+ gtk_list_store_append (m_store, &iter);
+ if (!dynamic_sidebar)
+ gtk_list_store_set (m_store, &iter, 0, _("Upgrades"), -1);
+ gtk_list_store_set (m_store, &iter, 1, TRUE, 2, GINT_TO_POINTER (3), 3, GTK_STOCK_GO_UP, -1);
+ gtk_list_store_append (m_store, &iter);
+ if (!dynamic_sidebar)
+ gtk_list_store_set (m_store, &iter, 0, _("Summary"), -1);
+ gtk_list_store_set (m_store, &iter, 1, TRUE, 2, GINT_TO_POINTER (4), 3, NULL, -1);
+ }
+
+ virtual const char *getLabel()
+ { return _("_Status:"); }
+
+ virtual void setType (Ypp::Package::Type type) {}
+
+ virtual void updateList (Ypp::PkgList list)
+ {
+ if (!dynamic_sidebar) return;
+ int installedNb = 0, upgradableNb = 0, notInstalledNb = 0, modifiedNb = 0;
+ for (int i = 0; i < list.size(); i++) {
+ Ypp::Package *pkg = list.get (i);
+ if (pkg->isInstalled()) {
+ installedNb++;
+ if (pkg->hasUpgrade())
+ upgradableNb++;
+ }
+ else
+ notInstalledNb++;
+ if (pkg->toModify())
+ modifiedNb++;
+ }
+
+ GtkListStore *store = m_store;
+ GtkTreeModel *model = GTK_TREE_MODEL (m_store);
+ GtkTreeIter iter;
+ gtk_tree_model_iter_nth_child (model, &iter, NULL, 0);
+ list_store_set_text_count (store, &iter, _("Any Status"), list.size());
+ gtk_tree_model_iter_nth_child (model, &iter, NULL, 1);
+ list_store_set_text_count (store, &iter, _("Not Installed"), notInstalledNb);
+ gtk_tree_model_iter_nth_child (model, &iter, NULL, 2);
+ list_store_set_text_count (store, &iter, _("Installed"), installedNb);
+ gtk_tree_model_iter_nth_child (model, &iter, NULL, 3);
+ list_store_set_text_count (store, &iter, _("Upgradable"), upgradableNb);
+ gtk_tree_model_iter_nth_child (model, &iter, NULL, 4);
+ list_store_set_text_count (store, &iter, _("Modified"), modifiedNb);
+ }
+
+ virtual bool writeQuery (Ypp::QueryAnd *query, GtkTreeIter *iter)
+ {
+ gpointer _status;
+ gtk_tree_model_get (getModel(), iter, 2, &_status, -1);
+ int status = GPOINTER_TO_INT (_status);
+ switch (status) {
+ case 0: default: break;
+ case 1: query->add (new Ypp::QueryProperty ("is-installed", false)); break;
+ case 2: query->add (new Ypp::QueryProperty ("is-installed", true)); break;
+ case 3: query->add (new Ypp::QueryProperty ("has-upgrade", true)); break;
+ case 4: query->add (new Ypp::QueryProperty ("to-modify", true)); break;
+ }
+ if (status > 0 && status <= 4)
+ return true;
+ return false;
+ }
+};
+
+class CategoryModel : public PropertyModel
+{
+bool m_type2;
+
+public:
+ CategoryModel() : PropertyModel(), m_type2 (false)
+ {}
+
+ virtual const char *getLabel()
+ { return _("_Category:"); }
- void setType (Ypp::Package::Type type)
+ virtual void setType (Ypp::Package::Type type)
{
m_type2 = (type == Ypp::Package::PACKAGE_TYPE);
gtk_list_store_clear (m_store);
GtkTreeIter iter;
gtk_list_store_append (m_store, &iter);
- if (!m_dynamic)
+ if (!dynamic_sidebar)
gtk_list_store_set (m_store, &iter, 0, _("All packages"), -1);
- gtk_list_store_set (m_store, &iter, 1, TRUE, 2, NULL, -1);
+ gtk_list_store_set (m_store, &iter, 1, TRUE, 2, NULL, ICON_COLUMN, NULL, -1);
Ypp::Node *category;
if (m_type2)
category = Ypp::get()->getFirstCategory2 (type);
@@ -2336,15 +2408,15 @@
category = Ypp::get()->getFirstCategory (type);
for (; category; category = category->next()) {
gtk_list_store_append (m_store, &iter);
- if (!m_dynamic)
+ if (!dynamic_sidebar)
gtk_list_store_set (m_store, &iter, 0, category->name.c_str(), -1);
- gtk_list_store_set (m_store, &iter, 1, TRUE, 2, category, -1);
+ gtk_list_store_set (m_store, &iter, 1, TRUE, 2, category, ICON_COLUMN, category->icon, -1);
}
}
- void updateList (Ypp::PkgList list)
+ virtual void updateList (Ypp::PkgList list)
{
- if (!m_dynamic) return;
+ if (!dynamic_sidebar) return;
GtkTreeModel *model = GTK_TREE_MODEL (m_store);
GtkTreeIter iter;
if (gtk_tree_model_get_iter_first (model, &iter))
@@ -2367,7 +2439,7 @@
} while (gtk_tree_model_iter_next (model, &iter));
}
- bool writeQuery (Ypp::QueryAnd *query, GtkTreeIter *iter)
+ virtual bool writeQuery (Ypp::QueryAnd *query, GtkTreeIter *iter)
{
Ypp::Node *category;
gtk_tree_model_get (getModel(), iter, 2, &category, -1);
@@ -2382,41 +2454,150 @@
}
};
-class CategoryView : public _QueryWidget
+class RepositoryModel : public PropertyModel
+{
+public:
+ RepositoryModel() : PropertyModel()
+ {
+ GtkTreeIter iter;
+ gtk_list_store_append (m_store, &iter);
+ if (!dynamic_sidebar)
+ gtk_list_store_set (m_store, &iter, 0, _("All packages"), -1);
+ gtk_list_store_set (m_store, &iter, 1, TRUE, 2, NULL, ICON_COLUMN, NULL, -1);
+ for (int i = 0; Ypp::get()->getRepository (i); i++) {
+ const Ypp::Repository *repo = Ypp::get()->getRepository (i);
+ gtk_list_store_append (m_store, &iter);
+ if (!dynamic_sidebar) {
+ if (big_icons_sidebar)
+ gtk_list_store_set (m_store, &iter, 0, (repo->name + '\n' + repo->url).c_str(), -1);
+ else
+ gtk_list_store_set (m_store, &iter, 0, repo->name.c_str(), -1);
+ }
+ gtk_list_store_set (m_store, &iter, 1, TRUE, 2, repo, -1);
+
+ const gchar *icon;
+ if (repo->url.empty())
+ icon = GTK_STOCK_MISSING_IMAGE;
+ else if (repo->url.compare (0, 2, "cd", 2) == 0 ||
+ repo->url.compare (0, 3, "dvd", 3) == 0)
+ icon = GTK_STOCK_CDROM;
+ else if (repo->url.compare (0, 3, "iso", 3) == 0)
+ icon = GTK_STOCK_FILE;
+ else
+ icon = GTK_STOCK_NETWORK;
+ gtk_list_store_set (m_store, &iter, ICON_COLUMN, icon, -1);
+ }
+ }
+
+ virtual const char *getLabel()
+ { return _("_Repository:"); }
+
+ virtual void setType (Ypp::Package::Type type) {}
+
+ virtual void updateList (Ypp::PkgList list)
+ {
+ if (!dynamic_sidebar) return;
+ GtkTreeModel *model = GTK_TREE_MODEL (m_store);
+ GtkTreeIter iter;
+ if (gtk_tree_model_get_iter_first (model, &iter))
+ do {
+ Ypp::Repository *repo;
+ gtk_tree_model_get (model, &iter, 2, &repo, -1);
+ if (repo) {
+ int sum = 0;
+ for (int i = 0; i < list.size(); i++) {
+ Ypp::Package *pkg = list.get (i);
+ for (int v = 0; pkg->getAvailableVersion (v); v++) {
+ const Ypp::Package::Version *version = pkg->getAvailableVersion (v);
+ if (version->repo == repo) {
+ sum++;
+ break;
+ }
+ }
+ }
+ if (big_icons_sidebar)
+ list_store_set_text_count (m_store, &iter, (repo->name + '\n' + repo->url).c_str(), sum);
+ else
+ list_store_set_text_count (m_store, &iter, repo->name.c_str(), sum);
+ }
+ else
+ list_store_set_text_count (m_store, &iter, _("All Repositories"), list.size());
+ } while (gtk_tree_model_iter_next (model, &iter));
+ }
+
+ virtual bool writeQuery (Ypp::QueryAnd *query, GtkTreeIter *iter)
+ {
+ Ypp::Repository *repo;
+ gtk_tree_model_get (getModel(), iter, 2, &repo, -1);
+ if (repo) {
+ query->add (new Ypp::QueryRepository (repo));
+ return true;
+ }
+ return false;
+ }
+};
+
+class PropertyView : public _QueryWidget
{
GtkWidget *m_widget, *m_view;
-CategoryModel *m_model;
+PropertyModel *m_model;
public:
- CategoryView() : _QueryWidget()
+ PropertyView (PropertyModel *model) : _QueryWidget()
{
- m_model = new CategoryModel (dynamic_sidebar);
- m_view = tree_view_new();
- gtk_tree_view_set_model (GTK_TREE_VIEW (m_view), m_model->getModel());
- GtkWidget *scroll = scrolled_window_new (m_view);
-#if 0
- GtkWidget *combo = gtk_combo_box_new_text();
- gtk_combo_box_append_text (GTK_COMBO_BOX (combo), _("Categories"));
- gtk_combo_box_append_text (GTK_COMBO_BOX (combo), _("Repositories"));
- gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
- g_signal_connect (G_OBJECT (combo), "changed",
- G_CALLBACK (combo_changed_cb), this);
-#endif
- GtkWidget *combo = gtk_label_new_with_mnemonic ("Ca_tegories:");
- gtk_misc_set_alignment (GTK_MISC (combo), 0, .5);
- gtk_label_set_mnemonic_widget (GTK_LABEL (combo), m_view);
-
- GtkWidget *vbox = gtk_vbox_new (FALSE, 4); //0);
- gtk_box_pack_start (GTK_BOX (vbox), combo, FALSE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (vbox), scroll, TRUE, TRUE, 0);
- m_widget = vbox;
+ m_model = model;
+ m_view = gtk_tree_view_new_with_model (m_model->getModel());
+ GtkTreeView *tview = GTK_TREE_VIEW (m_view);
+ gtk_tree_view_set_headers_visible (tview, FALSE);
+ gtk_tree_view_set_search_column (tview, 0);
+ gtk_tree_view_set_tooltip_column (tview, 0);
+ GtkTreeSelection *selection = gtk_tree_view_get_selection (tview);
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
+ GtkCellRenderer *renderer = gtk_cell_renderer_text_new();
+ g_object_set (G_OBJECT (renderer), "ellipsize",
+ dynamic_sidebar ? PANGO_ELLIPSIZE_MIDDLE : PANGO_ELLIPSIZE_END, NULL);
+ GtkTreeViewColumn *column;
+ if (icons_sidebar || big_icons_sidebar) {
+ GtkCellRenderer *renderer = gtk_cell_renderer_pixbuf_new();
+ column = gtk_tree_view_column_new_with_attributes (NULL,
+ renderer, "icon-name", PropertyModel::ICON_COLUMN, NULL);
+ g_object_set (G_OBJECT (renderer), "stock-size", big_icons_sidebar ? GTK_ICON_SIZE_LARGE_TOOLBAR : GTK_ICON_SIZE_MENU, NULL);
+ gtk_tree_view_append_column (tview, column);
+ }
+ column = gtk_tree_view_column_new_with_attributes (
+ NULL, renderer, "markup", PropertyModel::TEXT_COLUMN, NULL);
+ gtk_tree_view_append_column (tview, column);
+
+ GtkWidget *scroll = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scroll), GTK_SHADOW_IN);
+ gtk_container_add (GTK_CONTAINER (scroll), m_view);
+
+ if (layered_sidebar)
+ m_widget = scroll;
+ else if (expander_sidebar) {
+ m_widget = gtk_expander_new_with_mnemonic (m_model->getLabel());
+ gtk_container_add (GTK_CONTAINER (m_widget), scroll);
+ }
+ else {
+ GtkWidget *label = gtk_label_new_with_mnemonic (m_model->getLabel());
+ gtk_misc_set_alignment (GTK_MISC (label), 0, .5);
+ gtk_label_set_mnemonic_widget (GTK_LABEL (label), m_view);
+
+ m_widget = gtk_vbox_new (FALSE, 4);
+ gtk_box_pack_start (GTK_BOX (m_widget), label, FALSE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (m_widget), scroll, TRUE, TRUE, 0);
+ }
- GtkTreeSelection *selection;
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (m_view));
g_signal_connect (G_OBJECT (selection), "changed",
G_CALLBACK (selection_changed_cb), this);
}
+ ~PropertyView()
+ { delete m_model; }
+
virtual GtkWidget *getWidget()
{ return m_widget; }
@@ -2448,20 +2629,22 @@
return false;
}
- static void combo_changed_cb (GtkComboBox *combo, CategoryView *pThis)
+ static void selection_changed_cb (GtkTreeSelection *selection, _QueryWidget *pThis)
{
+ if (gtk_tree_selection_get_selected (selection, NULL, NULL))
+ pThis->notify();
}
};
-class CategoryCombo : public _QueryWidget
+class PropertyCombo : public _QueryWidget
{
GtkWidget *m_widget, *m_combo;
-CategoryModel *m_model;
+PropertyModel *m_model;
public:
- CategoryCombo() : _QueryWidget()
+ PropertyCombo (PropertyModel *model) : _QueryWidget()
{
- m_model = new CategoryModel (dynamic_sidebar);
+ m_model = model;
m_combo = gtk_combo_box_new_with_model (m_model->getModel());
GtkCellRenderer *renderer = gtk_cell_renderer_text_new();
@@ -2469,7 +2652,7 @@
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (m_combo), renderer,
"markup", 0, NULL);
- GtkWidget *label = gtk_label_new_with_mnemonic ("Ca_tegories:");
+ GtkWidget *label = gtk_label_new_with_mnemonic (m_model->getLabel());
gtk_misc_set_alignment (GTK_MISC (label), 0, .5);
gtk_label_set_mnemonic_widget (GTK_LABEL (label), m_combo);
@@ -2480,6 +2663,9 @@
G_CALLBACK (changed_cb), this);
}
+ ~PropertyCombo()
+ { delete m_model; }
+
virtual GtkWidget *getWidget()
{ return m_widget; }
@@ -2505,384 +2691,62 @@
return false;
}
- static void changed_cb (GtkComboBox *combo, CategoryCombo *pThis)
+ static void changed_cb (GtkComboBox *combo, PropertyCombo *pThis)
{ pThis->notify(); }
};
-class StatusModel
+#define BROWSER_PATH "/usr/bin/firefox"
+
+class DetailBox
{
-GtkListStore *m_store;
-GtkTreeModel *m_filter;
-bool m_dynamic;
+GtkWidget *m_widget, *m_text, *m_pkg_view, *m_link_popup;
+std::string m_link_str;
public:
- StatusModel (bool dynamic)
- : m_dynamic (dynamic)
- {
- m_store = gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_INT);
+ GtkWidget *getWidget() { return m_widget; }
- GtkTreeIter iter;
- gtk_list_store_append (m_store, &iter);
- if (!dynamic_sidebar)
- gtk_list_store_set (m_store, &iter, 0, _("All packages"), -1);
- gtk_list_store_set (m_store, &iter, 1, TRUE, 2, 0, -1);
- gtk_list_store_append (m_store, &iter);
- if (!dynamic_sidebar)
- gtk_list_store_set (m_store, &iter, 0, _("Available"), -1);
- gtk_list_store_set (m_store, &iter, 1, TRUE, 2, 1, -1);
- gtk_list_store_append (m_store, &iter);
- if (!dynamic_sidebar)
- gtk_list_store_set (m_store, &iter, 0, _("Installed"), -1);
- gtk_list_store_set (m_store, &iter, 1, TRUE, 2, 2, -1);
- gtk_list_store_append (m_store, &iter);
- if (!dynamic_sidebar)
- gtk_list_store_set (m_store, &iter, 0, _("Upgrades"), -1);
- gtk_list_store_set (m_store, &iter, 1, TRUE, 2, 3, -1);
- gtk_list_store_append (m_store, &iter);
- if (!dynamic_sidebar)
- gtk_list_store_set (m_store, &iter, 0, _("Summary"), -1);
- gtk_list_store_set (m_store, &iter, 1, TRUE, 2, 4, -1);
+ DetailBox()
+ : m_link_popup (NULL)
+ {
+ m_text = ygtk_rich_text_new();
+/*
+ ygtk_rich_text_set_text (YGTK_RICH_TEXT (m_text),
+ _("<i>Write a little introductory text here</i>"));
+*/
+ YGtkPackageView *view = ygtk_package_view_new (TRUE);
+ m_pkg_view = GTK_WIDGET (view);
+ //gtk_widget_set_size_request (m_pkg_view, -1, 200);
- if (m_dynamic) {
- m_filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (m_store), NULL);
- gtk_tree_model_filter_set_visible_column (GTK_TREE_MODEL_FILTER (m_filter), 1);
- g_object_unref (G_OBJECT (m_store));
- }
- }
+ GtkWidget *vbox = gtk_vbox_new (FALSE, 18);
+ gtk_box_pack_start (GTK_BOX (vbox), m_text, FALSE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), m_pkg_view, TRUE, TRUE, 0);
- ~StatusModel()
- { g_object_unref (G_OBJECT (getModel())); }
+ m_widget = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (m_widget),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (m_widget), vbox);
- GtkTreeModel *getModel()
- { return m_dynamic ? m_filter : GTK_TREE_MODEL (m_store); }
+ g_signal_connect (G_OBJECT (m_text), "link-clicked",
+ G_CALLBACK (link_clicked_cb), this);
+ g_signal_connect (G_OBJECT (vbox), "expose-event",
+ G_CALLBACK (paint_white_expose_cb), NULL);
+ }
- void setType (Ypp::Package::Type type) {}
+ ~DetailBox()
+ {
+ if (m_link_popup)
+ gtk_widget_destroy (m_link_popup);
+ }
- void updateList (Ypp::PkgList list)
+ void setPackage (Ypp::Package *package)
{
- if (!m_dynamic) return;
- int installedNb = 0, upgradableNb = 0, notInstalledNb = 0, modifiedNb = 0;
- for (int i = 0; i < list.size(); i++) {
- Ypp::Package *pkg = list.get (i);
- if (pkg->isInstalled()) {
- installedNb++;
- if (pkg->hasUpgrade())
- upgradableNb++;
- }
- else
- notInstalledNb++;
- if (pkg->toModify())
- modifiedNb++;
+ if (package) {
+ std::string text = package->description (HTML_MARKUP);
+ ygtk_rich_text_set_text (YGTK_RICH_TEXT (m_text), text.c_str());
+ gtk_widget_show (m_widget);
}
-
- GtkListStore *store = m_store;
- GtkTreeModel *model = GTK_TREE_MODEL (m_store);
- GtkTreeIter iter;
- gtk_tree_model_iter_nth_child (model, &iter, NULL, 0);
- list_store_set_text_count (store, &iter, _("Any Status"), list.size());
- gtk_tree_model_iter_nth_child (model, &iter, NULL, 1);
- list_store_set_text_count (store, &iter, _("Not Installed"), notInstalledNb);
- gtk_tree_model_iter_nth_child (model, &iter, NULL, 2);
- list_store_set_text_count (store, &iter, _("Installed"), installedNb);
- gtk_tree_model_iter_nth_child (model, &iter, NULL, 3);
- list_store_set_text_count (store, &iter, _("Upgradable"), upgradableNb);
- gtk_tree_model_iter_nth_child (model, &iter, NULL, 4);
- list_store_set_text_count (store, &iter, _("Modified"), modifiedNb);
- }
-
- bool writeQuery (Ypp::QueryAnd *query, GtkTreeIter *iter)
- {
- int status;
- gtk_tree_model_get (getModel(), iter, 2, &status, -1);
- switch (status) {
- case 0: default: break;
- case 1: query->add (new Ypp::QueryProperty ("is-installed", false)); break;
- case 2: query->add (new Ypp::QueryProperty ("is-installed", true)); break;
- case 3: query->add (new Ypp::QueryProperty ("has-upgrade", true)); break;
- case 4: query->add (new Ypp::QueryProperty ("to-modify", true)); break;
- }
- if (status > 0 && status <= 4)
- return true;
- return false;
- }
-};
-
-class StatusView : public _QueryWidget
-{
-GtkWidget *m_widget, *m_view;
-StatusModel *m_model;
-
-public:
- StatusView() : _QueryWidget()
- {
- m_model = new StatusModel (dynamic_sidebar);
- m_view = tree_view_new();
- gtk_tree_view_set_model (GTK_TREE_VIEW (m_view), m_model->getModel());
- GtkWidget *scroll = scrolled_window_new (m_view);
-
- GtkWidget *label = gtk_label_new_with_mnemonic ("_Status:");
- gtk_misc_set_alignment (GTK_MISC (label), 0, .5);
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), m_view);
-
- m_widget = gtk_vbox_new (FALSE, 4);
- gtk_box_pack_start (GTK_BOX (m_widget), label, FALSE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (m_widget), scroll, TRUE, TRUE, 0);
-
- GtkTreeSelection *selection;
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (m_view));
- g_signal_connect (G_OBJECT (selection), "changed",
- G_CALLBACK (selection_changed_cb), this);
- }
-
- virtual GtkWidget *getWidget()
- { return m_widget; }
-
- virtual void updateType (Ypp::Package::Type type)
- {
- m_model->setType (type);
-
- GtkTreeSelection *selection;
- GtkTreeIter iter;
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (m_view));
- g_signal_handlers_block_by_func (selection, (gpointer) selection_changed_cb, this);
- gtk_tree_model_get_iter_first (m_model->getModel(), &iter);
- gtk_tree_selection_select_iter (selection, &iter);
- g_signal_handlers_unblock_by_func (selection, (gpointer) selection_changed_cb, this);
- }
-
- virtual void updateList (Ypp::PkgList list)
- { m_model->updateList (list); }
-
- virtual bool begsUpdate() { return dynamic_sidebar; }
-
- virtual bool writeQuery (Ypp::QueryAnd *query)
- {
- GtkTreeIter iter;
- GtkTreeSelection *selection;
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (m_view));
- if (gtk_tree_selection_get_selected (selection, NULL, &iter))
- return m_model->writeQuery (query, &iter);
- return false;
- }
-};
-
-class StatusCombo : public _QueryWidget
-{
-GtkWidget *m_widget, *m_combo;
-StatusModel *m_model;
-
-public:
- StatusCombo() : _QueryWidget()
- {
- m_model = new StatusModel (dynamic_sidebar);
- m_combo = gtk_combo_box_new_with_model (m_model->getModel());
-
- GtkCellRenderer *renderer = gtk_cell_renderer_text_new();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (m_combo), renderer, TRUE);
- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (m_combo), renderer,
- "markup", 0, NULL);
-
- GtkWidget *label = gtk_label_new_with_mnemonic ("_Status:");
- gtk_misc_set_alignment (GTK_MISC (label), 0, .5);
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), m_combo);
-
- m_widget = gtk_hbox_new (FALSE, 2);
- gtk_box_pack_start (GTK_BOX (m_widget), label, FALSE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (m_widget), m_combo, TRUE, TRUE, 0);
- g_signal_connect (G_OBJECT (m_combo), "changed",
- G_CALLBACK (changed_cb), this);
- }
-
- virtual GtkWidget *getWidget()
- { return m_widget; }
-
- virtual void updateType (Ypp::Package::Type type)
- {
- m_model->setType (type);
-
- g_signal_handlers_block_by_func (m_combo, (gpointer) changed_cb, this);
- gtk_combo_box_set_active (GTK_COMBO_BOX (m_combo), 0);
- g_signal_handlers_unblock_by_func (m_combo, (gpointer) changed_cb, this);
- }
-
- virtual void updateList (Ypp::PkgList list)
- { m_model->updateList (list); }
-
- virtual bool begsUpdate() { return dynamic_sidebar; }
-
- virtual bool writeQuery (Ypp::QueryAnd *query)
- {
- GtkTreeIter iter;
- if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (m_combo), &iter))
- return m_model->writeQuery (query, &iter);
- return false;
- }
-
- static void changed_cb (GtkComboBox *combo, StatusCombo *pThis)
- { pThis->notify(); }
-};
-
-#if 0
-class StatusView : public _QueryWidget
-{
-GtkWidget *m_widget, *m_view;
-StatusModel *m_model;
-
-public:
- StatusView() : _QueryWidget()
- {
- m_model = new StatusModel
- m_view = tree_view_new();
-
- GtkWidget *label = gtk_label_new_with_mnemonic ("_Statuses:");
- gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), m_view);
- GtkWidget *scroll = scrolled_window_new (m_view);
- m_widget = gtk_vbox_new (FALSE, 4);
- gtk_box_pack_start (GTK_BOX (m_widget), label, FALSE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (m_widget), scroll, TRUE, TRUE, 0);
-
- GtkListStore *store;
- GtkTreeIter iter;
- store = gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_INT);
- m_model = GTK_TREE_MODEL (store);
- gtk_list_store_append (store, &iter);
- if (!dynamic_sidebar)
- gtk_list_store_set (store, &iter, 0, _("All packages"), -1);
- gtk_list_store_set (store, &iter, 1, TRUE, 2, 0, -1);
- gtk_list_store_append (store, &iter);
- if (!dynamic_sidebar)
- gtk_list_store_set (store, &iter, 0, _("Available"), -1);
- gtk_list_store_set (store, &iter, 1, TRUE, 2, 1, -1);
- gtk_list_store_append (store, &iter);
- if (!dynamic_sidebar)
- gtk_list_store_set (store, &iter, 0, _("Installed"), -1);
- gtk_list_store_set (store, &iter, 1, TRUE, 2, 2, -1);
- gtk_list_store_append (store, &iter);
- if (!dynamic_sidebar)
- gtk_list_store_set (store, &iter, 0, _("Upgrades"), -1);
- gtk_list_store_set (store, &iter, 1, TRUE, 2, 3, -1);
- gtk_list_store_append (store, &iter);
- if (!dynamic_sidebar)
- gtk_list_store_set (store, &iter, 0, _("Summary"), -1);
- gtk_list_store_set (store, &iter, 1, TRUE, 2, 4, -1);
-
- GtkTreeModel *filter_model = gtk_tree_model_filter_new (m_model, NULL);
- gtk_tree_model_filter_set_visible_column (GTK_TREE_MODEL_FILTER (filter_model), 1);
- gtk_tree_view_set_model (GTK_TREE_VIEW (m_view), filter_model);
- g_object_unref (G_OBJECT (store));
- g_object_unref (G_OBJECT (filter_model));
-
- GtkTreeSelection *selection;
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (m_view));
- gtk_tree_model_get_iter_first (filter_model, &iter);
- gtk_tree_selection_select_iter (selection, &iter);
- g_signal_connect (G_OBJECT (selection), "changed",
- G_CALLBACK (selection_changed_cb), this);
- }
-
- virtual GtkWidget *getWidget()
- { return m_widget; }
-
- virtual void updateType (Ypp::Package::Type type) {}
-
- virtual void updateList (Ypp::PkgList list)
- {
- int installedNb = 0, upgradableNb = 0, notInstalledNb = 0, modifiedNb = 0;
- for (int i = 0; i < list.size(); i++) {
- Ypp::Package *pkg = list.get (i);
- if (pkg->isInstalled()) {
- installedNb++;
- if (pkg->hasUpgrade())
- upgradableNb++;
- }
- else
- notInstalledNb++;
- if (pkg->toModify())
- modifiedNb++;
- }
-
- GtkTreeModel *model = m_model;
- GtkTreeIter iter;
- GtkListStore *store = GTK_LIST_STORE (model);
- gtk_tree_model_iter_nth_child (model, &iter, NULL, 0);
- list_store_set_text_count (store, &iter, _("Any Status"), list.size());
- gtk_tree_model_iter_nth_child (model, &iter, NULL, 1);
- list_store_set_text_count (store, &iter, _("Not Installed"), notInstalledNb);
- gtk_tree_model_iter_nth_child (model, &iter, NULL, 2);
- list_store_set_text_count (store, &iter, _("Installed"), installedNb);
- gtk_tree_model_iter_nth_child (model, &iter, NULL, 3);
- list_store_set_text_count (store, &iter, _("Upgradable"), upgradableNb);
- gtk_tree_model_iter_nth_child (model, &iter, NULL, 4);
- list_store_set_text_count (store, &iter, _("Modified"), modifiedNb);
- }
-
- virtual bool begsUpdate() { return dynamic_sidebar; }
-
- virtual bool writeQuery (Ypp::QueryAnd *query)
- {
- GtkTreeIter iter;
- GtkTreeSelection *selection;
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (m_view));
- if (gtk_tree_selection_get_selected (selection, NULL, &iter))
- return m_model->writeQuery (query, &iter);
- return false;
- }
-};
-#endif
-
-#define BROWSER_PATH "/usr/bin/firefox"
-
-class DetailBox
-{
-GtkWidget *m_widget, *m_text, *m_pkg_view, *m_link_popup;
-std::string m_link_str;
-
-public:
- GtkWidget *getWidget() { return m_widget; }
-
- DetailBox()
- : m_link_popup (NULL)
- {
- m_text = ygtk_rich_text_new();
-/*
- ygtk_rich_text_set_text (YGTK_RICH_TEXT (m_text),
- _("<i>Write a little introductory text here</i>"));
-*/
- YGtkPackageView *view = ygtk_package_view_new (TRUE);
- m_pkg_view = GTK_WIDGET (view);
- //gtk_widget_set_size_request (m_pkg_view, -1, 200);
-
- GtkWidget *vbox = gtk_vbox_new (FALSE, 18);
- gtk_box_pack_start (GTK_BOX (vbox), m_text, FALSE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (vbox), m_pkg_view, TRUE, TRUE, 0);
-
- m_widget = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (m_widget),
- GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
- gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (m_widget), vbox);
-
- g_signal_connect (G_OBJECT (m_text), "link-clicked",
- G_CALLBACK (link_clicked_cb), this);
- g_signal_connect (G_OBJECT (vbox), "expose-event",
- G_CALLBACK (expose_cb), NULL);
- }
-
- ~DetailBox()
- {
- if (m_link_popup)
- gtk_widget_destroy (m_link_popup);
- }
-
- void setPackage (Ypp::Package *package)
- {
- if (package) {
- std::string text = package->description (HTML_MARKUP);
- ygtk_rich_text_set_text (YGTK_RICH_TEXT (m_text), text.c_str());
- gtk_widget_show (m_widget);
- }
- else
- ygtk_rich_text_set_plain_text (YGTK_RICH_TEXT (m_text), "");
+ else
+ ygtk_rich_text_set_plain_text (YGTK_RICH_TEXT (m_text), "");
if (package && package->type() != Ypp::Package::PACKAGE_TYPE) {
Ypp::QueryBase *query = new Ypp::QueryCollection (package);
@@ -2894,18 +2758,6 @@
gtk_widget_hide (m_pkg_view);
}
- static gboolean expose_cb (GtkWidget *widget, GdkEventExpose *event)
- {
- cairo_t *cr = gdk_cairo_create (widget->window);
- GdkColor color = { 0, 255 << 8, 255 << 8, 255 << 8 };
- gdk_cairo_set_source_color (cr, &color);
- cairo_rectangle (cr, event->area.x, event->area.y,
- event->area.width, event->area.height);
- cairo_fill (cr);
- cairo_destroy (cr);
- return FALSE;
- }
-
static void link_clicked_cb (YGtkRichText *text, const gchar *link, DetailBox *pThis)
{
if (!pThis->m_link_popup) {
@@ -3065,6 +2917,327 @@
}
};
+static GtkWidget *gtk_vpaned_append (GtkWidget *vpaned, GtkWidget *child)
+{
+ if (!vpaned)
+ return child;
+ if (!GTK_IS_VPANED (vpaned) || gtk_paned_get_child2 (GTK_PANED (vpaned))) {
+ GtkWidget *ret = gtk_vpaned_new();
+ gtk_paned_pack1 (GTK_PANED (ret), vpaned, TRUE, FALSE);
+ gtk_paned_pack2 (GTK_PANED (ret), child, TRUE, FALSE);
+ return ret;
+ }
+ gtk_paned_pack2 (GTK_PANED (vpaned), child, TRUE, FALSE);
+ return vpaned;
+}
+
+static void ygtk_expander_box_size_allocate (GtkWidget *vbox, GtkAllocation *alloc)
+{
+ GtkContainer *container = GTK_CONTAINER (vbox);
+ GList *children = gtk_container_get_children (container);
+ int expandable_height = alloc->height, expand_nb = 0;
+ for (GList *i = children; i; i = i->next) {
+ GtkWidget *child = (GtkWidget *) i->data;
+ if (!gtk_expander_get_expanded (GTK_EXPANDER (child))) {
+ GtkRequisition req;
+ gtk_widget_get_child_requisition (child, &req);
+ expandable_height -= req.height;
+ }
+ else
+ expand_nb++;
+ }
+ int each_expandable_height = 0;
+ if (expand_nb)
+ each_expandable_height = expandable_height / expand_nb;
+ int y = 0;
+ for (GList *i = children; i; i = i->next) {
+ GtkWidget *child = (GtkWidget *) i->data;
+ if (gtk_expander_get_expanded (GTK_EXPANDER (child))) {
+ GtkAllocation child_alloc = { alloc->x, alloc->y + y, alloc->width, each_expandable_height };
+ gtk_widget_size_allocate (child, &child_alloc);
+ y += child_alloc.height;
+ }
+ else {
+ GtkRequisition req;
+ gtk_widget_get_child_requisition (child, &req);
+
+ GtkAllocation child_alloc = { alloc->x, alloc->y + y, alloc->width, req.height };
+ gtk_widget_size_allocate (child, &child_alloc);
+ y += child_alloc.height;
+ }
+ }
+ g_list_free (children);
+}
+
+typedef struct YGtkExpanderBox
+{ GtkVBox parent; } YGtkExpanderBox;
+
+typedef struct YGtkExpanderBoxClass
+{ GtkVBoxClass parent_class; } YGtkExpanderBoxClass;
+
+G_DEFINE_TYPE (YGtkExpanderBox, ygtk_expander_box, GTK_TYPE_VBOX)
+
+static void ygtk_expander_box_init (YGtkExpanderBox *box)
+{
+}
+
+static void ygtk_expander_box_class_init (YGtkExpanderBoxClass *klass)
+{
+ ygtk_expander_box_parent_class = g_type_class_peek_parent (klass);
+
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+ widget_class->size_allocate = ygtk_expander_box_size_allocate;
+}
+
+static GtkWidget *gtk_expander_vbox_new (int spacing)
+{
+ GtkWidget *widget = (GtkWidget *) g_object_new (ygtk_expander_box_get_type(), NULL);
+ GTK_BOX (widget)->spacing = spacing;
+ return widget;
+}
+
+class StackWidget
+{
+GtkWidget *m_combo, *m_placeholder, *m_widget;
+std::vector <GtkWidget *> m_children;
+
+public:
+ GtkWidget *getWidget()
+ { return m_widget; }
+
+ StackWidget()
+ {
+ if (layered_tabs_sidebar) {
+ m_widget = gtk_notebook_new();
+ gtk_notebook_set_tab_pos (GTK_NOTEBOOK (m_widget), GTK_POS_LEFT);
+ }
+ else {
+ m_combo = gtk_combo_box_new_text();
+ m_placeholder = gtk_event_box_new();
+ m_widget = gtk_vbox_new (FALSE, 2);
+ gtk_box_pack_start (GTK_BOX (m_widget), m_combo, FALSE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (m_widget), m_placeholder, TRUE, TRUE, 0);
+ g_signal_connect (G_OBJECT (m_combo), "changed",
+ G_CALLBACK (combo_changed_cb), this);
+ }
+ }
+
+ ~StackWidget()
+ {
+ for (unsigned int i = 0; i < m_children.size(); i++)
+ g_object_unref (G_OBJECT (m_children[i]));
+ }
+
+ void append (const char *title, GtkWidget *widget)
+ {
+ m_children.push_back (widget);
+ g_object_ref_sink (G_OBJECT (widget));
+ gtk_widget_show_all (widget);
+ if (layered_tabs_sidebar) {
+ GtkWidget *label = gtk_label_new (title);
+ gtk_label_set_angle (GTK_LABEL (label), 90);
+ gtk_notebook_append_page (GTK_NOTEBOOK (m_widget), widget, label);
+ }
+ else {
+ gtk_combo_box_append_text (GTK_COMBO_BOX (m_combo), title);
+ if (gtk_combo_box_get_active (GTK_COMBO_BOX (m_combo)) == -1)
+ gtk_combo_box_set_active (GTK_COMBO_BOX (m_combo), 0);
+ }
+ }
+
+ static void combo_changed_cb (GtkComboBox *combo, StackWidget *pThis)
+ {
+ int i = gtk_combo_box_get_active (combo);
+ GtkWidget *child = pThis->m_children[i];
+ GtkWidget *old_child = GTK_BIN (pThis->m_placeholder)->child;
+ if (old_child)
+ gtk_container_remove (GTK_CONTAINER (pThis->m_placeholder), old_child);
+ gtk_container_add (GTK_CONTAINER (pThis->m_placeholder), child);
+ }
+};
+
+#define COLS_NB 5
+
+class StartupMenu : public _QueryWidget
+{
+GtkWidget *m_widget, *m_list_widget, *m_parent;
+Ypp::Node *m_category;
+int m_status;
+
+public:
+ StartupMenu (GtkWidget *list_widget) : _QueryWidget(), m_category (NULL), m_status (-1)
+ {
+ m_parent = 0;
+ m_list_widget = list_widget;
+
+ m_widget = gtk_vbox_new (FALSE, 12);
+ gtk_container_set_border_width (GTK_CONTAINER (m_widget), 12);
+ g_signal_connect (G_OBJECT (m_widget), "expose-event",
+ G_CALLBACK (paint_white_expose_cb), NULL);
+
+ GtkWidget *header, *table;
+ header = header_new (_("Categories"));
+ int categories_nb = 0;
+ for (Ypp::Node *i = Ypp::get()->getFirstCategory2 (Ypp::Package::PACKAGE_TYPE);
+ i; i = i->next())
+ categories_nb++;
+ table = table_new (categories_nb+1);
+ GtkWidget *button = button_new (NULL, _("All Packages"));
+ table_pack (table, button);
+ g_signal_connect (G_OBJECT (button), "clicked",
+ G_CALLBACK (category_clicked_cb), this);
+ for (Ypp::Node *i = Ypp::get()->getFirstCategory2 (Ypp::Package::PACKAGE_TYPE);
+ i; i = i->next()) {
+ GtkWidget *button = button_new (i->icon, i->name.c_str());
+ table_pack (table, button);
+ g_object_set_data (G_OBJECT (button), "category", i);
+ g_signal_connect (G_OBJECT (button), "clicked",
+ G_CALLBACK (category_clicked_cb), this);
+ }
+ gtk_box_pack_start (GTK_BOX (m_widget), header, FALSE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (m_widget), table, FALSE, TRUE, 0);
+
+ header = header_new (_("Status"));
+ table = table_new (4);
+ button = button_new (GTK_STOCK_NETWORK, _("Available"));
+ g_object_set_data (G_OBJECT (button), "status", GINT_TO_POINTER (0));
+ g_signal_connect (G_OBJECT (button), "clicked",
+ G_CALLBACK (status_clicked_cb), this);
+ table_pack (table, button);
+ button = button_new (GTK_STOCK_HARDDISK, _("Installed"));
+ g_object_set_data (G_OBJECT (button), "status", GINT_TO_POINTER (1));
+ g_signal_connect (G_OBJECT (button), "clicked",
+ G_CALLBACK (status_clicked_cb), this);
+ table_pack (table, button);
+ button = button_new (GTK_STOCK_GO_UP, _("Upgrades"));
+ g_object_set_data (G_OBJECT (button), "status", GINT_TO_POINTER (2));
+ g_signal_connect (G_OBJECT (button), "clicked",
+ G_CALLBACK (status_clicked_cb), this);
+ table_pack (table, button);
+ button = button_new (GTK_STOCK_UNDO, _("Modified"));
+ g_object_set_data (G_OBJECT (button), "status", GINT_TO_POINTER (3));
+ g_signal_connect (G_OBJECT (button), "clicked",
+ G_CALLBACK (status_clicked_cb), this);
+ table_pack (table, button);
+ gtk_box_pack_start (GTK_BOX (m_widget), header, FALSE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (m_widget), table, FALSE, TRUE, 0);
+
+ g_object_ref_sink (m_list_widget);
+ g_object_ref_sink (m_widget);
+ gtk_widget_show_all (m_widget);
+ }
+
+ ~StartupMenu()
+ {
+ g_object_unref (G_OBJECT (m_widget));
+ g_object_unref (G_OBJECT (m_list_widget));
+ }
+
+ static GtkWidget *header_new (const char *title)
+ {
+ GtkWidget *label = gtk_label_new (title);
+ YGUtils::setWidgetFont (label, PANGO_STYLE_NORMAL, PANGO_WEIGHT_BOLD, PANGO_SCALE_LARGE);
+ GdkColor gray = { 0, 200 << 8, 200 << 8, 200 << 8 };
+ gtk_widget_modify_fg (label, GTK_STATE_NORMAL, &gray);
+ GtkWidget *header = gtk_hbox_new (FALSE, 2);
+ gtk_box_pack_start (GTK_BOX (header), label, FALSE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (header), gtk_hseparator_new(), TRUE, TRUE, 0);
+ return header;
+ }
+
+ static GtkWidget *table_new (int nb)
+ {
+ int rows = nb / COLS_NB, cols = COLS_NB;
+ if (nb % COLS_NB != 0)
+ rows++;
+ GtkWidget *table = gtk_table_new (rows, cols, TRUE);
+ gtk_table_set_row_spacings (GTK_TABLE (table), 6);
+ gtk_table_set_col_spacings (GTK_TABLE (table), 6);
+ return table;
+ }
+
+ static void table_pack (GtkWidget *table, GtkWidget *child)
+ { // unlike gtk_table_attach(), no need to pass the exact positioning
+ // and no, gtk_container_add() doesn't work
+ GList *children = gtk_container_get_children (GTK_CONTAINER (table));
+ guint pos = g_list_length (children);
+ g_list_free (children);
+ guint cols_nb;
+ g_object_get (G_OBJECT (table), "n-columns", &cols_nb, NULL);
+ guint col = pos % cols_nb, row = pos / cols_nb;
+ gtk_table_attach (GTK_TABLE (table), child, col, col+1, row, row+1,
+ GTK_FILL, GTK_FILL, 0, 0);
+ }
+
+ static GtkWidget *button_new (const char *icon, const char *title)
+ {
+ GtkWidget *button = gtk_button_new_with_label (title);
+ if (icon) {
+ GtkWidget *image = gtk_image_new_from_icon_name (icon, GTK_ICON_SIZE_BUTTON);
+ gtk_button_set_image (GTK_BUTTON (button), image);
+ gtk_widget_show (image);
+ }
+ return button;
+ }
+
+ virtual GtkWidget *getWidget() { return m_widget; }
+
+ virtual void updateType (Ypp::Package::Type type) {}
+ virtual void updateList (Ypp::PkgList list) {}
+ virtual bool begsUpdate() { return false; }
+
+ virtual bool writeQuery (Ypp::QueryAnd *query)
+ {
+ if (m_category) {
+ query->add (new Ypp::QueryCategory (m_category, true));
+ return true;
+ }
+ switch (m_status) {
+ case 0:
+ query->add (new Ypp::QueryProperty ("is-installed", false));
+ return true;
+ case 1:
+ query->add (new Ypp::QueryProperty ("is-installed", true));
+ return true;
+ case 2:
+ query->add (new Ypp::QueryProperty ("has-upgrade", true));
+ return true;
+ case 3:
+ query->add (new Ypp::QueryProperty ("to-modify", true));
+ return true;
+ case -1: default: break;
+ }
+ return false;
+ }
+
+ void applySelection()
+ {
+ if (!m_parent)
+ m_parent = gtk_widget_get_parent (m_widget);
+ gtk_container_remove (GTK_CONTAINER (m_parent), m_widget);
+ gtk_container_add (GTK_CONTAINER (m_parent), m_list_widget);
+ notify();
+ }
+
+ void restore()
+ {
+ gtk_container_remove (GTK_CONTAINER (m_parent), m_list_widget);
+ gtk_container_add (GTK_CONTAINER (m_parent), m_widget);
+ }
+
+ static void category_clicked_cb (GtkButton *button, StartupMenu *pThis)
+ {
+ pThis->m_category = (Ypp::Node *) g_object_get_data (G_OBJECT (button), "category");
+ pThis->applySelection();
+ }
+
+ static void status_clicked_cb (GtkButton *button, StartupMenu *pThis)
+ {
+ pThis->m_status = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button), "status"));
+ pThis->applySelection();
+ }
+};
+
class UI : public YGtkPackageView::Listener, _QueryListener, Ypp::Disk::Listener
{
GtkWidget *m_widget, *m_disk_label, *m_arrange_combo;
@@ -3072,6 +3245,7 @@
std::list <_QueryWidget *> m_query;
DetailBox *m_details;
DiskView *m_disk;
+StartupMenu *m_startup_menu;
Ypp::Package::Type m_type;
Toolbar *m_toolbar;
@@ -3099,36 +3273,11 @@
gtk_widget_set_size_request (search_entry->getWidget(), 160, -1);
}
- CategoryCombo *category_combo = 0;
- if (categories_top) {
- category_combo = new CategoryCombo();
- m_query.push_back (category_combo);
- }
- StatusCombo *status_combo = 0;
- if (status_top) {
- status_combo = new StatusCombo();
- m_query.push_back (status_combo);
- }
-
UndoView *undo_view = 0;
if (undo_side || undo_tab)
undo_view = new UndoView();
- GtkWidget *arrange_box = 0;
- if (arrange_by) {
- arrange_box = gtk_hbox_new (FALSE, 4);
- gtk_box_pack_start (GTK_BOX (arrange_box), gtk_label_new (_("Software arranged by")), FALSE, TRUE, 0);
- m_arrange_combo = gtk_combo_box_new_text();
- gtk_combo_box_append_text (GTK_COMBO_BOX (m_arrange_combo), _("Groups"));
- gtk_combo_box_append_text (GTK_COMBO_BOX (m_arrange_combo), _("Repositories"));
- gtk_combo_box_append_text (GTK_COMBO_BOX (m_arrange_combo), _("Status"));
- gtk_combo_box_set_active (GTK_COMBO_BOX (m_arrange_combo), 0);
- gtk_box_pack_start (GTK_BOX (arrange_box), m_arrange_combo, FALSE, TRUE, 0);
- g_signal_connect (G_OBJECT (m_arrange_combo), "changed",
- G_CALLBACK (arrange_combo_changed_cb), this);
- }
-
- GtkWidget *packages_box;
+ GtkWidget *packages_view;
if (status_tabs) {
m_installed_view = ygtk_package_view_new (TRUE);
m_installed_view->setListener (this);
@@ -3137,7 +3286,7 @@
m_upgrades_view = ygtk_package_view_new (TRUE);
m_upgrades_view->setListener (this);
- packages_box = ygtk_notebook_new();
+ packages_view = ygtk_notebook_new();
const char **labels;
if (status_tabs_as_actions) {
const char *t[] = { _("_Install"), _("_Upgrade"), _("_Remove"), _("Undo") };
@@ -3147,71 +3296,92 @@
const char *t[] = { _("_Available"), _("_Upgrades"), _("_Installed"), _("Summary") };
labels = t;
}
- gtk_notebook_append_page (GTK_NOTEBOOK (packages_box),
+ gtk_notebook_append_page (GTK_NOTEBOOK (packages_view),
GTK_WIDGET (m_available_view), gtk_label_new_with_mnemonic (labels[0]));
- gtk_notebook_append_page (GTK_NOTEBOOK (packages_box),
+ gtk_notebook_append_page (GTK_NOTEBOOK (packages_view),
GTK_WIDGET (m_upgrades_view), gtk_label_new_with_mnemonic (labels[1]));
- gtk_notebook_append_page (GTK_NOTEBOOK (packages_box),
+ gtk_notebook_append_page (GTK_NOTEBOOK (packages_view),
GTK_WIDGET (m_installed_view), gtk_label_new_with_mnemonic (labels[2]));
if (undo_tab) {
GtkWidget *box = gtk_event_box_new();
gtk_container_add (GTK_CONTAINER (box), undo_view->createView (this, true));
gtk_container_set_border_width (GTK_CONTAINER (box), 6);
- gtk_notebook_append_page (GTK_NOTEBOOK (packages_box),
+ gtk_notebook_append_page (GTK_NOTEBOOK (packages_view),
box, gtk_label_new_with_mnemonic (labels[3]));
}
if (search_entry) {
// FIXME: only the entry itself is shown, without the "Find:" label
ygtk_notebook_set_corner_widget (
- YGTK_NOTEBOOK (packages_box), search_entry->getWidget());
+ YGTK_NOTEBOOK (packages_view), search_entry->getWidget());
}
}
else {
m_all_view = ygtk_package_view_new (TRUE);
m_all_view->setListener (this);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (m_all_view), GTK_SHADOW_IN);
+ packages_view = GTK_WIDGET (m_all_view);
+ }
+
+ GtkWidget *packages_box = gtk_vbox_new (FALSE, 4);
+ if (arrange_by) {
+ GtkWidget *arrange_box = gtk_hbox_new (FALSE, 4);
+ gtk_box_pack_start (GTK_BOX (arrange_box), gtk_label_new (_("Software arranged by")), FALSE, TRUE, 0);
+ m_arrange_combo = gtk_combo_box_new_text();
+ gtk_combo_box_append_text (GTK_COMBO_BOX (m_arrange_combo), _("Groups"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (m_arrange_combo), _("Repositories"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (m_arrange_combo), _("Status"));
+ gtk_combo_box_set_active (GTK_COMBO_BOX (m_arrange_combo), 0);
+ gtk_box_pack_start (GTK_BOX (arrange_box), m_arrange_combo, FALSE, TRUE, 0);
+ g_signal_connect (G_OBJECT (m_arrange_combo), "changed",
+ G_CALLBACK (arrange_combo_changed_cb), this);
- packages_box = gtk_vbox_new (FALSE, 4);
+ gtk_box_pack_start (GTK_BOX (packages_box), arrange_box, FALSE, TRUE, 0);
+ }
+
+ {
GtkWidget *header_box = gtk_hbox_new (FALSE, 6);
- if (arrange_box) {
- gtk_box_pack_start (GTK_BOX (header_box), arrange_box, FALSE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (header_box), gtk_event_box_new(), TRUE, TRUE, 0);
+ GtkWidget *header = gtk_label_new_with_mnemonic (_("_Listing:"));
+ gtk_misc_set_alignment (GTK_MISC (header), 0, .5);
+ gtk_label_set_mnemonic_widget (GTK_LABEL (header), GTK_WIDGET (m_all_view));
+ gtk_box_pack_start (GTK_BOX (header_box), header, TRUE, TRUE, 0);
+
+ if (status_top) {
+ PropertyCombo *combo = new PropertyCombo (new StatusModel());
+ m_query.push_back (combo);
+ gtk_box_pack_start (GTK_BOX (header_box), combo->getWidget(), FALSE, TRUE, 0);
+ }
+ if (categories_top) {
+ PropertyCombo *combo = new PropertyCombo (new CategoryModel());
+ m_query.push_back (combo);
+ gtk_box_pack_start (GTK_BOX (header_box), combo->getWidget(), FALSE, TRUE, 0);
+ }
+ if (repositories_top) {
+ PropertyCombo *combo = new PropertyCombo (new RepositoryModel());
+ m_query.push_back (combo);
+ gtk_box_pack_start (GTK_BOX (header_box), combo->getWidget(), FALSE, TRUE, 0);
}
- else {
- GtkWidget *header = gtk_label_new_with_mnemonic (_("_Listing:"));
- gtk_misc_set_alignment (GTK_MISC (header), 0, .5);
- gtk_label_set_mnemonic_widget (GTK_LABEL (header), GTK_WIDGET (m_all_view));
- gtk_box_pack_start (GTK_BOX (header_box), header, TRUE, TRUE, 0);
- }
- if (category_combo)
- gtk_box_pack_start (GTK_BOX (header_box), category_combo->getWidget(), FALSE, TRUE, 0);
- if (status_combo)
- gtk_box_pack_start (GTK_BOX (header_box), status_combo->getWidget(), FALSE, TRUE, 0);
- if (search_entry)
+ if (search_entry && !status_tabs)
gtk_box_pack_start (GTK_BOX (header_box), search_entry->getWidget(), FALSE, TRUE, 0);
+
+ if (startup_menu) {
+ GtkWidget *button = gtk_button_new_from_stock (GTK_STOCK_GO_BACK);
+ g_signal_connect (G_OBJECT (button), "clicked",
+ G_CALLBACK (back_clicked_cb), this);
+ gtk_box_pack_start (GTK_BOX (header_box), button, FALSE, TRUE, 0);
+ }
+
gtk_box_pack_start (GTK_BOX (packages_box), header_box, FALSE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (packages_box), GTK_WIDGET (m_all_view), TRUE, TRUE, 0);
}
- GtkWidget *packages_button_box = gtk_vbox_new (FALSE, 4);
- if (status_tabs && (arrange_box || category_combo || status_combo)) {
- GtkWidget *hbox = gtk_hbox_new (FALSE, 6);
- if (arrange_box)
- gtk_box_pack_start (GTK_BOX (hbox), arrange_box, FALSE, TRUE, 0);
- if (category_combo)
- gtk_box_pack_start (GTK_BOX (hbox), category_combo->getWidget(), FALSE, TRUE, 0);
- if (status_combo)
- gtk_box_pack_start (GTK_BOX (hbox), status_combo->getWidget(), FALSE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (packages_button_box), hbox, FALSE, TRUE, 0);
- }
- gtk_box_pack_start (GTK_BOX (packages_button_box), packages_box, TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (packages_box), packages_view, TRUE, TRUE, 0);
+
if (!toolbar_top && toolbar_yast)
- gtk_box_pack_start (GTK_BOX (packages_button_box), (m_toolbar = new Toolbar (true))->getWidget(), FALSE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (packages_box), (m_toolbar = new Toolbar (true))->getWidget(), FALSE, TRUE, 0);
GtkWidget *packages_pane = gtk_hpaned_new();
- gtk_paned_pack1 (GTK_PANED (packages_pane), packages_button_box, TRUE, FALSE);
+ gtk_paned_pack1 (GTK_PANED (packages_pane), packages_box, TRUE, FALSE);
ChangesPane *changes_pane = 0;
GtkWidget *undo_widget;
if (undo_side) {
@@ -3268,34 +3438,77 @@
gtk_box_pack_start (GTK_BOX (side_vbox), search_entry->getWidget(), FALSE, TRUE, 0);
}
- GtkWidget *cat_pane = gtk_vpaned_new();
+ _QueryWidget *category_view;
+ GtkWidget *vpaned = 0, *vbox = 0;
+ StackWidget *stack1 = 0, *stack2 = 0;
+ if (expander_sidebar)
+ vbox = gtk_expander_vbox_new (2);
+ if (layered_sidebar) {
+ stack1 = new StackWidget();
+ stack2 = new StackWidget();
+ }
+
if (categories_side) {
- _QueryWidget *categories = new CategoryView();
- m_query.push_back (categories);
- gtk_paned_pack1 (GTK_PANED (cat_pane), categories->getWidget(), TRUE, FALSE);
+ _QueryWidget *view = new PropertyView (new CategoryModel());
+ category_view = view;
+ m_query.push_back (view);
+ if (expander_sidebar) {
+ gtk_expander_set_expanded (GTK_EXPANDER (view->getWidget()), TRUE);
+ gtk_box_pack_start (GTK_BOX (vbox), view->getWidget(), FALSE, TRUE, 0);
+ }
+ else if (grid_sidebar)
+ ;
+ else if (stack1)
+ stack1->append (_("Categories"), view->getWidget());
+ else
+ vpaned = gtk_vpaned_append (vpaned, view->getWidget());
+ }
+ if (repositories_side) {
+ _QueryWidget *view = new PropertyView (new RepositoryModel());
+ m_query.push_back (view);
+ if (expander_sidebar)
+ gtk_box_pack_start (GTK_BOX (vbox), view->getWidget(), FALSE, TRUE, 0);
+ else if (stack1)
+ stack1->append (_("Repositories"), view->getWidget());
+ else
+ vpaned = gtk_vpaned_append (vpaned, view->getWidget());
}
if (status_side) {
- _QueryWidget *statuses = new StatusView();
- m_query.push_back (statuses);
- gtk_paned_pack2 (GTK_PANED (cat_pane), statuses->getWidget(), TRUE, FALSE);
+ _QueryWidget *view = new PropertyView (new StatusModel());
+ m_query.push_back (view);
+ if (expander_sidebar) {
+ gtk_expander_set_expanded (GTK_EXPANDER (view->getWidget()), TRUE);
+ gtk_box_pack_start (GTK_BOX (vbox), view->getWidget(), FALSE, TRUE, 0);
+ }
+ else if (stack2)
+ stack2->append (_("Status"), view->getWidget());
+ else
+ vpaned = gtk_vpaned_append (vpaned, view->getWidget());
+ }
+ if (grid_sidebar && category_view && vpaned) {
+ GtkWidget *hpaned = gtk_hpaned_new();
+ gtk_paned_pack1 (GTK_PANED (hpaned), category_view->getWidget(), TRUE, FALSE);
+ gtk_paned_pack2 (GTK_PANED (hpaned), vpaned, TRUE, FALSE);
+ vpaned = hpaned;
+ }
+
+ if (vpaned)
+ gtk_box_pack_start (GTK_BOX (side_vbox), vpaned, TRUE, TRUE, 0);
+ if (vbox)
+ gtk_box_pack_start (GTK_BOX (side_vbox), vbox, TRUE, TRUE, 0);
+ if (layered_sidebar) {
+ GtkWidget *vpaned = gtk_vpaned_new();
+ gtk_paned_pack1 (GTK_PANED (vpaned), stack1->getWidget(), TRUE, FALSE);
+ gtk_paned_pack2 (GTK_PANED (vpaned), stack2->getWidget(), TRUE, FALSE);
+ gtk_box_pack_start (GTK_BOX (side_vbox), vpaned, TRUE, TRUE, 0);
}
- gtk_box_pack_start (GTK_BOX (side_vbox), cat_pane, TRUE, TRUE, 0);
GtkWidget *side_pane = gtk_hpaned_new();
gtk_paned_pack1 (GTK_PANED (side_pane), side_vbox, FALSE, TRUE);
gtk_paned_pack2 (GTK_PANED (side_pane), view_pane, TRUE, FALSE);
- gtk_paned_set_position (GTK_PANED (side_pane), 150);
-
- for (std::list <_QueryWidget *>::const_iterator it = m_query.begin();
- it != m_query.end(); it++) {
- (*it)->updateType (m_type);
- (*it)->setListener (this);
- }
- refresh();
- updateDisk();
- Ypp::get()->getDisk()->addListener (this);
+ gtk_paned_set_position (GTK_PANED (side_pane), grid_sidebar ? 250 : 150);
- GtkWidget *vbox = gtk_vbox_new (FALSE, 6);
+ vbox = gtk_vbox_new (FALSE, 6);
if (toolbar_top) {
m_toolbar = new Toolbar (false);
gtk_box_pack_start (GTK_BOX (vbox), m_toolbar->getWidget(), FALSE, TRUE, 0);
@@ -3312,6 +3525,21 @@
gtk_widget_hide (side_vbox);
if (changes_pane)
changes_pane->startHack();
+
+ if (startup_menu) {
+ m_startup_menu = new StartupMenu (m_widget);
+ m_query.push_back (m_startup_menu);
+ m_widget = m_startup_menu->getWidget();
+ }
+
+ for (std::list <_QueryWidget *>::const_iterator it = m_query.begin();
+ it != m_query.end(); it++) {
+ (*it)->updateType (m_type);
+ (*it)->setListener (this);
+ }
+ refresh();
+ updateDisk();
+ Ypp::get()->getDisk()->addListener (this);
}
~UI()
@@ -3320,6 +3548,7 @@
it != m_query.end(); it++)
delete *it;
delete m_disk;
+ delete m_startup_menu;
}
private:
@@ -3488,6 +3717,11 @@
{
pThis->refresh();
}
+
+ static void back_clicked_cb (GtkButton *button, UI *pThis)
+ {
+ pThis->m_startup_menu->restore();
+ }
};
#include "pkg-selector-help.h"
Modified: trunk/gtk/src/pkg/ygtkpackageview.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/pkg/ygtkpackageview.cc?r…
==============================================================================
--- trunk/gtk/src/pkg/ygtkpackageview.cc (original)
+++ trunk/gtk/src/pkg/ygtkpackageview.cc Fri Jan 15 03:22:46 2010
@@ -20,7 +20,8 @@
#include <string.h>
extern bool status_col, action_col, action_col_as_button, action_col_as_check,
- action_col_label, version_col, colorful_rows, single_line_rows;
+ action_col_label, version_col, colorful_rows, italicize_changed_row,
+ golden_changed_row, single_line_rows;
//** Icons resources
@@ -114,6 +115,7 @@
SIZE_PROP, INSTALLED_VERSION_PROP, AVAILABLE_VERSION_PROP,
// checks
TO_INSTALL_PROP, TO_UPGRADE_PROP, TO_REMOVE_PROP, TO_MODIFY_PROP,
+ IS_INSTALLED_PROP,
// internal
STYLE_PROP, WEIGHT_PROP, SENSITIVE_PROP, CHECK_VISIBLE_PROP,
FOREGROUND_PROP, VERSION_FOREGROUND_PROP, BACKGROUND_PROP, XPAD_PROP,
@@ -145,6 +147,7 @@
case TO_UPGRADE_PROP:
case TO_REMOVE_PROP:
case TO_MODIFY_PROP:
+ case IS_INSTALLED_PROP:
case SENSITIVE_PROP:
case CHECK_VISIBLE_PROP:
return G_TYPE_BOOLEAN;
@@ -185,6 +188,7 @@
case TO_UPGRADE_PROP:
case TO_REMOVE_PROP:
case TO_MODIFY_PROP:
+ case IS_INSTALLED_PROP:
g_value_set_boolean (value, FALSE);
break;
case STYLE_PROP:
@@ -507,15 +511,25 @@
case TO_MODIFY_PROP:
g_value_set_boolean (value, package->toModify());
break;
+ case IS_INSTALLED_PROP: // if is-installed at the end
+ bool installed;
+ if (package->toInstall())
+ installed = true;
+ else if (package->toRemove())
+ installed = false;
+ else
+ installed = package->isInstalled();
+ g_value_set_boolean (value, installed);
+ break;
case SENSITIVE_PROP: {
bool sensitive = !package->isLocked();
g_value_set_boolean (value, sensitive);
break;
}
case STYLE_PROP: {
- if (colorful_rows) {
+ if (italicize_changed_row) {
PangoStyle style = PANGO_STYLE_NORMAL;
- if (package->isAuto())
+ if (package->toModify())
style = PANGO_STYLE_ITALIC;
g_value_set_int (value, style);
}
@@ -525,17 +539,23 @@
}
case VERSION_FOREGROUND_PROP:
case FOREGROUND_PROP: {
+ const char *color = 0;
if (colorful_rows) {
- const char *color = NULL;
if (!package->isInstalled())
color = "darkgray";
if (col == VERSION_FOREGROUND_PROP)
if (package->hasUpgrade())
color = "blue";
- g_value_set_string (value, color);
}
- else
- _getValueDefault (col, value);
+ g_value_set_string (value, color);
+ break;
+ }
+ case BACKGROUND_PROP: {
+ const char *color = 0;
+ if (golden_changed_row)
+ if (package->toModify())
+ color = "yellow";
+ g_value_set_string (value, color);
break;
}
case WEIGHT_PROP: {
@@ -668,6 +688,8 @@
return SIZE_PROP;
if (prop == "to-install")
return TO_INSTALL_PROP;
+ if (prop == "is-installed")
+ return IS_INSTALLED_PROP;
return (Property) 0;
}
@@ -706,10 +728,10 @@
clear();
if (action_col) {
- if (action_col_as_button)
+ if (action_col_as_check)
+ appendCheckColumn ("is-installed"); //("to-install");
+ else //if (action_col_as_button)
appendButtonColumn (NULL, "to-install");
- else // if (action_col_as_check)
- appendCheckColumn ("to-install");
}
if (status_col)
appendIconColumn (NULL, "icon");
@@ -864,6 +886,8 @@
return REMOVE_ACTION;
case TO_MODIFY_PROP:
return UNDO_ACTION;
+ case IS_INSTALLED_PROP:
+ return TOGGLE_ACTION;
}
}
@@ -1181,6 +1205,12 @@
case INSTALL_ACTION: package->install (0); break;
case REMOVE_ACTION: package->remove(); break;
case UNDO_ACTION: package->undo(); break;
+ case TOGGLE_ACTION:
+ if (package->isInstalled())
+ package->remove();
+ else
+ package->install(0);
+ break;
case NONE_ACTION: break;
}
/* else
@@ -1236,6 +1266,12 @@
case INSTALL_ACTION: packages.install(); break;
case REMOVE_ACTION: packages.remove(); break;
case UNDO_ACTION: packages.undo(); break;
+ case TOGGLE_ACTION:
+ if (packages.installed())
+ packages.remove();
+ else
+ packages.install();
+ break;
case NONE_ACTION: break;
}
}
Modified: trunk/gtk/src/pkg/ygtkpackageview.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/pkg/ygtkpackageview.h?re…
==============================================================================
--- trunk/gtk/src/pkg/ygtkpackageview.h (original)
+++ trunk/gtk/src/pkg/ygtkpackageview.h Fri Jan 15 03:22:46 2010
@@ -35,7 +35,7 @@
bool isVisible (const std::string &property);
void setRulesHint (bool hint);
- enum Action { NONE_ACTION, INSTALL_ACTION, REMOVE_ACTION, UNDO_ACTION };
+ enum Action { NONE_ACTION, INSTALL_ACTION, REMOVE_ACTION, UNDO_ACTION, TOGGLE_ACTION };
void setActivateAction (Action action);
struct Listener {
Added: trunk/gtk/tests/Label-Underline.ycp
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/tests/Label-Underline.ycp?re…
==============================================================================
--- trunk/gtk/tests/Label-Underline.ycp (added)
+++ trunk/gtk/tests/Label-Underline.ycp Fri Jan 15 03:22:46 2010
@@ -0,0 +1,31 @@
+// Underline Example - bug 559226
+//
+// Escape literal '&'
+
+{
+ import "Wizard";
+ import "Popup";
+ import "Label";
+
+ Wizard::CreateDialog ();
+ Wizard::SetContentsButtons ("Default button demo",
+ `VBox(
+ `PushButton("&One"),
+ `PushButton("&Tw&o"),
+ `PushButton("Escape&&"),
+ `PushButton("&Escape &&2"),
+ `PushButton("&Escape &&2&&&&"),
+ `PushButton("Escape &&&2&&&&"),
+ `PushButton("_gtk1"),
+ `PushButton("__gtk2")
+ ),
+ "Help",
+ Label::BackButton(),
+ Label::NextButton()
+ );
+
+
+ Wizard::UserInput();
+ Wizard::CloseDialog();
+}
+
--
To unsubscribe, e-mail: yast-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: yast-commit+help(a)opensuse.org
1
0
![](https://seccdn.libravatar.org/avatar/aad221099a4a6229c4881494c921128a.jpg?s=120&d=mm&r=g)
[yast-commit] r60385 - in /trunk/ca-management: src/YaPI/CaManagement.pm src/YaPI/caUtils.pm src/common_cert.ycp yast2-ca-management.spec.in
by mcalmer@svn.opensuse.org 14 Jan '10
by mcalmer@svn.opensuse.org 14 Jan '10
14 Jan '10
Author: mcalmer
Date: Thu Jan 14 18:21:53 2010
New Revision: 60385
URL: http://svn.opensuse.org/viewcvs/yast?rev=60385&view=rev
Log:
start implementing remove server certificate feature (fate#306590)
Modified:
trunk/ca-management/src/YaPI/CaManagement.pm
trunk/ca-management/src/YaPI/caUtils.pm
trunk/ca-management/src/common_cert.ycp
trunk/ca-management/yast2-ca-management.spec.in
Modified: trunk/ca-management/src/YaPI/CaManagement.pm
URL: http://svn.opensuse.org/viewcvs/yast/trunk/ca-management/src/YaPI/CaManagem…
==============================================================================
--- trunk/ca-management/src/YaPI/CaManagement.pm (original)
+++ trunk/ca-management/src/YaPI/CaManagement.pm Thu Jan 14 18:21:53 2010
@@ -162,6 +162,10 @@
and copy them to a place where other YaST modules look
for such a common certificate.
+$bool = RemoveCommonServerCertificate($valueMap)
+
+ Remove a common server certificate
+
$bool = ReadFile($valueMap)
Returns a certificate or CRL as plain text or parsed map.
@@ -6115,7 +6119,32 @@
return 1;
}
+=item *
+C<$bool = RemoveCommonServerCertificate($valueMap)>
+
+Remove a common server certificate from disk
+
+=cut
+
+BEGIN { $TYPEINFO{RemoveCommonServerCertificate} = ["function", "boolean"]; }
+sub RemoveCommonServerCertificate {
+ my $self = shift;
+
+ if ( -e "/etc/ssl/servercerts/servercert.pem" )
+ {
+ unlink("/etc/ssl/servercerts/servercert.pem");
+ }
+ if ( -e "/etc/ssl/servercerts/serverkey.pem" )
+ {
+ unlink("/etc/ssl/servercerts/serverkey.pem");
+ }
+ if ( -e "/etc/ssl/certs/YaST-CA.pem" )
+ {
+ unlink("/etc/ssl/certs/YaST-CA.pem");
+ }
+ return 1;
+}
=item *
C<$bool = ReadFile($valueMap)>
Modified: trunk/ca-management/src/YaPI/caUtils.pm
URL: http://svn.opensuse.org/viewcvs/yast/trunk/ca-management/src/YaPI/caUtils.p…
==============================================================================
--- trunk/ca-management/src/YaPI/caUtils.pm (original)
+++ trunk/ca-management/src/YaPI/caUtils.pm Thu Jan 14 18:21:53 2010
@@ -56,7 +56,7 @@
'X509v3 Subject Key Identifier' => 'subjectKeyIdentifier',
'X509v3 Certificate Policies' => 'certificatePolicies',
'Authority Information Access' => 'authorityInfoAccess',
-
+
'nsCaRevocationUrl' => 'Netscape CA Revocation Url' ,
'nsCaPolicyUrl' => 'Netscape CA Policy Url' ,
'nsBaseUrl' => 'Netscape Base Url' ,
@@ -70,12 +70,12 @@
'keyUsage' => 'X509v3 Key Usage' ,
'issuserAltName' => 'X509v3 Issuer Alternative Name',
'subjectAltName' => 'X509v3 Subject Alternative Name',
- 'authorityKeyIdentifier' => 'X509v3 Authority Key Identifier',
+ 'authorityKeyIdentifier' => 'X509v3 Authority Key Identifier',
'extendedKeyUsage' => 'X509v3 Extended Key Usage' ,
'subjectKeyIdentifier' => 'X509v3 Subject Key Identifier' ,
'certificatePolicies' => 'X509v3 Certificate Policies' ,
'authorityInfoAccess' => 'Authority Information Access' ,
-
+
# double entry 'email' => 'email',
'URI' => 'URI',
'DNS' => 'DNS',
@@ -100,17 +100,17 @@
'msEFS' => 'Microsoft Encrypted File System',
'nsSGC' => 'Netscape Server Gated Crypto',
- 'SSL/TLS Web Server Authentication' => 'serverAuth' ,
- 'SSL/TLS Web Client Authentication' => 'clientAuth' ,
- 'Code signing' => 'codeSigning' ,
+ 'SSL/TLS Web Server Authentication' => 'serverAuth' ,
+ 'SSL/TLS Web Client Authentication' => 'clientAuth' ,
+ 'Code signing' => 'codeSigning' ,
'E-mail Protection' => 'emailProtection',
- 'Trusted Timestamping' => 'timeStamping' ,
- 'Microsoft Individual Code Signing' => 'msCodeInd' ,
- 'Microsoft Commercial Code Signing' => 'msCodeCom' ,
- 'Microsoft Trust List Signing' => 'msCTLSign' ,
- 'Microsoft Server Gated Crypto' => 'msSGC' ,
- 'Microsoft Encrypted File System' => 'msEFS' ,
- 'Netscape Server Gated Crypto' => 'nsSGC' ,
+ 'Trusted Timestamping' => 'timeStamping' ,
+ 'Microsoft Individual Code Signing' => 'msCodeInd' ,
+ 'Microsoft Commercial Code Signing' => 'msCodeCom' ,
+ 'Microsoft Trust List Signing' => 'msCTLSign' ,
+ 'Microsoft Server Gated Crypto' => 'msSGC' ,
+ 'Microsoft Encrypted File System' => 'msEFS' ,
+ 'Netscape Server Gated Crypto' => 'nsSGC' ,
'client' => 'SSL Client',
'server' => 'SSL Server',
@@ -132,15 +132,15 @@
'decipherOnly' => 'Decipher Only',
- 'SSL Client' => 'client' ,
- 'SSL Server' => 'server' ,
- 'S/MIME' => 'email' ,
- 'Object Signing' => 'objsign' ,
+ 'SSL Client' => 'client' ,
+ 'SSL Server' => 'server' ,
+ 'S/MIME' => 'email' ,
+ 'Object Signing' => 'objsign' ,
'Unused' => 'reserved',
'SSL CA' => 'sslCA' ,
'S/MIME CA' => 'emailCA' ,
'Object Signing CA' => 'objCA' ,
-
+
'Digital Signature' => 'digitalSignature',
'Non Repudiation' => 'nonRepudiation' ,
'Key Encipherment' => 'keyEncipherment' ,
@@ -165,7 +165,7 @@
if($p eq "critical") {
$crit = 1;
next;
- }
+ }
if(uc($p) eq "CA:TRUE") {
$ca = 1;
next;
@@ -184,9 +184,9 @@
my $bc = new LIMAL::CaMgm::BasicConstraintsExt();
if(!defined $value || $value eq "") {
-
+
$bc->setPresent(0);
-
+
} else {
$bc->setBasicConstraints($ca, $pathl);
@@ -194,7 +194,7 @@
$bc->setCritical($crit);
}
}
-
+
$exts->setBasicConstraints($bc);
return 1;
}
@@ -208,7 +208,7 @@
my $crit = 0;
my $string = "";
- if ( !grep( ($_ eq $type),
+ if ( !grep( ($_ eq $type),
("nsComment", "nsBaseUrl", "nsRevocationUrl",
"nsCaRevocationUrl", "nsRenewalUrl",
"nsCaPolicyUrl", "nsSslServerName") ) ) {
@@ -224,16 +224,16 @@
}
if(defined $2) {
$string = $2;
- }
+ }
}
-
+
if($type eq "nsComment") {
my $e = new LIMAL::CaMgm::NsCommentExt();
if(!defined $value || $value eq "") {
-
+
$e->setPresent(0);
-
+
} else {
$e->setValue($string);
@@ -241,16 +241,16 @@
$e->setCritical($crit);
}
}
-
+
$exts->setNsComment($e);
-
+
} elsif($type eq "nsBaseUrl") {
my $e = new LIMAL::CaMgm::NsBaseUrlExt();
if(!defined $value || $value eq "") {
-
+
$e->setPresent(0);
-
+
} else {
$e->setValue($string);
@@ -258,16 +258,16 @@
$e->setCritical($crit);
}
}
-
+
$exts->setNsBaseUrl($e);
} elsif($type eq "nsRevocationUrl") {
my $e = new LIMAL::CaMgm::NsRevocationUrlExt();
if(!defined $value || $value eq "") {
-
+
$e->setPresent(0);
-
+
} else {
$e->setValue($string);
@@ -275,16 +275,16 @@
$e->setCritical($crit);
}
}
-
+
$exts->setNsRevocationUrl($e);
} elsif($type eq "nsCaRevocationUrl") {
my $e = new LIMAL::CaMgm::NsCaRevocationUrlExt();
if(!defined $value || $value eq "") {
-
+
$e->setPresent(0);
-
+
} else {
$e->setValue($string);
@@ -292,16 +292,16 @@
$e->setCritical($crit);
}
}
-
+
$exts->setNsCaRevocationUrl($e);
} elsif($type eq "nsRenewalUrl") {
my $e = new LIMAL::CaMgm::NsRenewalUrlExt();
if(!defined $value || $value eq "") {
-
+
$e->setPresent(0);
-
+
} else {
$e->setValue($string);
@@ -309,16 +309,16 @@
$e->setCritical($crit);
}
}
-
+
$exts->setNsRenewalUrl($e);
} elsif($type eq "nsCaPolicyUrl") {
my $e = new LIMAL::CaMgm::NsCaPolicyUrlExt();
if(!defined $value || $value eq "") {
-
+
$e->setPresent(0);
-
+
} else {
$e->setValue($string);
@@ -326,16 +326,16 @@
$e->setCritical($crit);
}
}
-
+
$exts->setNsCaPolicyUrl($e);
} elsif($type eq "nsSslServerName") {
my $e = new LIMAL::CaMgm::NsSslServerNameExt();
if(!defined $value || $value eq "") {
-
+
$e->setPresent(0);
-
+
} else {
$e->setValue($string);
@@ -343,7 +343,7 @@
$e->setCritical($crit);
}
}
-
+
$exts->setNsSslServerName($e);
}
return 1;
@@ -361,7 +361,7 @@
if($p eq "critical") {
$crit = 1;
next;
- }
+ }
if(lc($p) eq "client") {
$ct |= $LIMAL::CaMgm::NsCertTypeExt::client;
@@ -395,13 +395,13 @@
$ct |= $LIMAL::CaMgm::NsCertTypeExt::objCA;
}
- }
-
+ }
+
my $e = new LIMAL::CaMgm::NsCertTypeExt();
if(!defined $value || $value eq "") {
-
+
$e->setPresent(0);
-
+
} else {
$e->setNsCertType($ct);
@@ -409,7 +409,7 @@
$e->setCritical($crit);
}
}
-
+
$exts->setNsCertType($e);
return 1;
@@ -427,7 +427,7 @@
if($p eq "critical") {
$crit = 1;
next;
- }
+ }
if(lc($p) eq "digitalsignature") {
$ku |= $LIMAL::CaMgm::KeyUsageExt::digitalSignature;
@@ -465,13 +465,13 @@
$ku |= $LIMAL::CaMgm::KeyUsageExt::decipherOnly;
}
- }
-
+ }
+
my $e = new LIMAL::CaMgm::KeyUsageExt();
if(!defined $value || $value eq "") {
-
+
$e->setPresent(0);
-
+
} else {
$e->setKeyUsage($ku);
@@ -479,7 +479,7 @@
$e->setCritical($crit);
}
}
-
+
$exts->setKeyUsage($e);
return 1;
@@ -511,9 +511,9 @@
my $e = new LIMAL::CaMgm::SubjectKeyIdentifierExt();
if(!defined $value || $value eq "") {
-
+
$e->setPresent(0);
-
+
} else {
$e->setSubjectKeyIdentifier($auto, $hv);
@@ -521,7 +521,7 @@
$e->setCritical($crit);
}
}
-
+
$exts->setSubjectKeyIdentifier($e);
return 1;
}
@@ -560,9 +560,9 @@
my $e = new LIMAL::CaMgm::AuthorityKeyIdentifierGenerateExt();
if(!defined $value || $value eq "") {
-
+
$e->setPresent(0);
-
+
} else {
$e->setKeyID($keyID);
@@ -571,7 +571,7 @@
$e->setCritical($crit);
}
}
-
+
$exts->setAuthorityKeyIdentifier($e);
return 1;
@@ -582,7 +582,7 @@
my $exts = shift;
my $value = shift || "";
my $forDefaults = shift || 0;
-
+
my $crit = 0;
my $emailCopy = 0;
my $list = new LIMAL::CaMgm::LiteralValueList();
@@ -612,15 +612,15 @@
}
next;
}
-
+
$list->push_back(new LIMAL::CaMgm::LiteralValue($p));
}
my $e = new LIMAL::CaMgm::SubjectAlternativeNameExt();
if(!defined $value || $value eq "") {
-
+
$e->setPresent(0);
-
+
} else {
$e->setCopyEmail($emailCopy);
@@ -629,7 +629,7 @@
$e->setCritical($crit);
}
}
-
+
$exts->setSubjectAlternativeName($e);
return 1;
@@ -640,7 +640,7 @@
my $exts = shift;
my $value = shift || "";
my $forDefaults = shift || 0;
-
+
my $crit = 0;
my $issuerCopy = 0;
my $list = new LIMAL::CaMgm::LiteralValueList();
@@ -676,18 +676,18 @@
my $e = new LIMAL::CaMgm::IssuerAlternativeNameExt();
if(!defined $value || $value eq "") {
-
+
$e->setPresent(0);
-
+
} else {
-
+
$e->setCopyIssuer($issuerCopy);
$e->setAlternativeNameList($list);
if($crit) {
$e->setCritical($crit);
}
}
-
+
$exts->setIssuerAlternativeName($e);
return 1;
@@ -700,7 +700,7 @@
my $crit = 0;
my $list = new LIMAL::StringList();
-
+
foreach my $p (split(/\s*,\s*/ , $value)) {
if($p eq "critical") {
$crit = 1;
@@ -711,17 +711,17 @@
my $e = new LIMAL::CaMgm::ExtendedKeyUsageExt();
if(!defined $value || $value eq "") {
-
+
$e->setPresent(0);
-
+
} else {
-
+
$e->setExtendedKeyUsage($list);
if($crit) {
$e->setCritical($crit);
}
}
-
+
$exts->setExtendedKeyUsage($e);
return 1;
@@ -734,7 +734,7 @@
my $crit = 0;
my $list = new LIMAL::CaMgm::AuthorityInformationList();
-
+
foreach my $p (split(/\s*,\s*/ , $value)) {
if($p eq "critical") {
$crit = 1;
@@ -743,7 +743,7 @@
my($accessOID, $location) = split(/\s*;\s*/ , $p, 2);
if ( $accessOID eq "OCSP" || $accessOID eq "caIssuers" ||
$accessOID =~ /^(\d+\.)+\d+$/ ) {
-
+
my $lv = new LIMAL::CaMgm::LiteralValue($location);
my $ai = new LIMAL::CaMgm::AuthorityInformation($accessOID, $lv);
@@ -753,17 +753,17 @@
my $e = new LIMAL::CaMgm::AuthorityInfoAccessExt();
if(!defined $value || $value eq "") {
-
+
$e->setPresent(0);
-
+
} else {
-
+
$e->setAuthorityInformation($list);
if($crit) {
$e->setCritical($crit);
}
}
-
+
$exts->setAuthorityInfoAccess($e);
return 1;
@@ -787,17 +787,17 @@
my $e = new LIMAL::CaMgm::CRLDistributionPointsExt();
if(!defined $value || $value eq "") {
-
+
$e->setPresent(0);
-
+
} else {
-
+
$e->setCRLDistributionPoints($list);
if($crit) {
$e->setCritical($crit);
}
}
-
+
$exts->setCRLDistributionPoints($e);
return 1;
@@ -865,7 +865,7 @@
}
push @vals, $ext->getValue();
-
+
$ret->{$type} = join(', ', @vals);
return 1;
@@ -889,7 +889,7 @@
push @vals , "critical";
}
-
+
if($ext->isEnabledFor($LIMAL::CaMgm::NsCertTypeExt::client)) {
push @vals, "client";
}
@@ -914,7 +914,7 @@
if($ext->isEnabledFor($LIMAL::CaMgm::NsCertTypeExt::objCA)) {
push @vals, "objCA";
}
-
+
$ret->{'nsCertType'} = join(', ', @vals);
return 1;
@@ -938,7 +938,7 @@
push @vals , "critical";
}
-
+
if($ext->isEnabledFor($LIMAL::CaMgm::KeyUsageExt::digitalSignature)) {
push @vals, "digitalSignature";
}
@@ -966,7 +966,7 @@
if($ext->isEnabledFor($LIMAL::CaMgm::KeyUsageExt::decipherOnly)) {
push @vals, "decipherOnly";
}
-
+
$ret->{'keyUsage'} = join(', ', @vals);
return 1;
@@ -990,7 +990,7 @@
push @vals , "critical";
}
-
+
if($ext->isAutoDetectionEnabled()) {
push @vals, "hash";
@@ -1000,7 +1000,7 @@
push @vals, $ext->getKeyID();
}
-
+
$ret->{'subjectKeyIdentifier'} = join(', ', @vals);
return 1;
@@ -1042,7 +1042,7 @@
{
push @vals, "issuer:always";
}
-
+
$ret->{'authorityKeyIdentifier'} = join(', ', @vals);
return 1;
@@ -1077,7 +1077,7 @@
for(my $it = $list->begin();
!$list->iterator_equal($it, $list->end());
- $list->iterator_incr($it))
+ $list->iterator_incr($it))
{
if($list->iterator_value($it)->getType() eq "1.3.6.1.4.1.311.20.2.3")
{
@@ -1092,7 +1092,7 @@
push @vals, $list->iterator_value($it)->toString();
}
}
-
+
$ret->{'subjectAltName'} = join(', ', @vals);
return 1;
@@ -1127,7 +1127,7 @@
for(my $it = $list->begin();
!$list->iterator_equal($it, $list->end());
- $list->iterator_incr($it))
+ $list->iterator_incr($it))
{
if($list->iterator_value($it)->getType() eq "1.3.6.1.4.1.311.20.2.3")
{
@@ -1142,7 +1142,7 @@
push @vals, $list->iterator_value($it)->toString();
}
}
-
+
$ret->{'issuerAltName'} = join(', ', @vals);
return 1;
@@ -1171,13 +1171,13 @@
for(my $it = $list->begin();
!$list->iterator_equal($it, $list->end());
- $list->iterator_incr($it))
+ $list->iterator_incr($it))
{
push @vals, $list->iterator_value($it);
-
+
}
-
+
$ret->{'extendedKeyUsage'} = join(', ', @vals);
return 1;
@@ -1206,13 +1206,13 @@
for(my $it = $list->begin();
!$list->iterator_equal($it, $list->end());
- $list->iterator_incr($it))
+ $list->iterator_incr($it))
{
my $ai = $list->iterator_value($it);
my $str = $ai->getAccessOID().";".$ai->getLocation()->toString();
push @vals, $str;
}
-
+
$ret->{'authorityInfoAccess'} = join(', ', @vals);
return 1;
@@ -1241,11 +1241,11 @@
for(my $it = $list->begin();
!$list->iterator_equal($it, $list->end());
- $list->iterator_incr($it))
+ $list->iterator_incr($it))
{
push @vals, $list->iterator_value($it)->toString();
}
-
+
$ret->{'crlDistributionPoints'} = join(', ', @vals);
return 1;
@@ -1273,7 +1273,7 @@
ref($ret->{$1}) eq "ARRAY") {
my @a = @{$ret->{$1}};
-
+
push(@a, $2);
$ret->{$1} = \@a;
@@ -1291,9 +1291,9 @@
my $self = shift;
my $cert = shift;
my $ret = {};
-
+
$ret->{PLAIN_EXTENSIONS} = $cert->getExtensionsAsText();
-
+
$ret->{DN_HASH} = $self->parseDN($cert->getSubjectDN());
$ret->{ISSUER_HASH} = $self->parseDN($cert->getIssuerDN());
@@ -1303,9 +1303,9 @@
my @a = split('\n', $cert->getCertificateAsText());
my $found = 0;
-
+
my $val = "";
-
+
foreach my $line (@a) {
chomp($line);
@@ -1324,7 +1324,10 @@
$ret->{NOTBEFORE} = $self->time2human($cert->getStartDate());
$ret->{NOTAFTER} = $self->time2human($cert->getEndDate());
-
+ $ret->{NOTBEFORE_UNIX} = $cert->getStartDate();
+ $ret->{NOTAFTER_UNIX} = $cert->getEndDate();
+ $ret->{EXPIRED} = ($cert->getEndDate() < time)?1:0;
+
$ret->{FINGERPRINT} = $cert->getFingerprint();
$ret->{KEYSIZE} = $cert->getKeysize();
@@ -1371,7 +1374,7 @@
if(exists $ret->{DN_HASH}->{emailAddress}) {
@em = @{$ret->{DN_HASH}->{emailAddress}};
}
-
+
if($cert->getExtensions()->getSubjectAlternativeName()->isPresent()) {
my $list = $cert->getExtensions()->getSubjectAlternativeName()->getAlternativeNameList();
@@ -1379,9 +1382,9 @@
for(my $it = $list->begin();
!$list->iterator_equal($it, $list->end());
$list->iterator_incr($it)) {
-
+
if($list->iterator_value($it)->getType() eq "email") {
-
+
push @em, $list->iterator_value($it)->getValue();
}
}
@@ -1416,15 +1419,15 @@
my $self = shift;
my $crl = shift;
my $ret = {};
-
+
$ret->{PLAIN_EXTENSIONS} = $crl->getExtensionsAsText();
-
+
$ret->{ISSUER_HASH} = $self->parseDN($crl->getIssuerDN());
$ret->{ISSUER} = $crl->getIssuerDN()->getOpenSSLString();
$ret->{LASTUPDATE} = $self->time2human($crl->getLastUpdateDate());
$ret->{NEXTUPDATE} = $self->time2human($crl->getNextUpdateDate());
-
+
$ret->{FINGERPRINT} = $crl->getFingerprint();
if($crl->getSignatureAlgorithm() == $LIMAL::CaMgm::E_SHA1RSA) {
@@ -1503,18 +1506,18 @@
my $self = shift;
my $req = shift;
my $ret = {};
-
+
$ret->{PLAIN_EXTENSIONS} = $req->getExtensionsAsText();
-
+
$ret->{SUBJECT_HASH} = $self->parseDN($req->getSubjectDN());
$ret->{DN} = $req->getSubjectDN()->getOpenSSLString();
my @a = split('\n', $req->getRequestAsText());
my $found = 0;
-
+
my $val = "";
-
+
foreach my $line (@a) {
chomp($line);
@@ -1581,7 +1584,7 @@
if(exists $ret->{SUBJECT_HASH}->{emailAddress}) {
@em = @{$ret->{SUBJECT_HASH}->{emailAddress}};
}
-
+
if($req->getExtensions()->getSubjectAlternativeName()->isPresent()) {
my $list = $req->getExtensions()->getSubjectAlternativeName()->getAlternativeNameList();
@@ -1589,11 +1592,11 @@
for(my $it = $list->begin();
!$list->iterator_equal($it, $list->end());
$list->iterator_incr($it)) {
-
+
if($list->iterator_value($it)->getType() eq "email") {
-
+
push @em, $list->iterator_value($it)->getValue();
-
+
}
}
}
@@ -1666,13 +1669,13 @@
for(my $it = $list->begin();
!$list->iterator_equal($it, $list->end());
$list->iterator_incr($it)) {
-
- if($list->iterator_value($it)->getType() eq "1.3.6.1.4.1.311.20.2.3")
+
+ if($list->iterator_value($it)->getType() eq "1.3.6.1.4.1.311.20.2.3")
{
$val .= "MS-UPN:".$list->iterator_value($it)->getValue().", ";
-
+
}
- elsif($list->iterator_value($it)->getType() eq "1.3.6.1.5.2.2")
+ elsif($list->iterator_value($it)->getType() eq "1.3.6.1.5.2.2")
{
$val .= "K5PN:".$list->iterator_value($it)->getValue().", ";
}
@@ -1695,18 +1698,18 @@
my $ext = {};
my $newExt = {};
-
+
$ext = $data->{OPENSSL_EXTENSIONS};
delete $data->{OPENSSL_EXTENSIONS};
foreach my $a (keys %$ext) {
-
+
my $newKey = $transMap->{$a};
-
+
$newExt->{$newKey}->{description} = $a;
$newExt->{$newKey}->{critical} = 0;
$newExt->{$newKey}->{value} = [];
-
+
foreach my $b (@{$ext->{$a}}) {
if($b =~ /^\s*critical/) {
@@ -1762,7 +1765,7 @@
# not supported by openssl
next;
}
-
+
my $h = {};
$h->{type} = $transMap->{$sp1[0]};
if(!defined $h->{type}) {
@@ -1810,9 +1813,9 @@
my $self = shift;
my $data = shift || return $self->SetError(summary => __("Missing 'data' map."),
code => "PARAM_CHECK_FAILED");
-
+
foreach my $key (keys %{$data}) {
- # we check only common values.
+ # we check only common values.
# It is possible that keys appear which could not be checked.
if ( $key eq "caName" || $key eq "newCaName") {
if (! defined $data->{$key} ||
@@ -1863,10 +1866,10 @@
code => "PARAM_CHECK_FAILED");
}
} elsif ( $key eq "crlReason") {
- if ( !grep( ($_ eq $data->{$key}),
+ if ( !grep( ($_ eq $data->{$key}),
("unspecified", "keyCompromise", "CACompromise",
- "affiliationChanged", "superseded",
- "cessationOfOperation", "certificateHold") ) )
+ "affiliationChanged", "superseded",
+ "cessationOfOperation", "certificateHold") ) )
{
return $self->SetError(summary => sprintf(__("Invalid value '%s' for parameter '%s'."),$data->{$key}, $key),
code => "PARAM_CHECK_FAILED");
@@ -1890,7 +1893,7 @@
}
} elsif ( $key eq "basicConstraints") {
# test critical
- if ($data->{$key} =~ /critical/ &&
+ if ($data->{$key} =~ /critical/ &&
$data->{$key} !~ /^\s*critical/) {
return $self->SetError(summary => sprintf(__("Wrong use of 'critical' in '%s'."),$key),
code => "PARAM_CHECK_FAILED");
@@ -1904,21 +1907,21 @@
__("Unknown value '%s' in '%s'."),
$p, $key),
code => "PARAM_CHECK_FAILED");
- }
+ }
if ($data->{$key} =~ /^\s*(critical)?\s*$/) {
return $self->SetError(summary => sprintf(__("Invalid value '%s' for parameter '%s'."),$data->{$key}, $key),
code => "PARAM_CHECK_FAILED");
}
} elsif ( $key eq "nsComment") {
# test critical
- if ($data->{$key} =~ /critical/ &&
+ if ($data->{$key} =~ /critical/ &&
$data->{$key} !~ /^\s*critical/) {
return $self->SetError(summary => sprintf(__("Wrong use of 'critical' in '%s'."),$key),
code => "PARAM_CHECK_FAILED");
}
} elsif ( $key eq "nsCertType") {
# test critical
- if ($data->{$key} =~ /critical/ &&
+ if ($data->{$key} =~ /critical/ &&
$data->{$key} !~ /^\s*critical/) {
return $self->SetError(summary => sprintf(__("Wrong use of 'critical' in '%s'."),$key),
code => "PARAM_CHECK_FAILED");
@@ -1937,7 +1940,7 @@
}
} elsif ( $key eq "keyUsage") {
# test critical
- if ($data->{$key} =~ /critical/ &&
+ if ($data->{$key} =~ /critical/ &&
$data->{$key} !~ /^\s*critical/) {
return $self->SetError(summary => sprintf(__("Wrong use of 'critical' in '%s'."),$key),
code => "PARAM_CHECK_FAILED");
@@ -1948,7 +1951,7 @@
"keyEncipherment", "dataEncipherment",
"keyAgreement", "keyCertSign", "cRLSign",
"encipherOnly", "decipherOnly")))
- {
+ {
return $self->SetError(summary => sprintf(__("Invalid value '%s' for parameter '%s'."),$data->{$key}, $key),
code => "PARAM_CHECK_FAILED");
}
@@ -1959,7 +1962,7 @@
}
} elsif ( $key eq "subjectKeyIdentifier") {
# test critical
- if ($data->{$key} =~ /critical/ &&
+ if ($data->{$key} =~ /critical/ &&
$data->{$key} !~ /^\s*critical/) {
return $self->SetError(summary => sprintf(__("Wrong use of 'critical' in '%s'."),$key),
code => "PARAM_CHECK_FAILED");
@@ -1977,7 +1980,7 @@
}
} elsif ( $key eq "authorityKeyIdentifier") {
# test critical
- if ($data->{$key} =~ /critical/ &&
+ if ($data->{$key} =~ /critical/ &&
$data->{$key} !~ /^\s*critical/) {
return $self->SetError(summary => sprintf(__("Wrong use of 'critical' in '%s'."),$key),
code => "PARAM_CHECK_FAILED");
@@ -1986,7 +1989,7 @@
next if($p eq "critical");
next if(grep( ($_ eq $p), ("issuer:always", "keyid:always",
"issuer", "keyid")));
-
+
return $self->SetError(summary => sprintf(__("Invalid value '%s' for parameter '%s'."),$data->{$key}, $key),
code => "PARAM_CHECK_FAILED");
}
@@ -1996,7 +1999,7 @@
}
} elsif ( $key eq "subjectAltName" || $key eq "issuerAltName") {
# test critical
- if ($data->{$key} =~ /critical/ &&
+ if ($data->{$key} =~ /critical/ &&
$data->{$key} !~ /^\s*critical/) {
return $self->SetError(summary => sprintf(__("Wrong use of 'critical' in '%s'."),$key),
code => "PARAM_CHECK_FAILED");
@@ -2071,7 +2074,7 @@
$key eq "nsCaRevocationUrl" || $key eq "nsRenewalUrl" ||
$key eq "nsCaPolicyUrl" ) {
# test critical
- if ($data->{$key} =~ /critical/ &&
+ if ($data->{$key} =~ /critical/ &&
$data->{$key} !~ /^\s*critical/) {
return $self->SetError(summary => sprintf(__("Wrong use of 'critical' in '%s'."),$key),
code => "PARAM_CHECK_FAILED");
@@ -2085,7 +2088,7 @@
}
} elsif ( $key eq "nsSslServerName") {
# test critical
- if ($data->{$key} =~ /critical/ &&
+ if ($data->{$key} =~ /critical/ &&
$data->{$key} !~ /^\s*critical/) {
return $self->SetError(summary => sprintf(__("Wrong use of 'critical' in '%s'."),$key),
code => "PARAM_CHECK_FAILED");
@@ -2096,7 +2099,7 @@
}
} elsif ( $key eq "extendedKeyUsage") {
# test critical
- if ($data->{$key} =~ /critical/ &&
+ if ($data->{$key} =~ /critical/ &&
$data->{$key} !~ /^\s*critical/) {
return $self->SetError(summary => sprintf(__("Wrong use of 'critical' in '%s'."),$key),
code => "PARAM_CHECK_FAILED");
@@ -2110,17 +2113,17 @@
"msSGC", "msEFS", "nsSGC", "msSmartcardLogin")));
return $self->SetError(summary => sprintf(
__("Invalid value '%s' for parameter '%s'."),
- $p, $key),
+ $p, $key),
code => "PARAM_CHECK_FAILED");
}
if ($data->{$key} =~ /^\s*(critical)?\s*$/) {
return $self->SetError(summary => sprintf(__("Invalid value '%s' for parameter '%s'."),$data->{$key}, $key),
code => "PARAM_CHECK_FAILED");
}
-
+
} elsif ( $key eq "authorityInfoAccess") {
# test critical
- if ($data->{$key} =~ /critical/ &&
+ if ($data->{$key} =~ /critical/ &&
$data->{$key} !~ /^\s*critical/) {
return $self->SetError(summary => sprintf(__("Wrong use of 'critical' in '%s'."),$key),
code => "PARAM_CHECK_FAILED");
@@ -2184,7 +2187,7 @@
}
} elsif ( $key eq "crlDistributionPoints") {
# test critical
- if ($data->{$key} =~ /critical/ &&
+ if ($data->{$key} =~ /critical/ &&
$data->{$key} !~ /^\s*critical/) {
return $self->SetError(summary => sprintf(__("Wrong use of 'critical' in '%s'."),$key),
code => "PARAM_CHECK_FAILED");
@@ -2217,12 +2220,12 @@
sub exception2String {
my $self = shift;
my $err = shift || undef;
-
- if(!defined $err)
+
+ if(!defined $err)
{
return "";
}
- elsif(ref($err) eq "HASH")
+ elsif(ref($err) eq "HASH")
{
my $msg = "";
if(exists $err->{type} && defined $err->{type})
Modified: trunk/ca-management/src/common_cert.ycp
URL: http://svn.opensuse.org/viewcvs/yast/trunk/ca-management/src/common_cert.yc…
==============================================================================
--- trunk/ca-management/src/common_cert.ycp (original)
+++ trunk/ca-management/src/common_cert.ycp Thu Jan 14 18:21:53 2010
@@ -37,58 +37,97 @@
Wizard::CreateDialog();
Wizard::SetDesktopIcon("ca-management");
-// help text 1/4
+// help text 1/5
string helptext = _("<p>The <b>Common Server Certificate</b> will be used by other YaST modules.</p>");
-// help text 2/4
+// help text 2/5
helptext = helptext + _("<p>This certificate can be exchanged by importing a certificate from a file.</p>");
-// help text 3/4
+// help text 3/5
helptext = helptext + _("<p>Certificates can be written to a file using <b>Export to File</b> in section <b>Certificate</b> in the <b>CA Management</b> module.</p>");
-// help text 3/4
+// help text 4/5
helptext = helptext + _("<p>Certificates to import from disk must have been written in <b>PKCS12 format with CA chain</b>.</p>");
+// help text 5/5
+helptext = helptext + _("<p>You can remove the Certificates from disk. But make sure, that it is not used anymore by other services.</p>");
+
symbol ui = nil;
repeat
{
string ret = (string) YaPI::CaManagement::ReadFile ($[ "inFile":"/etc/ssl/servercerts/servercert.pem",
- "datatype":"CERTIFICATE",
- "inForm":"PEM",
- "type":"plain"]);
-
- y2milestone("ReadCertificate(/etc/ssl/certs/YaST-CA.pem): %1", ret);
+ "datatype":"CERTIFICATE",
+ "inForm":"PEM",
+ "type":"plain"]);
+
+ y2milestone("ReadCertificate(/etc/ssl/servercerts/servercert.pem): %1", ret);
if (ret == nil)
{
- ret = "<pre>Common Server Certificate not found.\nYou can import a certificate from disk</pre>";
+ ret = "<pre>Common Server Certificate not found.\nYou can import a certificate from disk</pre>";
}
else
{
- ret = "<pre>" + ret + "</pre>";
+ ret = "<pre>" + ret + "</pre>";
}
-
term contents = `VBox (
- `Left(`Label (_("Description"))),
- `VSpacing (0.5),
- `RichText (ret),
- `VSpacing (0.5),
- `Right (`PushButton (`id(`importDisk), _("&Import")))
- );
-
+ `Left(`Label (_("Description"))),
+ `VSpacing (0.5),
+ `RichText (ret),
+ `VSpacing (0.5),
+ `HBox ( // push button label
+ `HStretch(),
+ `PushButton (`id(`remove), _("&Remove")),
+ `PushButton (`id(`importDisk), _("&Import")))
+ );
+
// To translators: dialog label
Wizard::SetContents (_("Common Server Certificate"), contents, helptext, false, true);
Wizard::SetNextButton(`next, Label::FinishButton() );
-
+
ui = (symbol) UI::UserInput ();
if (ui == `importDisk)
{
- importCertificateFromDisk();
- ui = `again;
+ importCertificateFromDisk();
+ ui = `again;
+ }
+ if (ui == `remove)
+ {
+ map crt = (map) YaPI::CaManagement::ReadFile ($[ "inFile":"/etc/ssl/servercerts/servercert.pem",
+ "datatype":"CERTIFICATE",
+ "inForm":"PEM",
+ "type":"parsed"]);
+ integer expired = (integer) crt["EXPIRED"]:0;
+ boolean reallyRemove = false;
+ if (expired == 1)
+ {
+ // To translators: popup yes/no question
+ reallyRemove = Popup::YesNo( "Really remove the Certificate?" );
+ }
+ else
+ {
+ //removeCertificateFromDisk();
+ reallyRemove = Popup::AnyQuestion( Label::WarningMsg(),
+ // To translators: warning popup yes/no question (1/3)
+ _("The certificate is not yet expired.\n")+
+ // To translators: warning popup yes/no question (2/3)
+ _("Please make sure, that no service use this certificate anymore.\n\n")+
+ // To translators: warning popup yes/no question (3/3)
+ _("Are you sure, that you want to remove the certificate?"),
+ Label::YesButton(),
+ Label::NoButton(),
+ `focus_no );
+ }
+ y2milestone ("Remove certificate? => %1", reallyRemove);
+ if ( reallyRemove )
+ {
+ YaPI::CaManagement::RemoveCommonServerCertificate();
+ }
+ ui = `again;
+ }
+ if(ui == `cancel)
+ {
+ ui = `abort;
}
- if(ui == `cancel)
- {
- ui = `abort;
- }
}
until (contains ([`back, `next, `abort], ui));
Wizard::CloseDialog();
Modified: trunk/ca-management/yast2-ca-management.spec.in
URL: http://svn.opensuse.org/viewcvs/yast/trunk/ca-management/yast2-ca-managemen…
==============================================================================
--- trunk/ca-management/yast2-ca-management.spec.in (original)
+++ trunk/ca-management/yast2-ca-management.spec.in Thu Jan 14 18:21:53 2010
@@ -45,3 +45,5 @@
/usr/bin/generateCRL.pl
/usr/bin/exportCRL.pl
%attr(600, root, root) %config(noreplace) /etc/generateCRL.conf
+
+%changelog
--
To unsubscribe, e-mail: yast-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: yast-commit+help(a)opensuse.org
1
0
![](https://seccdn.libravatar.org/avatar/4b1b602021abbfa5a5994ab0ad90e8b7.jpg?s=120&d=mm&r=g)
14 Jan '10
Author: mzugec
Date: Thu Jan 14 18:00:32 2010
New Revision: 60384
URL: http://svn.opensuse.org/viewcvs/yast?rev=60384&view=rev
Log:
Created tag stable-2_19_6 for network
Added:
tags/stable-2_19_6/network/
- copied from r60383, trunk/network/
--
To unsubscribe, e-mail: yast-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: yast-commit+help(a)opensuse.org
1
0
![](https://seccdn.libravatar.org/avatar/4b1b602021abbfa5a5994ab0ad90e8b7.jpg?s=120&d=mm&r=g)
[yast-commit] r60383 - in /trunk/network: VERSION package/yast2-network.changes src/clients/save_network.ycp src/modules/Lan.ycp src/modules/LanItems.ycp yast2-network.spec.in
by mzugec@svn.opensuse.org 14 Jan '10
by mzugec@svn.opensuse.org 14 Jan '10
14 Jan '10
Author: mzugec
Date: Thu Jan 14 18:00:25 2010
New Revision: 60383
URL: http://svn.opensuse.org/viewcvs/yast?rev=60383&view=rev
Log:
support for BOOTPROTO=ibft option (bnc#551380)
Modified:
trunk/network/VERSION
trunk/network/package/yast2-network.changes
trunk/network/src/clients/save_network.ycp
trunk/network/src/modules/Lan.ycp
trunk/network/src/modules/LanItems.ycp
trunk/network/yast2-network.spec.in
Modified: trunk/network/VERSION
URL: http://svn.opensuse.org/viewcvs/yast/trunk/network/VERSION?rev=60383&r1=603…
==============================================================================
--- trunk/network/VERSION (original)
+++ trunk/network/VERSION Thu Jan 14 18:00:25 2010
@@ -1 +1 @@
-2.19.5
+2.19.6
Modified: trunk/network/package/yast2-network.changes
URL: http://svn.opensuse.org/viewcvs/yast/trunk/network/package/yast2-network.ch…
==============================================================================
--- trunk/network/package/yast2-network.changes (original)
+++ trunk/network/package/yast2-network.changes Thu Jan 14 18:00:25 2010
@@ -1,3 +1,9 @@
+-------------------------------------------------------------------
+Thu Jan 14 17:59:48 CET 2010 - mzugec(a)suse.cz
+
+- support for BOOTPROTO=ibft option (bnc#551380)
+- 2.19.6
+
------------------------------------------------------------------
Wed Jan 13 18:56:03 CET 2010 - kmachalkova(a)suse.cz
Modified: trunk/network/src/clients/save_network.ycp
URL: http://svn.opensuse.org/viewcvs/yast/trunk/network/src/clients/save_network…
==============================================================================
--- trunk/network/src/clients/save_network.ycp (original)
+++ trunk/network/src/clients/save_network.ycp Thu Jan 14 18:00:25 2010
@@ -31,7 +31,7 @@
map <string, any> InstallInf = $[];
// global variable because chrooted environment
-boolean network_disk=false;
+integer network_disk=0;
/**
* Read one install.inf item
@@ -206,34 +206,61 @@
}
-map <string,any> hwcfg=$[];
+//map <string,any> hwcfg=$[];
+list<map> hardware=ReadHardware("netcard");
+y2milestone("hardware %1", hardware);
+
+
void CreateIfcfg(){
string network_configuration="";
- // set BOOTPROTO=[ static | dhcp ]
- if (InstallInf["bootproto"]:"dhcp"=="static")
- {
- // add broadcast interface #suse49131
- network_configuration=sformat("BOOTPROTO='static'\nIPADDR='%1/%2'\nBROADCAST='%3'\n",
- InstallInf["ipaddr"]:"", Netmask::ToBits(InstallInf["netmask"]:""), InstallInf["bcast"]:"");
- if(size(InstallInf["ipaddr6"]:"")>0){
- network_configuration=sformat("%1\n%2", network_configuration,
- sformat("LABEL_ipv6='ipv6'\nIPADDR_ipv6='%1'\n", InstallInf["ipaddr6"]:"")
- );
- }
- }
- else
- {
- //DHCP (also for IPv6) setup
- if (InstallInf["bootproto"]:""=="dhcp") network_configuration="BOOTPROTO='dhcp4'\n";
- else if (InstallInf["bootproto"]:""=="dhcp6") network_configuration="BOOTPROTO='dhcp6'\n";
- else if (InstallInf["bootproto"]:""=="dhcp,dhcp6") network_configuration="BOOTPROTO='dhcp'\n";
-
- // set DHCP_SET_HOSTNAME=yes #suse30528
- y2milestone("set DHCLIENT_SET_HOSTNAME=yes on installed system");
- SCR::Execute(.target.bash_output, "sed -i s/\"DHCLIENT_SET_HOSTNAME=.*\"/'DHCLIENT_SET_HOSTNAME=\"yes\"'/g /etc/sysconfig/network/dhcp");
+
+ if (network_disk==1 && contains(NetworkStorage::getiBFTDevices(), InstallInf["netdevice"]:"")){
+ network_configuration = sformat("%1STARTMODE='nfsroot'\nBOOTPROTO='ibft'\n", network_configuration);
+ } else {
+
+ // set BOOTPROTO=[ static | dhcp ]
+ if (InstallInf["bootproto"]:"dhcp"=="static")
+ {
+ // add broadcast interface #suse49131
+ network_configuration=sformat("BOOTPROTO='static'\nIPADDR='%1/%2'\nBROADCAST='%3'\n",
+ InstallInf["ipaddr"]:"", Netmask::ToBits(InstallInf["netmask"]:""), InstallInf["bcast"]:"");
+ if(size(InstallInf["ipaddr6"]:"")>0){
+ network_configuration=sformat("%1\n%2", network_configuration,
+ sformat("LABEL_ipv6='ipv6'\nIPADDR_ipv6='%1'\n", InstallInf["ipaddr6"]:"")
+ );
+ }
+ }
+ else
+ {
+ //DHCP (also for IPv6) setup
+ if (InstallInf["bootproto"]:""=="dhcp") network_configuration="BOOTPROTO='dhcp4'\n";
+ else if (InstallInf["bootproto"]:""=="dhcp6") network_configuration="BOOTPROTO='dhcp6'\n";
+ else if (InstallInf["bootproto"]:""=="dhcp,dhcp6") network_configuration="BOOTPROTO='dhcp'\n";
+
+ // set DHCP_SET_HOSTNAME=yes #suse30528
+ y2milestone("set DHCLIENT_SET_HOSTNAME=yes on installed system");
+ SCR::Execute(.target.bash_output, "sed -i s/\"DHCLIENT_SET_HOSTNAME=.*\"/'DHCLIENT_SET_HOSTNAME=\"yes\"'/g /etc/sysconfig/network/dhcp");
+ }
+
+ switch(network_disk)
+ {
+ case 0:
+ network_configuration = sformat("%1STARTMODE='onboot'\n", network_configuration);
+ break;
+ case 1:
+ if (!contains(NetworkStorage::getiBFTDevices(), InstallInf["netdevice"]:"")){
+ network_configuration = sformat("%1STARTMODE='nfsroot'\n", network_configuration);
+ }
+ break;
+ case 2:
+ network_configuration = sformat("%1STARTMODE='nfsroot'\n", network_configuration);
+ break;
+ }
+
}
+
// wireless devices (bnc#223570)
if ( size(InstallInf["WESSID"]:"")>0 )
{
@@ -274,25 +301,11 @@
network_configuration = sformat("%1LLADDR='%2'\n", network_configuration, InstallInf["hwaddr"]:"");
- if (network_disk)
- {
- network_configuration = sformat("%1STARTMODE='nfsroot'\n", network_configuration);
- }
- else
- {
- network_configuration = sformat("%1STARTMODE='auto'\n", network_configuration);
- }
-
- // reference to hardware configuration
- // network_configuration = sformat("%1_nm_name='%2'\n", network_configuration, hwcfg);
// point to point interface
if (size(InstallInf["remote_ip"]:"")>0)
network_configuration = sformat("%1REMOTE_IPADDR='%2'\n", network_configuration, InstallInf["remote_ip"]:"");
- list<map> hardware=ReadHardware("netcard");
- y2milestone("hardware %1", hardware);
-
string ifcfg = sformat("ifcfg-%1", InstallInf["netdevice"]:"");
string hw_name = BuildDescription(NetworkInterfaces::device_type(InstallInf["netdevice"]:""), NetworkInterfaces::device_num(ifcfg), $["dev_name":InstallInf["netdevice"]:""], hardware);
@@ -411,7 +424,7 @@
y2milestone("Copy %1 into %2", copy_from, copy_to);
string cmd = sformat("cp %1 %2", copy_from, copy_to);
y2internal("cml %1:%2", cmd, SCR::Execute(.target.bash_output, cmd));
- });
+ });
// merge files with default installed by sysconfig
foreach(string file, ["dhcp", "config"], {
Modified: trunk/network/src/modules/Lan.ycp
URL: http://svn.opensuse.org/viewcvs/yast/trunk/network/src/modules/Lan.ycp?rev=…
==============================================================================
--- trunk/network/src/modules/Lan.ycp (original)
+++ trunk/network/src/modules/Lan.ycp Thu Jan 14 18:00:25 2010
@@ -26,7 +26,7 @@
import "NetworkConfig";
import "NetworkInterfaces";
import "NetworkService";
-import "NetworkStorage";
+//import "NetworkStorage";
import "Package";
import "ProductFeatures";
import "Routing";
Modified: trunk/network/src/modules/LanItems.ycp
URL: http://svn.opensuse.org/viewcvs/yast/trunk/network/src/modules/LanItems.ycp…
==============================================================================
--- trunk/network/src/modules/LanItems.ycp (original)
+++ trunk/network/src/modules/LanItems.ycp Thu Jan 14 18:00:25 2010
@@ -1384,7 +1384,7 @@
netmask = "";
bootproto = "dhcp";
// #176804
- if (NetworkStorage::isDiskOnNetwork ( NetworkStorage::getDevice("/") ))
+ if (NetworkStorage::isDiskOnNetwork ( NetworkStorage::getDevice("/") )>0)
{
startmode = "nfsroot";
y2milestone ("startmode nfsroot");
Modified: trunk/network/yast2-network.spec.in
URL: http://svn.opensuse.org/viewcvs/yast/trunk/network/yast2-network.spec.in?re…
==============================================================================
--- trunk/network/yast2-network.spec.in (original)
+++ trunk/network/yast2-network.spec.in Thu Jan 14 18:00:25 2010
@@ -9,10 +9,10 @@
BuildRequires: yast2-devtools yast2-testsuite
BuildRequires: yast2-country
BuildRequires: yast2-installation >= 2.15.27
-BuildRequires: yast2 >= 2.16.6
-# ProductControl::Disable* - yast2-2.18.23
-Requires: yast2 >= 2.18.23
+# NetworkStorage: adapt functions needed for iBFT (bnc#551380)
+BuildRequires: yast2 >= 2.19.3
+Requires: yast2 >= 2.19.3
#netconfig (FaTE #303618)
Requires: sysconfig >= 0.71.2
#GetLanguageCountry
--
To unsubscribe, e-mail: yast-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: yast-commit+help(a)opensuse.org
1
0