Skip to content

Commit

Permalink
Add a CWM::Popup widget class
Browse files Browse the repository at this point in the history
* Extracted from yast2-storage-ng.
  • Loading branch information
imobachgs committed Sep 18, 2018
1 parent 3112acf commit 6a39fca
Show file tree
Hide file tree
Showing 4 changed files with 169 additions and 0 deletions.
1 change: 1 addition & 0 deletions library/cwm/src/Makefile.am
Expand Up @@ -18,6 +18,7 @@ ycwm_DATA = \
lib/cwm/dialog.rb \
lib/cwm/page.rb \
lib/cwm/pager.rb \
lib/cwm/popup.rb \
lib/cwm/replace_point.rb \
lib/cwm/rspec.rb \
lib/cwm/table.rb \
Expand Down
104 changes: 104 additions & 0 deletions library/cwm/src/lib/cwm/popup.rb
@@ -0,0 +1,104 @@
# encoding: utf-8

# Copyright (c) [2018] SUSE LLC
#
# All Rights Reserved.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of version 2 of the GNU General Public License as published
# by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
# more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, contact SUSE LLC.
#
# To contact SUSE LLC about this file by physical or electronic mail, you may
# find current contact information at www.suse.com.
require "cwm/dialog"

module CWM
# CWM pop-up dialog
#
# This class offers a CWM dialog which behaves as a pop-up.
class Popup < Dialog
# Determines that a dialog should always be open
#
# @return [true]
#
# @see CWM::Dialog#wizard_create_dialog
def should_open_dialog?
true
end

private

# Redefines the mechanism to open the dialog to use the adapted layout
#
# @param block [Proc]
# @see CWM::Dialog#wizard_create_dialog
def wizard_create_dialog(&block)
Yast::UI.OpenDialog(layout)
block.call
ensure
Yast::UI.CloseDialog
end

# Defines the dialog's layout
#
# @return [Yast::Term]
def layout
VBox(
HSpacing(50),
Left(Heading(Id(:title), title)),
VStretch(),
VSpacing(1),
MinSize(min_width, min_height, ReplacePoint(Id(:contents), Empty())),
VSpacing(1),
VStretch(),
ButtonBox(*buttons)
)
end

# Popup min width
#
# @return [Integer]
def min_width
1
end

# Popup min height
#
# @return [Integer]
def min_height
1
end

def ok_button_label
Yast::Label.OKButton
end

def cancel_button_label
Yast::Label.CancelButton
end

def buttons
[help_button, ok_button, cancel_button]
end

def help_button
PushButton(Id(:help), Opt(:helpButton), Yast::Label.HelpButton)
end

def ok_button
PushButton(Id(:ok), Opt(:default), ok_button_label)
end

def cancel_button
PushButton(Id(:cancel), cancel_button_label)
end
end
end
1 change: 1 addition & 0 deletions library/cwm/test/Makefile.am
Expand Up @@ -4,6 +4,7 @@ TESTS = \
custom_widget_test.rb \
dialog_test.rb \
pager_test.rb \
popup_test.rb \
replace_point_test.rb \
table_test.rb \
tree_test.rb \
Expand Down
63 changes: 63 additions & 0 deletions library/cwm/test/popup_test.rb
@@ -0,0 +1,63 @@
#!/usr/bin/env rspec
# encoding: utf-8

# Copyright (c) [2018] SUSE LLC
#
# All Rights Reserved.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of version 2 of the GNU General Public License as published
# by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
# more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, contact SUSE LLC.
#
# To contact SUSE LLC about this file by physical or electronic mail, you may
# find current contact information at www.suse.com.

require_relative "test_helper"

require "cwm/popup"
require "cwm/rspec"

describe CWM::Popup do
class TestCWMPopup < CWM::Popup
def contents
VBox()
end
end

subject { TestCWMPopup.new }

include_examples "CWM::Dialog"

describe ".run" do
before do
allow(Yast::Wizard).to receive(:IsWizardDialog).and_return(wizard_dialog?)
allow(Yast::CWM).to receive(:show).and_return(:launch)
end

context "when running on a wizard" do
let(:wizard_dialog?) { true }

it "always opens a dialog" do
expect(Yast::UI).to receive(:OpenDialog).with(Yast::Term)
TestCWMPopup.run
end
end

context "when not running on a wizard" do
let(:wizard_dialog?) { false }

it "always opens a dialog" do
expect(Yast::UI).to receive(:OpenDialog).with(Yast::Term)
TestCWMPopup.run
end
end
end
end

0 comments on commit 6a39fca

Please sign in to comment.