Exemplo n.º 1
0
    def createWidgets(self):
        """
        QtWidgets creation
        """
        self.model = EventsTableModel2(hdrs=[
            'No.', 'Timestamp', 'From', 'To', 'Event Type', 'Component Type',
            'Text'
        ])
        if QtHelper.str2bool(Settings.instance().readValue(
                key='TestRun/auto-scrolling-textual')):
            self.activeAutoscrolling()

        self.proxyModel = MultiQSortFilterProxyModel(self)
        self.proxyModel.setDynamicSortFilter(True)

        self.setModel(self.proxyModel)
        self.setSortingEnabled(False)

        self.proxyModel.setSourceModel(self.model)

        self.setFrameShape(QFrame.NoFrame)
        self.setShowGrid(True)

        self.setSelectionMode(QAbstractItemView.SingleSelection)
        self.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.setContextMenuPolicy(Qt.CustomContextMenu)
        self.verticalHeader().setVisible(False)
        self.horizontalHeader().setHighlightSections(False)
        self.setHorizontalScrollMode(QAbstractItemView.ScrollPerPixel)
        self.setStyleSheet("""
            gridline-color: white; 
            selection-color: %s;
            selection-background-color: %s;
        """ % (
            Settings.instance().readValue(
                key='TestRun/textual-text-selection-color'),
            Settings.instance().readValue(
                key='TestRun/textual-selection-color'),
        ))

        self.horizontalHeader().setStretchLastSection(True)
        self.setSortingEnabled(False)

        self.setColumnWidth(COL_NUM, 50)  # No.
        self.setColumnWidth(COL_TIMESTAMP, 80)  # timestamp
        self.setColumnWidth(COL_EVENT, 110)  # timestamp
        self.setColumnWidth(COL_FROM, 150)  # component
        widthFrom = Settings.instance().readValue(
            key='TestRun/column-from-width')
        self.setColumnWidth(COL_FROM_LEVEL, int(widthFrom))  # from
        widthTo = Settings.instance().readValue(key='TestRun/column-to-width')
        self.setColumnWidth(COL_TO_LEVEL, int(widthTo))  # to
Exemplo n.º 2
0
    def addStep(self,
                text,
                color="#A5A2A5",
                width=400,
                height=40,
                data=None,
                textBold=False,
                textItalic=False,
                timestamp="00:00:00"):
        """
        Add step
        """
        # take the last one
        if len(self.steps):
            latestBlock = self.steps[-1:][0]
        else:
            latestBlock = None

        newBlock = BlockItem(self,
                             text,
                             blockColor=color,
                             width=width,
                             height=height,
                             data=data,
                             bold=textBold,
                             italic=textItalic)
        if width == 100:
            newBlock.setPos(400 / 2 - 100 / 2, len(self.steps) * 80)
        elif width == 300:
            newBlock.setPos(400 / 2 - 300 / 2, len(self.steps) * 80)
        else:
            newBlock.setPos(0, len(self.steps) * 80)

        self.steps.append(newBlock)
        self.diagramScene.addItem(newBlock)

        newTimestampBlock = TimestampItem(self, timestamp)
        newTimestampBlock.setPos(-200, len(self.timestamps) * 80)

        self.timestamps.append(newTimestampBlock)
        self.diagramScene.addItem(newTimestampBlock)

        if latestBlock is not None:
            newArrow = LineItem(latestBlock, newBlock)
            self.diagramScene.addItem(newArrow)
            self.arrows.append(newArrow)

        if QtHelper.str2bool(Settings.instance().readValue(
                key='TestRun/auto-scrolling-graph')):
            self.view.centerOn(newBlock)
        return newBlock
    def __init__(self, parent=None):
        """
        Qt Class User Client Interface
        Signals:
         * Notify

        @param parent: 
        @type parent:
        """
        QObject.__init__(self, parent)
        NetLayerLib.ClientAgent.__init__(
            self,
            typeAgent=NetLayerLib.TYPE_AGENT_USER,
            keepAliveInterval=int(Settings.instance().readValue(
                key='Network/keepalive-interval')),
            inactivityTimeout=int(Settings.instance().readValue(
                key='Network/inactivity-timeout')),
            timeoutTcpConnect=int(Settings.instance().readValue(
                key='Network/tcp-connect-timeout')),
            responseTimeout=int(
                Settings.instance().readValue(key='Network/response-timeout')),
            selectTimeout=float(
                Settings.instance().readValue(key='Network/select-timeout')),
            sslSupport=QtHelper.str2bool(
                Settings.instance().readValue(key='Server/data-ssl')),
            wsSupport=QtHelper.str2bool(
                Settings.instance().readValue(key='Server/data-websocket')),
            pickleVer=int(
                Settings.instance().readValue(key='Network/pickle-version')),
            tcpKeepAlive=QtHelper.str2bool(
                Settings.instance().readValue(key='Network/tcp-keepalive')),
            tcpKeepIdle=int(
                Settings.instance().readValue(key='Network/tcp-keepidle')),
            tcpKeepCnt=int(
                Settings.instance().readValue(key='Network/tcp-keepcnt')),
            tcpKeepIntvl=int(
                Settings.instance().readValue(key='Network/tcp-keepintvl')))
        self.parent = parent
