Ejemplo n.º 1
0
  @Inject
  public WorkbenchScreen(
      EventBus eventBus,
      Session session,
      Provider<PaneManager> pPaneManager,
      final Edit.Shim edit,
      Commands commands,
      final Provider<MRUList> mruList,
      FontSizeManager fontSizeManager,
      OptionsLoader.Shim optionsLoader) {
    eventBus_ = eventBus;
    session_ = session;
    edit_ = edit;
    optionsLoader_ = optionsLoader;

    eventBus_.addHandler(ShowEditorEvent.TYPE, edit);
    eventBus_.addHandler(
        ChangeFontSizeEvent.TYPE,
        new ChangeFontSizeHandler() {
          public void onChangeFontSize(ChangeFontSizeEvent event) {
            FontSizer.setNormalFontSize(Document.get(), event.getFontSize());
            Scheduler.get()
                .scheduleDeferred(
                    new ScheduledCommand() {
                      public void execute() {
                        // Causes the console width to be remeasured
                        doOnPaneSizesChanged();
                      }
                    });
          }
        });
    FontSizer.setNormalFontSize(Document.get(), fontSizeManager.getSize());

    paneManager_ = pPaneManager.get();
    tabsPanel_ = paneManager_.getPanel();
    tabsPanel_.setSize("100%", "100%");
    tabsPanel_.addStyleDependentName("Workbench");

    // Prevent doOnPaneSizesChanged() from being called more than once
    // every N milliseconds. Note that the act of sending the client metrics
    // to the server also has its own buffer, so this one only needs to
    // minimize the expense of doing the calculation, not of sending data to
    // the server.
    paneSizesChangedCommand_ =
        new TimeBufferedCommand(200) {
          @Override
          protected void performAction(boolean shouldSchedulePassive) {
            assert !shouldSchedulePassive;
            doOnPaneSizesChanged();
          }
        };

    eventBus.addHandler(
        SessionInitEvent.TYPE,
        new SessionInitHandler() {
          public void onSessionInit(SessionInitEvent sie) {
            prefetch();
            mruList.get();
          }
        });

    eventBus.addHandler(
        LastSourceDocClosedEvent.TYPE,
        new LastSourceDocClosedHandler() {
          public void onLastSourceDocClosed(LastSourceDocClosedEvent event) {
            paneManager_
                .getSourceLogicalWindow()
                .onWindowStateChange(new WindowStateChangeEvent(WindowState.HIDE));
          }
        });

    eventBus.addHandler(
        WorkingDirChangedEvent.TYPE,
        new WorkingDirChangedHandler() {
          public void onWorkingDirChanged(WorkingDirChangedEvent event) {
            updateWorkingDirectory(event.getPath());
          }
        });

    ((PlotsTab) paneManager_.getTab(Tab.Plots))
        .addResizeHandler(
            new ResizeHandler() {
              public void onResize(ResizeEvent event) {
                onPaneSizesChanged();
              }
            });
    tabsPanel_.addSplitterResizedHandler(
        new SplitterResizedHandler() {
          public void onSplitterResized(SplitterResizedEvent event) {
            onPaneSizesChanged();
          }
        });

    // init widget
    initWidget(tabsPanel_);

    commandBinder.bind(commands, this);
  }