Mailinglist Archive: yast-devel (144 mails)

< Previous Next >
[yast-devel] Help: Lost in Ruby

Hi,

I would like to use some classes in the converted ruby code but I
have problems with function lookup.

I have figured out how to call functions (e.g. ArrangeButtons
from include/partitioning/ep-lib.rb in my class method by using
"module_function :ArrangeButtons" in ep-lib.rb. The problem now
is that the method deep_copy cannot be found inside
ArrangeButtons.

It works if I use "include PartitioningEpLibInclude" inside my
class but I don't like to extend the classes with lots of general
utility functions.

So what's the correct way here?

Attached is a patch.

The error message is:

Client call failed with undefined method `deep_copy' for
Yast::PartitioningEpLibInclude:Module and backtrace
["/usr/share/YaST2/include/partitioning/ep-lib.rb:503:in
`ArrangeButtons'",
"/usr/share/YaST2/include/partitioning/ep-all.rb:183:in
`create'", ...

ciao Arvin

diff --git a/src/include/partitioning/ep-all.rb
b/src/include/partitioning/ep-all.rb
index 1fd3f3b..176bda4 100644
--- a/src/include/partitioning/ep-all.rb
+++ b/src/include/partitioning/ep-all.rb
@@ -32,7 +32,12 @@ module Yast
Yast.import "PackageSystem"
end

- def CreateAllPanel(user_data)
+
+ class AllPanel < TreePanelClass::Panel
+
+ # include PartitioningEpLibInclude # don't like this
+
+ def create(user_data)
user_data = deep_copy(user_data)
_IsAvailable = lambda do |client|
#in the installed system, we don't care if the client isn't there
@@ -175,7 +180,8 @@ module Yast
table_header,
table_contents
),
- ArrangeButtons(buttons)
+ PartitioningEpLibInclude::ArrangeButtons(buttons)
+ # ArrangeButtons(buttons)
)
)
)
@@ -211,7 +217,7 @@ module Yast
end


- def HandleAllPanel(user_data, event)
+ def handle(user_data, event)
user_data = deep_copy(user_data)
event = deep_copy(event)
_CheckAndInstallPackages = lambda do |pkgs|
@@ -351,5 +357,8 @@ module Yast

nil
end
+
+ end
+
end
end
diff --git a/src/include/partitioning/ep-lib.rb
b/src/include/partitioning/ep-lib.rb
index 66c2b3a..39a4407 100644
--- a/src/include/partitioning/ep-lib.rb
+++ b/src/include/partitioning/ep-lib.rb
@@ -550,6 +550,9 @@ module Yast
deep_copy(ret)
end

+ module_function :ArrangeButtons
+
+
def ChangeWidgetIfExists(wid, property, value)
value = deep_copy(value)
UI.ChangeWidget(Id(wid), property, value) if UI.WidgetExists(Id(wid))
diff --git a/src/include/partitioning/ep-main.rb
b/src/include/partitioning/ep-main.rb
index 57c7d72..752ea80 100644
--- a/src/include/partitioning/ep-main.rb
+++ b/src/include/partitioning/ep-main.rb
@@ -113,10 +113,7 @@ module Yast
# TODO: somehow use AlwaysHideDisk

data = {
- :all => {
- :create => fun_ref(method(:CreateAllPanel), "void (any)"),
- :handle => fun_ref(method(:HandleAllPanel), "void (any, map)")
- },
+ :all => { x: PartitioningEpAllInclude::AllPanel.new() },
:hd => {
:create => fun_ref(method(:CreateHdMainPanel), "void (any)"),
:handle => fun_ref(method(:HandleHdMainPanel), "void (any, map)")
diff --git a/src/modules/TreePanel.rb b/src/modules/TreePanel.rb
index dea420e..935a9d1 100644
--- a/src/modules/TreePanel.rb
+++ b/src/modules/TreePanel.rb
@@ -45,20 +45,30 @@ module Yast
@empty_panel = VBox(VStretch(), HStretch())
end

+
+ class Panel < Client # is Client the right class?
+
+ def create(user_data)
+ end
+
+ def refresh(user_data)
+ end
+
+ def handle(user_data, event)
+ end
+
+ def destroy(user_data)
+ end
+
+ end
+
+
def CallCreate
tmp = Ops.get(@data, @current_item)
- create_func = Convert.convert(
- Ops.get(tmp, :create),
- :from => "any",
- :to => "void (any)"
- )
- if create_func != nil
user_data = Ops.get(tmp, :user_data)
- create_func.call(user_data)
+ tmp[:x].create(user_data)
end

- nil
- end

def CallRefresh
tmp = Ops.get(@data, @current_item)
< Previous Next >