Exemplo n.º 4
0
    def setEditorData(self, editor, index):
        """
        Set the editor

        @param value: 
        @type value:

        @param value: 
        @type value:
        """
        # set editor data
        if sys.version_info > (3, ):  # python 3 support
            value = index.data(Qt.DisplayRole)
            if isinstance(value, str):
                value = QtHelper.str2bool(value)
        else:
            value = index.data(Qt.DisplayRole).toBool()
        editor.setChecked(value)
Exemplo n.º 5
0
 def createWidgets (self):
     """
     QtWidgets creation
      _______________________
     |                       |
     |       PyEditor        |
     |_______________________|
     |________QSplitter______|
     |                       |
     |       PyEditor        |
     |_______________________|
     """
     self.srcWidget = EditorWidget( self.TEST_UNIT_EDITOR, "Test Definition:", self, 
                                 wrappingText=QtHelper.str2bool( Settings.instance().readValue( key = 'Editor/code-wrapping' ) ) )
     self.srcEditor = self.srcWidget.editor
     
     layout = QVBoxLayout()
     layout.addWidget(self.srcWidget)
     layout.setContentsMargins(2,0,0,0)
     
     self.setLayout(layout)
Exemplo n.º 6
0
    def notifyReceived(self, data, fromLocal=False):
        """
        Dispatch events

        @param data:
        @type data: dict
        """
        if 'task-uuid' in data:
            self.taskUuid = data['task-uuid']

        # normalize test id to str
        if 'script_id' in data:
            data['script_id'] = "%s" % data['script_id']
        if 'tc_id' in data:
            data['tc_id'] = "%s" % data['tc_id']
        if 'test-internal-id' in data:
            data['test-internal-id'] = "%s" % data['test-internal-id']

        ############# Global events
        if data['event'] == 'script-started':
            self.parent.showMessageTray(msg='Test %s starting...' % self.name)
            self.isRunning = True
            #self.logsItem.activeReplay()
            self.parent.updateTabColor(self, color=QColor(Qt.darkCyan))

        elif data['event'] == 'script-stopped':
            self.isRunning = False
            self.logsItem.deactiveKill()
            self.parent.updateTabColor(self, color=QColor(Qt.blue))

            self.addGlobalTime(duration=float(data['duration']))

            self.parent.showMessageTray(msg='Test %s terminated.' % self.name)
            # show the app
            if QtHelper.str2bool(Settings.instance().readValue(
                    key='TestRun/show-test-terminated')):
                self.parent.setVisible(True)

        ############# test global events
        elif data['event'] == 'testglobal-started':
            self.isTp = True
            self.logsItem.activeKill()

            itemsSelected = self.logsItem.logs.selectedItems()
            if not len(itemsSelected):
                self.resumeView.reset()
                self.logsView.reset()
            self.tpTreeItem = self.logsItem.createRootItem(
                event=data, typeItem='testglobal')
            self.script[data['script_id']] = self.tpTreeItem
        elif data['event'] == 'testglobal-stopped':
            self.logsItem.deactiveKill()
            if self.isTp:
                self.logsItem.activeReplay()
            if not data['script_id'] in self.script:
                return  # error
            rootTreeItem = self.script[data['script_id']]
            # new in 3.0.0
            duration = None
            if 'duration' in data:
                duration = "%.3f" % float(data['duration'])
            self.logsItem.finishRootItem(rootItem=rootTreeItem,
                                         duration=duration,
                                         typeItem='testglobal',
                                         event=data)
        elif data['event'] == 'testglobal':
            if not data['script_id'] in self.scriptEvents:
                self.scriptEvents[data['script_id']] = [data]
            else:
                self.scriptEvents[data['script_id']].append(data)
            if not data['script_id'] in self.script:
                return

            itemsSelected = self.logsItem.logs.selectedItems()
            rootTreeItem = self.script[data['script_id']]
            if len(itemsSelected) > 1:
                rootTreeItem.setSelected(False)
            if rootTreeItem.isSelected():
                self.logsView.setExpectedEventId(data['script_id'])
                row_pos = self.logsView.addEvent(event=data)
                self.resumeView.addEvent(event=data,
                                         rowp=row_pos,
                                         ihmId=row_pos)

        ############# test plan events
        elif data['event'] == 'testplan-separator-terminated':
            duration = "%.3f" % float(data['duration'])

            itemSeparator = self.separators[data['test-internal-id']]
            self.logsItem.finishTestplanSeparator(itemSep=itemSeparator,
                                                  duration=duration)

        elif data['event'] == 'testplan-separator':
            itemsSelected = self.logsItem.logs.selectedItems()
            if not len(itemsSelected):
                self.logsView.reset()
            itemSeparator = self.logsItem.createTestplanSeparator(event=data)
            self.separators[data['test-internal-id']] = itemSeparator

        elif data['event'] == 'testplan-started':
            self.isTp = True
            self.logsItem.activeKill()

            itemsSelected = self.logsItem.logs.selectedItems()
            if not len(itemsSelected):
                self.resumeView.reset()
                self.logsView.reset()
            self.tpTreeItem = self.logsItem.createRootItem(event=data,
                                                           typeItem='testplan')
            self.script[data['script_id']] = self.tpTreeItem
        elif data['event'] == 'testplan-stopped':
            self.logsItem.deactiveKill()
            if self.isTp:
                self.logsItem.activeReplay()
            if not data['script_id'] in self.script:
                return  # error
            rootTreeItem = self.script[data['script_id']]
            # new in 3.0.0
            duration = None
            if 'duration' in data:
                duration = "%.3f" % float(data['duration'])
            self.logsItem.finishRootItem(rootItem=rootTreeItem,
                                         duration=duration,
                                         typeItem='testplan',
                                         event=data)
        elif data['event'] == 'testplan':
            if not data['script_id'] in self.scriptEvents:
                self.scriptEvents[data['script_id']] = [data]
            else:
                self.scriptEvents[data['script_id']].append(data)
            if not data['script_id'] in self.script:
                return

            itemsSelected = self.logsItem.logs.selectedItems()
            rootTreeItem = self.script[data['script_id']]
            if len(itemsSelected) > 1:
                rootTreeItem.setSelected(False)
            if rootTreeItem.isSelected():
                self.logsView.setExpectedEventId(data['script_id'])
                row_pos = self.logsView.addEvent(event=data)
                self.resumeView.addEvent(event=data,
                                         rowp=row_pos,
                                         ihmId=row_pos)

        ############# test abstract events
        elif data['event'] == 'testabstract-started':
            self.logsItem.activeKill()
            if self.tpTreeItem is not None:
                self.tpTreeItem.setSelected(False)

            itemsSelected = self.logsItem.logs.selectedItems()
            if not len(itemsSelected):
                self.resumeView.reset()
                self.logsView.reset()
            rootTreeItem = self.logsItem.createRootItem(
                event=data, typeItem='testabstract')
            self.script[data['script_id']] = rootTreeItem
        elif data['event'] == 'testabstract-stopped':
            if not self.isTp:
                self.logsItem.activeReplay()
            if not data['script_id'] in self.script:
                return  # error
            rootTreeItem = self.script[data['script_id']]
            # new in 3.0.0
            duration = None
            if 'duration' in data:
                duration = "%.3f" % float(data['duration'])
            self.logsItem.finishRootItem(rootItem=rootTreeItem,
                                         duration=duration,
                                         typeItem='testabstract',
                                         event=data)
        elif data['event'] == 'testabstract':
            if not data['script_id'] in self.scriptEvents:
                self.scriptEvents[data['script_id']] = [data]
            else:
                self.scriptEvents[data['script_id']].append(data)
            if not data['script_id'] in self.script:
                return
            rootTreeItem = self.script[data['script_id']]
            if rootTreeItem.isSelected():
                self.logsView.setExpectedEventId(data['script_id'])
                row_pos = self.logsView.addEvent(event=data)
                self.resumeView.addEvent(event=data,
                                         rowp=row_pos,
                                         ihmId=row_pos)

        ############# test unit events
        elif data['event'] == 'testunit-started':
            self.logsItem.activeKill()
            if self.tpTreeItem is not None:
                self.tpTreeItem.setSelected(False)

            itemsSelected = self.logsItem.logs.selectedItems()
            if not len(itemsSelected):
                self.resumeView.reset()
                self.logsView.reset()
            rootTreeItem = self.logsItem.createRootItem(event=data,
                                                        typeItem='testunit')
            self.script[data['script_id']] = rootTreeItem
        elif data['event'] == 'testunit-stopped':
            if not self.isTp:
                self.logsItem.activeReplay()
            if not data['script_id'] in self.script:
                return  # error
            rootTreeItem = self.script[data['script_id']]
            # new in 3.0.0
            duration = None
            if 'duration' in data:
                duration = "%.3f" % float(data['duration'])
            self.logsItem.finishRootItem(rootItem=rootTreeItem,
                                         duration=duration,
                                         typeItem='testunit',
                                         event=data)
        elif data['event'] == 'testunit':
            if not data['script_id'] in self.scriptEvents:
                self.scriptEvents[data['script_id']] = [data]
            else:
                self.scriptEvents[data['script_id']].append(data)
            if not data['script_id'] in self.script:
                return

            itemsSelected = self.logsItem.logs.selectedItems()
            rootTreeItem = self.script[data['script_id']]
            if len(itemsSelected) > 1:
                rootTreeItem.setSelected(False)
            if rootTreeItem.isSelected():
                self.logsView.setExpectedEventId(data['script_id'])
                row_pos = self.logsView.addEvent(event=data)
                self.resumeView.addEvent(event=data,
                                         rowp=row_pos,
                                         ihmId=row_pos)

        ############# test suite events
        elif data['event'] == 'testsuite-started':
            self.logsItem.activeKill()
            if self.tpTreeItem is not None:
                self.tpTreeItem.setSelected(False)

            itemsSelected = self.logsItem.logs.selectedItems()
            if not len(itemsSelected):
                self.resumeView.reset()
                self.logsView.reset()
            rootTreeItem = self.logsItem.createRootItem(event=data)
            self.script[data['script_id']] = rootTreeItem
        elif data['event'] == 'testsuite-stopped':
            if not self.isTp:
                self.logsItem.activeReplay()
            if not data['script_id'] in self.script:
                return  # error
            rootTreeItem = self.script[data['script_id']]
            # new in 3.0.0
            duration = None
            if 'duration' in data:
                duration = "%.3f" % float(data['duration'])
            self.logsItem.finishRootItem(rootItem=rootTreeItem,
                                         duration=duration,
                                         event=data)
        elif data['event'] == 'testsuite':
            if not data['script_id'] in self.scriptEvents:
                self.scriptEvents[data['script_id']] = [data]
            else:
                self.scriptEvents[data['script_id']].append(data)
            if not data['script_id'] in self.script:
                return

            itemsSelected = self.logsItem.logs.selectedItems()
            rootTreeItem = self.script[data['script_id']]
            if len(itemsSelected) > 1:
                rootTreeItem.setSelected(False)
            if rootTreeItem.isSelected():
                self.logsView.setExpectedEventId(data['script_id'])
                row_pos = self.logsView.addEvent(event=data)
                self.resumeView.addEvent(event=data,
                                         rowp=row_pos,
                                         ihmId=row_pos)

        ############# test case events
        elif data['event'] == 'testcase-started':
            if not data['script_id'] in self.script:
                return  # error
            #
            rootTreeItem = self.script[data['script_id']]
            rootTreeItem.setSelected(False)

            itemsSelected = self.logsItem.logs.selectedItems()
            if not len(itemsSelected):
                self.graphView.reset()
                self.resumeView.reset()
                self.logsView.reset()

            testcaseTreeItem = self.logsItem.createTestcase(
                rootItem=rootTreeItem, event=data, fromLocal=fromLocal)
            self.testcases[data['tc_id']] = testcaseTreeItem
        elif data['event'] == 'testcase-stopped':
            if not data['tc_id'] in self.testcases:
                return  # error
            #
            testcaseItem = self.testcases[data['tc_id']]
            testcaseItem.setSelected(False)
            # new in 3.0.0
            duration = None
            if 'duration' in data:
                duration = "%.3f" % float(data['duration'])
            self.logsItem.finishTestcase(testcaseItem=testcaseItem,
                                         result=data['result'],
                                         duration=duration,
                                         event=data)
        elif data['event'] == 'testcase':
            # Issue 41: incorrect event displayed in test result
            # ignore invalid events
            if not data['script_id'] in self.script:
                return  # error
            #
            if not data['tc_id'] in self.scriptEvents:
                self.scriptEvents[data['tc_id']] = [data]
            else:
                self.scriptEvents[data['tc_id']].append(data)
            if not data['tc_id'] in self.testcases:
                return
            itemsSelected = self.logsItem.logs.selectedItems()
            testcaseItem = self.testcases[data['tc_id']]

            if len(itemsSelected) > 1:
                testcaseItem.setSelected(False)
            if testcaseItem.isSelected():
                self.logsView.setExpectedEventId(data['tc_id'])
                row_pos = self.logsView.addEvent(event=data)
                self.resumeView.addEvent(event=data,
                                         rowp=row_pos,
                                         ihmId=row_pos)
