Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #145 from pankajp/qt-codeeditor-honor-line-number-…
…widget Qt CodeEditor: Honor `show_line_numbers` and `readonly`.
- Loading branch information
Showing
4 changed files
with
100 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
#------------------------------------------------------------------------------ | ||
# | ||
# Copyright (c) 2013, Enthought, Inc. | ||
# All rights reserved. | ||
# | ||
# This software is provided without warranty under the terms of the BSD | ||
# license included in enthought/LICENSE.txt and may be redistributed only | ||
# under the conditions described in the aforementioned license. The license | ||
# is also available online at http://www.enthought.com/licenses/BSD.txt | ||
# | ||
#------------------------------------------------------------------------------ | ||
|
||
from traits.has_traits import HasTraits | ||
from traits.trait_types import Bool, Enum, Instance, Str | ||
from traitsui.handler import ModelView | ||
from traitsui.view import View, Group | ||
from traitsui.item import Item | ||
from traitsui.editors.code_editor import CodeEditor | ||
|
||
|
||
from traitsui.tests._tools import * | ||
|
||
|
||
class CodeModel(HasTraits): | ||
code = Str('world domination code') | ||
|
||
class CodeView(ModelView): | ||
model = Instance(CodeModel) | ||
show_line_numbers = Bool(True) | ||
style = Enum('simple', 'readonly') | ||
|
||
def default_traits_view(self): | ||
traits_view = View( | ||
Item('model.code', | ||
editor=CodeEditor(show_line_numbers=self.show_line_numbers), | ||
style=self.style) | ||
) | ||
return traits_view | ||
|
||
|
||
@skip_if_not_qt4 | ||
def test_code_editor_show_line_numbers(): | ||
""" CodeEditor should honor the `show_line_numbers` setting | ||
""" | ||
def is_line_numbers_visible(ui): | ||
from pyface import qt | ||
txt_ctrl = ui.control.findChild(qt.QtGui.QPlainTextEdit) | ||
return txt_ctrl.line_number_widget.isVisible() | ||
|
||
def test_line_numbers_visibility(show=True): | ||
with store_exceptions_on_all_threads(): | ||
code_model = CodeModel() | ||
code_view = CodeView(model=code_model, | ||
show_line_numbers=show) | ||
ui = code_view.edit_traits() | ||
nose.tools.assert_equal(is_line_numbers_visible(ui), show) | ||
ui.control.close() | ||
|
||
test_line_numbers_visibility(True) | ||
test_line_numbers_visibility(False) | ||
|
||
@skip_if_not_qt4 | ||
def test_code_editor_readonly(): | ||
""" Test readonly editor style for CodeEditor | ||
""" | ||
from pyface import qt | ||
with store_exceptions_on_all_threads(): | ||
code_model = CodeModel() | ||
code_view = CodeView(model=code_model, | ||
style='readonly') | ||
ui = code_view.edit_traits() | ||
txt_ctrl = ui.control.findChild(qt.QtGui.QPlainTextEdit) | ||
nose.tools.assert_true(txt_ctrl.isReadOnly()) | ||
|
||
# Test changing the object's text | ||
nose.tools.assert_equal(txt_ctrl.toPlainText(), code_model.code) | ||
code_model.code += 'some more code' | ||
nose.tools.assert_true(txt_ctrl.isReadOnly()) | ||
nose.tools.assert_equal(txt_ctrl.toPlainText(), code_model.code) | ||
|
||
# Test changing the underlying object | ||
code_model2 = CodeModel(code=code_model.code*2) | ||
code_view.model = code_model2 | ||
nose.tools.assert_true(txt_ctrl.isReadOnly()) | ||
nose.tools.assert_equal(txt_ctrl.toPlainText(), code_model.code) | ||
|
||
ui.control.close() | ||
|
||
|
||
if __name__ == '__main__': | ||
nose.main() |