void ViewManager::detachView(ViewContainer* container, QWidget* widgetView) { TerminalDisplay * viewToDetach = dynamic_cast<TerminalDisplay*>(widgetView); if (!viewToDetach) return; emit viewDetached(_sessionMap[viewToDetach]); _sessionMap.remove(viewToDetach); // remove the view from this window container->removeView(viewToDetach); viewToDetach->deleteLater(); // if the container from which the view was removed is now empty then it can be deleted, // unless it is the only container in the window, in which case it is left empty // so that there is always an active container if (_viewSplitter->containers().count() > 1 && container->views().count() == 0) { removeContainer(container); } }
void ViewManager::detachActiveView() { // find the currently active view and remove it from its container ViewContainer* container = _viewSplitter->activeContainer(); TerminalDisplay* activeView = dynamic_cast<TerminalDisplay*>(container->activeView()); if (!activeView) return; emit viewDetached(_sessionMap[activeView]); _sessionMap.remove(activeView); // remove the view from this window container->removeView(activeView); activeView->deleteLater(); // if the container from which the view was removed is now empty then it can be deleted, // unless it is the only container in the window, in which case it is left empty // so that there is always an active container if ( _viewSplitter->containers().count() > 1 && container->views().count() == 0 ) { removeContainer(container); } }
void Session::updateTerminalSize() { QListIterator<TerminalDisplay*> viewIter( _views ); int minLines = -1; int minColumns = -1; // minimum number of lines and columns that views require for // their size to be taken into consideration ( to avoid problems // with new view widgets which haven't yet been set to their correct size ) const int VIEW_LINES_THRESHOLD = 2; const int VIEW_COLUMNS_THRESHOLD = 2; //select largest number of lines and columns that will fit in all visible views while ( viewIter.hasNext() ) { TerminalDisplay* view = viewIter.next(); if ( !view->isHidden() && view->lines() >= VIEW_LINES_THRESHOLD && view->columns() >= VIEW_COLUMNS_THRESHOLD ) { minLines = ( minLines == -1 ) ? view->lines() : qMin( minLines , view->lines() ); minColumns = ( minColumns == -1 ) ? view->columns() : qMin( minColumns , view->columns() ); } } // backend emulation must have a _terminal of at least 1 column x 1 line in size if ( minLines > 0 && minColumns > 0 ) { _emulation->setImageSize( minLines , minColumns ); _shellProcess->setWindowSize( minLines , minColumns ); } }
void MainWindow::showPreferences() { Session *sess = _Sessions.at(tabs->currentIndex()); Profile *prof = new Profile(sess->profileKey()); Preferences *pd = new Preferences(prof); pd->setModal(true); #ifdef QTOPIA_PHONE if (Qtopia::mousePreferred) QtopiaApplication::instance()->hideInputMethod(); #endif pd->exec(); if (pd->result()==QDialog::Accepted) { // apply the changes and update the current session settings Profile *p = pd->profile(); TerminalDisplay *display = sess->views()[0]; display->setVTFont(QFont(p->fontName(), p->fontSize())); const ColorScheme* colorScheme = ColorSchemeManager::instance()->findColorScheme(p->colorScheme()); ColorEntry table[TABLE_COLORS]; colorScheme->getColorTable(table, display->randomSeed()); display->setColorTable(table); display->setOpacity(colorScheme->opacity()); display->setKeyboardCursorShape((TerminalDisplay::KeyboardCursorShape)p->cursorShape()); sess->setKeyBindings(p->keyboard()); sess->setHistoryType(HistoryTypeBuffer(p->historyLines())); sess->setProfileKey(p->name()); p->saveProfile(p->name()); } #ifdef QTOPIA_PHONE if (Qtopia::mousePreferred) QtopiaApplication::instance()->showInputMethod(); #endif delete pd; }
TerminalDisplay *TermWidgetImpl::createTerminalDisplay(Session *session, QWidget* parent) { // TerminalDisplay* display = new TerminalDisplay(this); TerminalDisplay* display = new TerminalDisplay(parent); display->setBellMode(TerminalDisplay::NotifyBell); display->setTerminalSizeHint(true); display->setTripleClickMode(TerminalDisplay::SelectWholeLine); display->setTerminalSizeStartup(true); display->setRandomSeed(session->sessionId() * 31); return display; }
void MainWindow::addSession(const char *name) { TerminalDisplay *display = new TerminalDisplay(); Profile *profile = new Profile(name); Session *session = new Session(*profile); const ColorScheme* colorScheme = ColorSchemeManager::instance()->findColorScheme(profile->colorScheme()); //TODO Temporary settings used here display->setBellMode(0); display->setTerminalSizeHint(false); display->setTripleClickMode(TerminalDisplay::SelectWholeLine); display->setTerminalSizeStartup(false); display->setScrollBarPosition(TerminalDisplay::ScrollBarRight); display->setRandomSeed(session->sessionId() * 31); display->setVTFont(QFont(profile->fontName(), profile->fontSize())); //ColorSchemeManager::instance()->addColorScheme(new ColorScheme(*colorScheme)); ColorEntry table[TABLE_COLORS]; colorScheme->getColorTable(table, display->randomSeed()); display->setColorTable(table); display->setOpacity(colorScheme->opacity()); display->setKeyboardCursorShape((TerminalDisplay::KeyboardCursorShape)profile->cursorShape()); session->addView(display); int tabid = tabs->addTab(display,QIcon(":icon/konsole"), tr(name)); session->setTitle(Session::NameRole,name); session->setProgram(profile->command()); session->setHistoryType( HistoryTypeBuffer(profile->historyLines()) ); session->setProfileKey(profile->name()); session->setInitialWorkingDirectory(QDir::homePath()); connect(session, SIGNAL(finished(QObject*)), this, SLOT(finished(QObject*))); session->setKeyBindings(profile->keyboard()); _sessionCount++; _Sessions.append(session); session->run(); tabs->setCurrentIndex(tabid); display->setFocus(Qt::OtherFocusReason); }