Exemplo n.º 7
0
    def createWidgets(self):
        """
        QtWidgets creation

         ___________   _________________
        |           | |                 |
        |           | |                 |
        |           | |                 |
        | TestsItem | | TextualLogView  |
        |           | |                 |
        |           | |                 |
        |___________| |_________________|
        """
        layout = QHBoxLayout()

        self.logsItem = TestsView.TestsView(parent=self, local=self.local)

        self.resumeView = ResumeView.TextualView(parent=self)
        if QtHelper.str2bool(
                Settings.instance().readValue(key='TestRun/hide-resume-view')):
            self.hideResumeView()

        self.graphView = GraphView.FlowChartView(parent=self)
        self.logsView = TextualView.TextualView2(parent=self)
        self.hexLogsView = DetailedView.DetailedView(parent=self)

        self.displayTab = QTabWidget()

        hSplitter = QSplitter(self)
        hSplitter.setOrientation(Qt.Vertical)

        hSplitter.addWidget(self.resumeView)
        hSplitter.addWidget(self.logsView)
        hSplitter.addWidget(self.hexLogsView)

        self.displayTab.addTab(hSplitter, self.tr('Events'))
        self.displayTab.addTab(self.graphView, self.tr('Diagram'))

        defaultTab = Settings.instance().readValue(
            key='TestRun/default-tab-run')
        self.displayTab.setCurrentIndex(int(defaultTab))

        self.currentEdit = QLineEdit()
        self.currentEdit.setReadOnly(True)
        self.currentEdit.setStyleSheet(
            "QLineEdit { background-color : #F0F0F0; color: grey; }")

        leftFrame = QFrame()
        leftLayout = QVBoxLayout()
        leftLayout.setContentsMargins(0, 0, 0, 0)
        leftFrame.setLayout(leftLayout)

        leftLayout.addWidget(self.currentEdit)
        leftLayout.addWidget(self.displayTab)

        v_splitter = QSplitter(self)
        v_splitter.addWidget(self.logsItem)
        v_splitter.addWidget(leftFrame)
        v_splitter.setStretchFactor(1, 1)

        layout.addWidget(v_splitter)

        self.setLayout(layout)
    def createWidgets(self):
        """
        Create all qt widgets
        """
        self.setWindowTitle(self.tr("Extensive Testing Client - Web Browser"))
        self.setWindowIcon(QIcon(":/main.png"))

        self.dockToolbarWebBrowser = QToolBar(self)
        self.dockToolbarWebBrowser.setToolButtonStyle(
            Qt.ToolButtonTextBesideIcon)

        browserLayoutGroup = QVBoxLayout()
        browserLayoutGroup.addWidget(self.dockToolbarWebBrowser)

        toolbarBrowserLayoutGroup = QHBoxLayout()

        self.locationEdit = QLineEdit(self)
        self.locationEdit.setSizePolicy(
            QSizePolicy.Expanding,
            self.locationEdit.sizePolicy().verticalPolicy())

        self.webCounter = QLabel("(0%)")

        toolbarBrowserLayoutGroup.addWidget(QLabel("Load URL:"))
        toolbarBrowserLayoutGroup.addWidget(self.webCounter)
        toolbarBrowserLayoutGroup.addWidget(self.locationEdit)

        self.webTitle = QLabel("Title:")

        self.webView = QWebView()

        if QtHelper.str2bool(
                Settings.instance().readValue(key='Server/proxy-web-active')):

            proxy = QNetworkProxy()
            proxy.setType(3)
            # http
            proxy.setHostName(
                Settings.instance().readValue(key='Server/addr-proxy-http'))
            proxy.setPort(
                int(Settings.instance().readValue(
                    key='Server/port-proxy-http')))
            self.webView.page().networkAccessManager().setProxy(proxy)

        if QT_VERSION_STR.startswith("4."):
            self.webInspector = QWebInspector()
            self.webView.settings().setAttribute(
                QWebSettings.DeveloperExtrasEnabled, True)
            self.webInspector.setPage(self.webView.page())

        self.webView.setHtml(
            '<html><head></head><body>No content loaded</body></html>')
        self.webView.settings().setAttribute(QWebSettings.PluginsEnabled, True)
        self.webView.settings().setAttribute(
            QWebSettings.JavascriptCanOpenWindows, True)

        browserLayoutGroup.addLayout(toolbarBrowserLayoutGroup)
        browserLayoutGroup.addWidget(self.webTitle)

        self.webTab = QTabWidget()
        self.webTab.addTab(self.webView, "Web Page")
        if QT_VERSION_STR.startswith("4."):
            self.webTab.addTab(self.webInspector, "Source Inspector")

        browserLayoutGroup.addWidget(self.webTab)

        self.setLayout(browserLayoutGroup)
