You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
218 lines
6.3 KiB
218 lines
6.3 KiB
/* |
|
SPDX-FileCopyrightText: 2006-2008 Robert Knight <robertknight@gmail.com> |
|
|
|
SPDX-License-Identifier: GPL-2.0-or-later |
|
*/ |
|
|
|
#ifndef MAINWINDOW_H |
|
#define MAINWINDOW_H |
|
|
|
// Qt |
|
#include <QExplicitlySharedDataPointer> |
|
#include <QPointer> |
|
#include <QUrl> |
|
|
|
// KDE |
|
#include <KXmlGuiWindow> |
|
|
|
// Konsole |
|
#include "widgets/ViewSplitter.h" |
|
|
|
#include "pluginsystem/IKonsolePlugin.h" |
|
|
|
#include "konsole_export.h" |
|
|
|
class QAction; |
|
class KActionMenu; |
|
class KToggleAction; |
|
|
|
namespace Konsole |
|
{ |
|
class ViewManager; |
|
class ViewProperties; |
|
class Session; |
|
class SessionController; |
|
class Profile; |
|
class ProfileList; |
|
class BookmarkHandler; |
|
|
|
/** |
|
* The main window. This contains the menus and an area which contains the terminal displays. |
|
* |
|
* The main window does not create the views or the container widgets which hold the views. |
|
* This is done by the ViewManager class. When a MainWindow is instantiated, it creates |
|
* a new ViewManager. The ViewManager can then be used to create new terminal displays |
|
* inside the window. |
|
* |
|
* Do not construct new main windows directly, use Application's newMainWindow() method. |
|
*/ |
|
class KONSOLE_EXPORT MainWindow : public KXmlGuiWindow |
|
{ |
|
Q_OBJECT |
|
|
|
public: |
|
/** |
|
* Constructs a new main window. Do not create new main windows directly, use Application's |
|
* newMainWindow() method instead. |
|
*/ |
|
MainWindow(); |
|
|
|
/** |
|
* Returns the view manager associated with this window. The view manager can be used to |
|
* create new views on particular session objects inside this window. |
|
*/ |
|
ViewManager *viewManager() const; |
|
|
|
/** |
|
* Create a new session. |
|
* |
|
* @param profile The profile to use to create the new session. |
|
* @param directory Initial working directory for the new session or empty |
|
* if the default working directory associated with the profile should be used. |
|
*/ |
|
Session *createSession(QExplicitlySharedDataPointer<Profile> profile, const QString &directory); |
|
|
|
/** |
|
* create a new SSH session. |
|
* |
|
* @param profile The profile to use to create the new session. |
|
* @param url the URL representing the new SSH connection |
|
*/ |
|
Session *createSSHSession(QExplicitlySharedDataPointer<Profile> profile, const QUrl &url); |
|
|
|
/** |
|
* Helper method to make this window get input focus |
|
*/ |
|
void setFocus(); |
|
|
|
/** |
|
* Set the initial visibility of the menubar. |
|
*/ |
|
void setMenuBarInitialVisibility(bool showMenuBar); |
|
|
|
/** |
|
* @brief Set the frameless state |
|
* |
|
* @param frameless If true, no titlebar or frame is displayed. |
|
*/ |
|
void setRemoveWindowTitleBarAndFrame(bool frameless); |
|
|
|
/** |
|
* A reference to a plugin on the system. |
|
*/ |
|
void addPlugin(IKonsolePlugin *plugin); |
|
|
|
/** |
|
* creates a new tab for the main window |
|
*/ |
|
void newTab(); |
|
|
|
Q_SIGNALS: |
|
|
|
/** |
|
* Emitted by the main window to request the creation of a |
|
* new session in a new window. |
|
* |
|
* @param profile The profile to use to create the |
|
* first session in the new window. |
|
* @param directory Initial working directory for the new window or empty |
|
* if the default working directory associated with the profile should |
|
* be used. |
|
*/ |
|
void newWindowRequest(const QExplicitlySharedDataPointer<Profile> &profile, const QString &directory); |
|
|
|
/** |
|
* Emitted when a view for one session is detached from this window |
|
*/ |
|
void terminalsDetached(ViewSplitter *splitter, QHash<TerminalDisplay *, Session *> sessionsMap); |
|
|
|
protected: |
|
// Reimplemented for internal reasons. |
|
void showEvent(QShowEvent *event) override; |
|
bool eventFilter(QObject *obj, QEvent *event) override; |
|
|
|
// reimplemented from KMainWindow |
|
bool queryClose() override; |
|
void saveProperties(KConfigGroup &group) override; |
|
void readProperties(const KConfigGroup &group) override; |
|
void saveGlobalProperties(KConfig *config) override; |
|
void readGlobalProperties(KConfig *config) override; |
|
|
|
// reimplemented from QWidget |
|
bool focusNextPrevChild(bool next) override; |
|
|
|
private Q_SLOTS: |
|
void cloneTab(); |
|
void newWindow(); |
|
void showManageProfilesDialog(); |
|
void activateMenuBar(); |
|
void showSettingsDialog(bool showProfilePage = false); |
|
void showShortcutsDialog(); |
|
void newFromProfile(const QExplicitlySharedDataPointer<Profile> &profile); |
|
void activeViewChanged(SessionController *controller); |
|
void disconnectController(SessionController *controller); |
|
void activeViewTitleChanged(ViewProperties *); |
|
|
|
void profileListChanged(const QList<QAction *> &sessionActions); |
|
void configureNotifications(); |
|
void setBlur(bool blur); |
|
|
|
void updateWindowIcon(); |
|
void updateWindowCaption(); |
|
void openUrls(const QList<QUrl> &urls); |
|
|
|
// Sets the list of profiles to be displayed under the "New Tab" action |
|
void setProfileList(ProfileList *list); |
|
|
|
void applyKonsoleSettings(); |
|
|
|
void updateUseTransparency(); |
|
|
|
public Q_SLOTS: |
|
void viewFullScreen(bool fullScreen); |
|
|
|
private: |
|
void applyMainWindowSettings(const KConfigGroup &config) override; |
|
|
|
/** |
|
* Returns true if the window geometry was previously saved to the |
|
* config file, false otherwise. |
|
*/ |
|
bool wasWindowGeometrySaved() const; |
|
|
|
void correctStandardShortcuts(); |
|
void rememberMenuAccelerators(); |
|
void removeMenuAccelerators(); |
|
void restoreMenuAccelerators(); |
|
void setupActions(); |
|
QString activeSessionDir() const; |
|
void triggerAction(const QString &name) const; |
|
|
|
/** |
|
* Returns the bookmark handler associated with this window. |
|
*/ |
|
BookmarkHandler *bookmarkHandler() const; |
|
|
|
// sets the active shortcuts of actions in 'dest' to the shortcuts of actions |
|
// with the same name in 'source' (see QAction::ActiveShortcut) |
|
static void syncActiveShortcuts(KActionCollection *dest, const KActionCollection *source); |
|
|
|
private: |
|
ViewManager *_viewManager; |
|
BookmarkHandler *_bookmarkHandler; |
|
KToggleAction *_toggleMenuBarAction; |
|
KActionMenu *_newTabMenuAction; |
|
|
|
QPointer<SessionController> _pluggedController; |
|
QList<IKonsolePlugin *> _plugins; |
|
bool _blurEnabled = false; |
|
bool _firstShowEvent = true; |
|
|
|
struct { |
|
bool enabled = false; // indicates that we got a command line argument for menubar |
|
bool showMenuBar = true; |
|
} _windowArgsMenuBarVisible; |
|
}; |
|
} |
|
|
|
#endif // MAINWINDOW_H
|
|
|