Changeset 11167:74773cf295d6 in orange


Ignore:
Timestamp:
11/02/12 17:25:23 (18 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Added 'Output' window showing redirected stdout/stderr.

Location:
Orange/OrangeCanvas
Files:
4 added
2 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeCanvas/application/canvasmain.py

    r11166 r11167  
    1414    QMainWindow, QWidget, QAction, QActionGroup, QMenu, QMenuBar, QDialog, 
    1515    QFileDialog, QMessageBox, QVBoxLayout, QSizePolicy, QColor, QKeySequence, 
    16     QIcon, QToolBar, QDockWidget, QDesktopServices, QUndoGroup 
     16    QIcon, QToolBar, QDockWidget, QDesktopServices, QUndoGroup, QApplication 
    1717) 
    1818 
    1919from PyQt4.QtCore import ( 
    20     Qt, QEvent, QSize, QUrl, QSettings 
     20    Qt, QEvent, QSize, QUrl, QSettings, QTimer 
    2121) 
    2222 
     
    3030from .aboutdialog import AboutDialog 
    3131from .schemeinfo import SchemeInfoDialog 
     32from .outputview import OutputText 
    3233from ..document.schemeedit import SchemeEditWidget 
    3334 
     
    175176 
    176177class CanvasMainWindow(QMainWindow): 
    177     SETTINGS_VERSION = 1 
     178    SETTINGS_VERSION = 2 
    178179 
    179180    def __init__(self, *args): 
     
    216217        self.addToolBar(Qt.BottomToolBarArea, self.__dummy_bottom_toolbar) 
    217218 
     219        self.setCorner(Qt.BottomLeftCorner, Qt.LeftDockWidgetArea) 
     220        self.setCorner(Qt.BottomRightCorner, Qt.RightDockWidgetArea) 
     221 
    218222        # Create an empty initial scheme inside a container with fixed 
    219223        # margins. 
     
    248252        self.dock_widget.setFeatures(QDockWidget.DockWidgetMovable | \ 
    249253                                     QDockWidget.DockWidgetClosable) 
     254        self.dock_widget.setAllowedAreas(Qt.LeftDockWidgetArea | \ 
     255                                         Qt.RightDockWidgetArea) 
    250256 
    251257        # Main canvas tool dock (with widget toolbox, common actions. 
     
    334340            self._on_dock_location_changed 
    335341        ) 
     342 
     343        self.output_dock = QDockWidget(self.tr("Output"), 
     344                                       objectName="output-dock") 
     345        self.output_dock.setAllowedAreas(Qt.BottomDockWidgetArea) 
     346 
     347        self.addDockWidget(Qt.BottomDockWidgetArea, self.output_dock) 
     348        self.output_dock.setFloating(True) 
     349 
     350        self.output_dock.hide() 
     351 
     352        output_view = OutputText() 
     353        self.output_dock.setWidget(output_view) 
    336354 
    337355        self.setMinimumSize(600, 500) 
     
    491509                    menuRole=QAction.PreferencesRole, 
    492510                    shortcut=QKeySequence.Preferences 
     511                    ) 
     512 
     513        self.show_output_action = \ 
     514            QAction(self.tr("Show Output View"), self, 
     515                    toolTip=self.tr("Show application output."), 
     516                    triggered=self.show_output_view, 
    493517                    ) 
    494518 
     
    677701        # Options menu 
    678702        self.options_menu = QMenu(self.tr("&Options"), self) 
    679         self.options_menu.addAction(self.tr("Show Output")) 
     703        self.options_menu.addAction(self.show_output_action) 
    680704#        self.options_menu.addAction("Add-ons") 
    681705#        self.options_menu.addAction("Developers") 
     
    12341258        pass 
    12351259 
     1260    def show_output_view(self): 
     1261        """Show a window with application output. 
     1262        """ 
     1263        self.output_dock.show() 
     1264 
     1265    def output_view(self): 
     1266        """Return the output text widget. 
     1267        """ 
     1268        return self.output_dock.widget() 
     1269 
    12361270    def open_about(self): 
    12371271        """Open the about dialog. 
     
    13531387 
    13541388        event.accept() 
     1389 
     1390        # Close any windows left. 
     1391        application = QApplication.instance() 
     1392        QTimer.singleShot(0, application.closeAllWindows) 
    13551393 
    13561394    def showEvent(self, event): 
  • Orange/OrangeCanvas/main.py

    r11147 r11167  
    99import optparse 
    1010import cPickle 
     11from contextlib import nested 
    1112 
    1213import pkg_resources 
     
    2223from Orange.OrangeCanvas.config import open_config, cache_dir 
    2324from Orange.OrangeCanvas import config 
     25from Orange.OrangeCanvas.utils.redirect import redirect_stdout, redirect_stderr 
    2426 
    2527from Orange.OrangeCanvas.registry import qt 
     
    5961                      help="Logging level (0, 1, 2, 3)", 
    6062                      type="int", default=1) 
     63    parser.add_option("--no-redirect", 
     64                      action="store_true", 
     65                      help="Do not redirect stdout/err to canvas output view.") 
    6166    parser.add_option("--style", 
    6267                      help="QStyle to use", 
     
    138143 
    139144    want_splash = \ 
    140         settings.value("startup/show-splash-screen", True).toPyObject() 
     145        settings.value("startup/show-splash-screen", True).toPyObject() and \ 
     146        not options.no_splash 
    141147 
    142148    if want_splash: 
     
    187193        canvas_window.load_scheme(args[0]) 
    188194 
    189     log.info("Entering main event loop.") 
    190     try: 
    191         status = app.exec_() 
    192     except BaseException: 
    193         log.error("Error in main event loop.", exc_info=True) 
     195    disable_redirect = \ 
     196        settings.value("mainwindow/no-stdout-redirect", False).toBool() or \ 
     197        options.no_redirect 
     198 
     199    if not disable_redirect: 
     200        output = canvas_window.output_view() 
     201    else: 
     202        output = None 
     203 
     204    with nested(redirect_stdout(output), redirect_stderr(output)): 
     205        log.info("Entering main event loop.") 
     206        try: 
     207            status = app.exec_() 
     208        except BaseException: 
     209            log.error("Error in main event loop.", exc_info=True) 
    194210 
    195211    canvas_window.deleteLater() 
Note: See TracChangeset for help on using the changeset viewer.