Exemplo n.º 9
0
    def keyPressEvent(self, event):
        """
        Reimplement Qt method
    
        @param event: 
        @type event:
        """
        key = event.key()
        startLine, startPos, endLine, endPos = self.getSelection()
        line, index = self.getCursorPosition()
        cmd = self.text(line)

        if (key == Qt.Key_Tab):
            self.indent()
            event.accept()
        elif key == Qt.Key_Backtab:
            self.unindent()
            event.accept()
        else:
            # new in v13.1
            t = event.text()

            # extract option from settings file
            autoCloseBracket = QtHelper.str2bool(
                Settings.instance().readValue(key='Editor/auto-close-bracket'))

            txt = cmd[:index].replace('>>> ', '').replace('... ', '')

            # new in v16
            afterTxt = cmd[index:]
            if len(afterTxt): afterTxt = afterTxt.splitlines()[0]
            # end of new

            if t in self.opening and autoCloseBracket:
                i = self.opening.index(t)
                if self.hasSelectedText():
                    selText = self.selectedText()
                    self.removeSelectedText()
                    self.insert(self.opening[i] + selText + self.closing[i])
                    self.setCursorPosition(endLine, endPos + 2)
                    return
                else:
                    if len(afterTxt):
                        pass
                    elif t == '(' and (re.match(r'^[ \t]*def \w+$', txt)
                                       or re.match(r'^[ \t]*class \w+$', txt)):
                        self.insert('):')
                    else:
                        self.insert(self.closing[i])
            elif t in [')', ']', '}'] and autoCloseBracket:
                txt = self.text(line)
                try:
                    if txt[index - 1] in self.opening and t == txt[index]:
                        self.setCursorPosition(line, index + 1)
                        self.SendScintilla(QsciScintilla.SCI_DELETEBACK)
                except IndexError:
                    pass
            else:
                pass
            # end new in v13.1

            QsciScintilla.keyPressEvent(self, event)
