X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Finputwidget.h;h=b6afaee0abf524341da5763d21c7c24ae74944c9;hp=485ac671d01870ad64b8fe4d299fddc77e15b25c;hb=HEAD;hpb=bcfd213c6c381e6d2344ceba4a82ed3f87a9fd3e diff --git a/src/qtui/inputwidget.h b/src/qtui/inputwidget.h index 485ac671..c8cb0b5b 100644 --- a/src/qtui/inputwidget.h +++ b/src/qtui/inputwidget.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * + * Copyright (C) 2005-2022 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -15,68 +15,201 @@ * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#ifndef INPUTWIDGET_H -#define INPUTWIDGET_H +#pragma once -#include "ui_inputwidget.h" -#include -#include +#include +#include +#include +#include -#include "buffermodel.h" +#include "abstractitemview.h" +#include "action.h" #include "bufferinfo.h" +#include "buffermodel.h" #include "identity.h" -#include "network.h"; +#include "network.h" -class InputWidget : public QWidget { - Q_OBJECT - -public: - InputWidget(QWidget *parent = 0); - virtual ~InputWidget(); +#include "ui_inputwidget.h" - inline BufferModel *model() { return _bufferModel; } - void setModel(BufferModel *bufferModel); +class MultiLineEdit; - inline QItemSelectionModel *selectionModel() const { return _selectionModel; } - void setSelectionModel(QItemSelectionModel *selectionModel); +class InputWidget : public AbstractItemView +{ + Q_OBJECT - const Network *currentNetwork() const; +public: + InputWidget(QWidget* parent = nullptr); + + const Network* currentNetwork() const; + + inline MultiLineEdit* inputLine() const { return ui.inputEdit; } + +public slots: + /** + * Apply the active color to the selected or typed text + * + * Active color is chosen using the UI menu. + */ + void applyFormatActiveColor(); + + /** + * Apply the active fill color to the selected or typed text background + * + * Fill color is chosen using the UI menu. + */ + void applyFormatActiveColorFill(); + + /** + * Toggle the boldness of the selected or typed text + * + * Bold becomes normal, and normal becomes bold. + */ + void toggleFormatBold(); + + /** + * Toggle the italicness of the selected or typed text + * + * Italicized becomes normal, and normal becomes italicized. + */ + void toggleFormatItalic(); + + /** + * Toggle the underlining of the selected or typed text + * + * Underlined becomes normal, and normal becomes underlined. + */ + void toggleFormatUnderline(); + + /** + * Toggle the striking of the selected or typed text + * + * striking becomes normal, and normal becomes underlined. + */ + void toggleFormatStrikethrough(); + + /** + * Clear the formatting of the selected or typed text + * + * Clears the font weight (bold, italic, underline) and foreground/background coloring. + */ + void clearFormat(); + +protected: + bool eventFilter(QObject* watched, QEvent* event) override; protected slots: -// virtual void closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint); -// virtual void commitData(QWidget *editor); - virtual void currentChanged(const QModelIndex ¤t, const QModelIndex &previous); -// virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight); -// virtual void editorDestroyed(QObject *editor); -// virtual void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end); -// virtual void rowsInserted(const QModelIndex &parent, int start, int end); -// virtual void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected); + void currentChanged(const QModelIndex& current, const QModelIndex& previous) override; + void rowsAboutToBeRemoved(const QModelIndex& parent, int start, int end) override; + void dataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight) override; private slots: - void sendText(QString text); - void changeNick(const QString &newNick) const; - - void setNetwork(const Network *network); - void setIdentity(const IdentityId &identityId); - void updateNickSelector() const; - -signals: - void userInput(BufferInfo, QString msg) const; + void setCustomFont(const QVariant& font); + void setUseCustomFont(const QVariant&); + void setEnableEmacsMode(const QVariant&); + void setShowNickSelector(const QVariant&); + void setShowStyleButtons(const QVariant&); + void setEnablePerChatHistory(const QVariant&); + void setMaxLines(const QVariant&); + void setLineWrapEnabled(const QVariant&); + void setMultiLineEnabled(const QVariant&); + void setScrollBarsEnabled(const QVariant&); + void onTextEntered(const QString& text); + void changeNick(const QString& newNick) const; + + void setNetwork(NetworkId networkId); + void setIdentity(IdentityId identityId); + void connectMyIrcUser(); + void updateNickSelector() const; + void updateEnabledState(); + + BufferInfo currentBufferInfo() const; + + /** + * Set whether or not the style options frame is expanded + * + * @param visible If true, expand the style options frame, otherwise collapse it + */ + void setStyleOptionsExpanded(const bool visible); + + void currentCharFormatChanged(const QTextCharFormat& format); + void on_showStyleButton_toggled(bool checked); + void on_boldButton_clicked(bool checked); + void on_italicButton_clicked(bool checked); + void on_underlineButton_clicked(bool checked); + void on_strikethroughButton_clicked(bool checked); + void colorChosen(QAction* action); + void colorHighlightChosen(QAction* action); private: - Ui::InputWidget ui; + /** + * Clear the formatting of the text, globally or selected text only + * + * Clears the font weight (bold, italic, underline) and foreground/background coloring. + * + * @param global If true, clear all text formatting, otherwise only clear selected text + */ + void setFormatClear(const bool global = false); + + /** + * Sets the boldness of the selected or typed text + * + * @param bold If true, set text bold, otherwise set text normal + */ + void setFormatBold(const bool bold); + + /** + * Sets the italicness of the selected or typed text + * + * @param bold If true, set text italic, otherwise set text normal + */ + void setFormatItalic(const bool italic); + + /** + * Sets the underline of the selected or typed text + * + * @param bold If true, set text underlined, otherwise set text normal + */ + void setFormatUnderline(const bool underline); + + /** + * Sets the strikethrough of the selected or typed text + * + * @param strike If true, set text striked, otherwise set text normal + */ + void setFormatStrikethrough(const bool strike); + + Ui::InputWidget ui; + + NetworkId _networkId; + IdentityId _identityId; + QMenu *_colorMenu, *_colorFillMenu; + + void mergeFormatOnSelection(const QTextCharFormat& format); + void fontChanged(const QFont& f); + QIcon createColorToolButtonIcon(const QIcon& icon, const QColor& color); + QTextCharFormat getFormatOfWordOrSelection(); + void setFormatOnSelection(const QTextCharFormat& format); + + bool _perChatHistory; + struct HistoryState + { + QStringList history; + QHash tempHistory; + qint32 idx{0}; + QString inputLine; + }; + + QMap historyMap; +}; - bool validBuffer; - BufferInfo currentBufferInfo; - - QPointer _bufferModel; - QPointer _selectionModel; - NetworkId _networkId; - IdentityId _identityId; +class MouseWheelFilter : public QObject +{ + Q_OBJECT +public: + MouseWheelFilter(QObject* parent = nullptr); + bool eventFilter(QObject* obj, QEvent* event) override; }; - -#endif // INPUTWIDGET_H