Robot Framework Integrated Development Environment (RIDE)
dialogs_ipy.py
Go to the documentation of this file.
1 # Copyright 2008-2015 Nokia Networks
2 # Copyright 2016- Robot Framework Foundation
3 #
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at
7 #
8 # http://www.apache.org/licenses/LICENSE-2.0
9 #
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
15 
16 import wpf # Loads required .NET Assemblies behind the scenes
17 
18 from System.Windows import (GridLength, SizeToContent, TextWrapping, Thickness,
19  Window, WindowStartupLocation)
20 from System.Windows.Controls import (Button, ColumnDefinition, Grid, Label, ListBox,
21  PasswordBox, RowDefinition, TextBlock, TextBox, SelectionMode)
22 
23 
24 class _WpfDialog(Window):
25 
28  _left_button = 'OK'
29 
32  _right_button = 'Cancel'
33 
34  def __init__(self, message, value=None, **extra):
35  self._initialize_dialog_initialize_dialog()
36  self._create_body_create_body(message, value, **extra)
37  self._create_buttons_create_buttons()
38  self._bind_esc_to_close_dialog_bind_esc_to_close_dialog()
39  self._result_result = None
40 
41  def _initialize_dialog(self):
42  self.TitleTitle = 'Robot Framework'
43  self.SizeToContentSizeToContent = SizeToContent.WidthAndHeight
44  self.WindowStartupLocationWindowStartupLocation = WindowStartupLocation.CenterScreen
45  self.MinWidthMinWidth = 300
46  self.MinHeightMinHeight = 100
47  self.MaxWidthMaxWidth = 640
48  grid = Grid()
49  left_column = ColumnDefinition()
50  right_column = ColumnDefinition()
51  grid.ColumnDefinitions.Add(left_column)
52  grid.ColumnDefinitions.Add(right_column)
53  label_row = RowDefinition()
54  label_row.Height = GridLength.Auto
55  selection_row = RowDefinition()
56  selection_row.Height = GridLength.Auto
57  button_row = RowDefinition()
58  button_row.Height = GridLength(50)
59  grid.RowDefinitions.Add(label_row)
60  grid.RowDefinitions.Add(selection_row)
61  grid.RowDefinitions.Add(button_row)
62  self.ContentContent = grid
63 
64  def _create_body(self, message, value, **extra):
65 
68  _label = Label()
69  textblock = TextBlock()
70  textblock.Text = message
71  textblock.TextWrapping = TextWrapping.Wrap
72  _label.Content = textblock
73  _label.Margin = Thickness(10)
74  _label.SetValue(Grid.ColumnSpanProperty, 2)
75  _label.SetValue(Grid.RowProperty, 0)
76  self.ContentContent.AddChild(_label)
77  selector = self._create_selector_create_selector(value, **extra)
78  if selector:
79  self.ContentContent.AddChild(selector)
80  selector.Focus()
81 
82  def _create_selector(self, value):
83  return None
84 
85  def _create_buttons(self):
86  self.left_buttonleft_button = self._create_button_create_button(self._left_button_left_button,
87  self._left_button_clicked_left_button_clicked)
88  self.left_buttonleft_button.SetValue(Grid.ColumnProperty, 0)
89  self.left_buttonleft_button.IsDefault = True
90  self.right_buttonright_button = self._create_button_create_button(self._right_button_right_button,
91  self._right_button_clicked_right_button_clicked)
92  if self.right_buttonright_button:
93  self.right_buttonright_button.SetValue(Grid.ColumnProperty, 1)
94  self.ContentContent.AddChild(self.right_buttonright_button)
95  self.left_buttonleft_button.SetValue(Grid.ColumnProperty, 0)
96  self.ContentContent.AddChild(self.left_buttonleft_button)
97  else:
98  self.left_buttonleft_button.SetValue(Grid.ColumnSpanProperty, 2)
99  self.ContentContent.AddChild(self.left_buttonleft_button)
100 
101  def _create_button(self, content, callback):
102  if content:
103  button = Button()
104  button.Margin = Thickness(10)
105  button.MaxHeight = 50
106  button.MaxWidth = 150
107  button.SetValue(Grid.RowProperty, 2)
108  button.Content = content
109  button.Click += callback
110  return button
111 
113  # There doesn't seem to be easy way to bind esc otherwise than having
114  # a cancel button that binds it automatically. We don't always have
115  # actual cancel button so need to create one and make it invisible.
116  # Cannot actually hide it because it won't work after that so we just
117  # make it so small it is not seen.
118  button = Button()
119  button.IsCancel = True
120  button.MaxHeight = 1
121  button.MaxWidth = 1
122  self.ContentContent.AddChild(button)
123 
124  def _left_button_clicked(self, sender, event_args):
125  if self._validate_value_validate_value():
126  self._result_result = self._get_value_get_value()
127  self._close_close()
128 
129  def _validate_value(self):
130  return True
131 
132  def _get_value(self):
133  return None
134 
135  def _close(self):
136  self.Close()
137 
138  def _right_button_clicked(self, sender, event_args):
139  self._result_result = self._get_right_button_value_get_right_button_value()
140  self._close_close()
141 
143  return None
144 
145  def show(self):
146  self.ShowDialog()
147  return self._result_result
148 
149 
151 
154  _right_button = None
155 
156 
158 
159  def __init__(self, message, default='', hidden=False):
160  _WpfDialog.__init__(self, message, default, hidden=hidden)
161 
162  def _create_selector(self, default, hidden):
163  if hidden:
164  self._entry_entry = PasswordBox()
165  self._entry_entry.Password = default if default else ''
166  else:
167  self._entry_entry = TextBox()
168  self._entry_entry.Text = default if default else ''
169  self._entry_entry.SetValue(Grid.RowProperty, 1)
170  self._entry_entry.SetValue(Grid.ColumnSpanProperty, 2)
171  self.MarginMargin = Thickness(10)
172  self._entry_entry.Height = 30
173  self._entry_entry.Width = 150
174  self._entry_entry.SelectAll()
175  return self._entry_entry
176 
177  def _get_value(self):
178  try:
179  return self._entry_entry.Text
180  except AttributeError:
181  return self._entry_entry.Password
182 
183 
185 
186  def __init__(self, message, values):
187  _WpfDialog.__init__(self, message, values)
188 
189  def _create_selector(self, values):
190  self._listbox_listbox = ListBox()
191  self._listbox_listbox.SetValue(Grid.RowProperty, 1)
192  self._listbox_listbox.SetValue(Grid.ColumnSpanProperty, 2)
193  self._listbox_listbox.Margin = Thickness(10)
194  for item in values:
195  self._listbox_listbox.Items.Add(item)
196  return self._listbox_listbox
197 
198  def _validate_value(self):
199  return bool(self._listbox_listbox.SelectedItem)
200 
201  def _get_value(self):
202  return self._listbox_listbox.SelectedItem
203 
204 
206 
207  def __init__(self, message, values):
208  _WpfDialog.__init__(self, message, values)
209 
210  def _create_selector(self, values):
211  self._listbox_listbox = ListBox()
212  self._listbox_listbox.SelectionMode = SelectionMode.Multiple
213  self._listbox_listbox.SetValue(Grid.RowProperty, 1)
214  self._listbox_listbox.SetValue(Grid.ColumnSpanProperty, 2)
215  self._listbox_listbox.Margin = Thickness(10)
216  for item in values:
217  self._listbox_listbox.Items.Add(item)
218  return self._listbox_listbox
219 
220  def _get_value(self):
221  return sorted(self._listbox_listbox.SelectedItems,
222  key=list(self._listbox_listbox.Items).index)
223 
224 
226 
229  _left_button = 'PASS'
230 
233  _right_button = 'FAIL'
234 
235  def _get_value(self):
236  return True
237 
239  return False
def __init__(self, message, default='', hidden=False)
Definition: dialogs_ipy.py:159
def __init__(self, message, value=None, **extra)
Definition: dialogs_ipy.py:34
def _right_button_clicked(self, sender, event_args)
Definition: dialogs_ipy.py:138
def _left_button_clicked(self, sender, event_args)
Definition: dialogs_ipy.py:124
def _create_body(self, message, value, **extra)
Definition: dialogs_ipy.py:64