Exemplo n.º 10
0
    def createWidgets(self):
        """
        QtWidgets creation

        QHBoxLayout
         -------------------------------------------.....
        | QLabel: QLineEdit QButton QButton QCheckBox |
         -------------------------------------------.....

        ....--------------------------------------
             QLabel: QLineEdit QButton QCheckBox |
        ....--------------------------------------
        """
        glayout = QGridLayout()

        self.edit = QLineEditMore(parent=self)
        self.edit.setEditable(1)
        self.edit.setMaxCount(10)
        self.edit.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
        self.edit.lineEdit().setPlaceholderText("Search text in your test?")
        self.edit.setMinimumWidth(200)

        self.replaceEdit = QComboBox(self)
        self.replaceEdit.setEditable(1)
        self.replaceEdit.setMaxCount(10)
        self.replaceEdit.setSizePolicy(QSizePolicy.Expanding,
                                       QSizePolicy.Fixed)
        self.replaceEdit.lineEdit().setPlaceholderText(
            "Replace the text with?")
        self.replaceEdit.setMinimumWidth(200)

        self.caseCheck = QCheckBox(self.tr("Case Sensitive"))
        self.caseCheck.setChecked(
            QtHelper.str2bool(Settings.instance().readValue(
                key='Editor/find-case-sensitive')))
        self.caseWordCheck = QCheckBox(self.tr("Whole word only"))
        self.caseWordCheck.setChecked(
            QtHelper.str2bool(
                Settings.instance().readValue(key='Editor/find-whole-word')))
        self.allCheck = QCheckBox(self.tr("All occurences"))
        self.allCheck.setChecked(
            QtHelper.str2bool(
                Settings.instance().readValue(key='Editor/replace-all')))
        self.caseRegexpCheck = QCheckBox(self.tr("Regular expression"))
        self.caseRegexpCheck.setChecked(
            QtHelper.str2bool(
                Settings.instance().readValue(key='Editor/find-regexp')))
        self.caseWrapCheck = QCheckBox(self.tr("Wrap at the end"))
        self.caseWrapCheck.setChecked(
            QtHelper.str2bool(
                Settings.instance().readValue(key='Editor/find-wrap')))

        glayout.addWidget(self.edit, 0, 1)
        glayout.addWidget(self.nextButton, 0, 3)
        glayout.addWidget(self.previousButton, 0, 2)
        glayout.addWidget(self.caseCheck, 2, 2)
        glayout.addWidget(self.caseWrapCheck, 2, 3)
        glayout.addWidget(self.caseWordCheck, 3, 2)
        glayout.addWidget(self.caseRegexpCheck, 3, 3)

        glayout.addWidget(self.replaceEdit, 1, 1)
        glayout.addWidget(self.replaceButton, 1, 2)
        glayout.addWidget(self.allCheck, 1, 3)

        self.previousButton.setDisabled(True)
        self.nextButton.setDisabled(True)

        self.setLayout(glayout)

        flags = Qt.WindowFlags()
        flags |= Qt.Window
        flags |= Qt.WindowTitleHint
        flags |= Qt.WindowCloseButtonHint
        flags |= Qt.MSWindowsFixedSizeDialogHint
        self.setWindowFlags(flags)

        self.setWindowIcon(QIcon(":/main.png"))
        self.setWindowTitle("Find And Replace")
    def createWidgets(self):
        """
        QtWidgets creation
           _________                _______________________      _________ 
          /         \__________    |                       |    /         \__
         |                     | Q |                       | Q |             |
         |   WRepositories     | S |                       | S |             |
         |                     | p |                       | p |             |
         |_____________________| l |                       | l |             |  
           _____QSplitter        i |     WDocumentViewer   | i |   WHelper   |
          /         \__________  t |                       | t |             |
         |                     | t |                       | t |             |
         | WDocumentProperties | e |                       | e |             |
         |                     | r |                       | r |             |
         |_____________________|   |_______________________|   |_____________|
        """

        self.wCursorPosition = WCursorPosition(self)
        self.parent.addWidgetToStatusBar(self.wCursorPosition)
        WDocumentProperties.instance().setDisabled(True)

        layout = QHBoxLayout(self)

        #  properties | viewer | helper
        self.vSplitter = QSplitter(self)

        if not QtHelper.str2bool(
                Settings.instance().readValue(key='View/tab-left')):
            self.hSplitter = QSplitter(self)
            self.hSplitter.setOrientation(Qt.Vertical)

            self.hSplitter.addWidget(WRepositories.instance())
            self.hSplitter.addWidget(WDocumentProperties.instance())
            self.hSplitter.setContentsMargins(0, 0, 0, 0)

            self.vSplitter.addWidget(self.hSplitter)
        else:
            WRepositories.instance().hideWidgetsHeader()
            WDocumentProperties.instance().hideWidgetsHeader()

            self.leftTab = QTabWidget(self)
            self.leftTab.addTab(WRepositories.instance(),
                                QIcon(":/folders.png"),
                                self.tr("Repositories"))
            self.leftTab.addTab(WDocumentProperties.instance(),
                                QIcon(":/controls.png"),
                                self.tr("Test Properties"))
            self.vSplitter.addWidget(self.leftTab)

        self.vSplitter.addWidget(WDocumentViewer.instance())
        self.vSplitter.setStretchFactor(1, 1)

        layout.addWidget(self.vSplitter)

        self.hSplitter2 = QSplitter(self)
        self.hSplitter2.setOrientation(Qt.Vertical)

        self.vSplitter.addWidget(self.hSplitter2)
        self.hSplitter2.addWidget(WHelper.instance())

        self.setLayout(layout)