We have now a global ActionCollection (accessible through QtUi::actionCollection()) that allows the
use of global shortcuts. ChatViewSearchBar is the first widget to make use of this.
Also some cleanups.
ChatViewSearchBar now uses
#include "chatitem.h"
#include "chatlinemodel.h"
#include "qtui.h"
+#include "qtuistyle.h"
ChatItem::ChatItem(ChatLineModel::ColumnType col, QAbstractItemModel *model, QGraphicsItem *parent)
: QGraphicsItem(parent),
#include "networkmodel.h"
#include "qtui.h"
#include "qtuisettings.h"
+#include "qtuistyle.h"
ChatLine::ChatLine(int row, QAbstractItemModel *model, QGraphicsItem *parent)
: QGraphicsItem(parent),
#include "chatlinemodelitem.h"
#include "chatlinemodel.h"
#include "qtui.h"
-#include "uistyle.h"
+#include "qtuistyle.h"
// This Struct is taken from Harfbuzz. We use it only to calc it's size.
// we use a shared memory region so we do not have to malloc a buffer area for every line
computeWrapList();
return _wrapList;
}
-
+
private:
inline void style() {
QtUiStyle::StyledMessage m = QtUi::style()->styleMessage(*_msgBuffer);
// the part " || (finder.position() == contents->plainText.length())" shouldn't be necessary
// but in rare and indeterministic cases Qt states that the end of the text is not a boundary o_O
} while(finder.isAtBoundary() || (finder.position() == contents->plainText.length()));
-
+
// A QVector needs less space than a QList
_wrapList.resize(wplist.count());
for(int i = 0; i < wplist.count(); i++) {
#include "columnhandleitem.h"
#include "messagefilter.h"
#include "qtui.h"
+#include "qtuistyle.h"
#include "chatviewsettings.h"
const qreal minContentsWidth = 200;
line->setPos(0, line->pos().y() + offset);
}
}
-
+
// update sceneRect
if(atTop || moveTop) {
updateSceneRect(_sceneRect.adjusted(0, h, 0, 0));
#include "chatviewsearchbar.h"
-#include <QAction>
+#include "action.h"
+#include "actioncollection.h"
+#include "qtui.h"
ChatViewSearchBar::ChatViewSearchBar(QWidget *parent)
: QWidget(parent)
ui.searchUpButton->setEnabled(false);
ui.searchDownButton->setEnabled(false);
- _toggleViewAction = new QAction(tr("Show search bar"), this);
- _toggleViewAction->setCheckable(true);
- _toggleViewAction->setChecked(false);
- connect(_toggleViewAction, SIGNAL(toggled(bool)),
- this, SLOT(setVisible(bool)));
- setVisible(false);
+ hide();
- connect(ui.hideButton, SIGNAL(clicked()),
- _toggleViewAction, SLOT(toggle()));
+ ActionCollection *coll = QtUi::actionCollection();
+
+ Action *toggleSearchBar = coll->add<Action>("toggleSearchBar");
+ connect(toggleSearchBar, SIGNAL(toggled(bool)), SLOT(setVisible(bool)));
+ toggleSearchBar->setText(tr("Show Search Bar"));
+ toggleSearchBar->setShortcut(Qt::CTRL + Qt::Key_F);
+ toggleSearchBar->setCheckable(true);
+
+ Action *hideSearchBar = coll->add<Action>("hideSearchBar", toggleSearchBar, SLOT(setChecked(bool))); // always false
+ hideSearchBar->setShortcut(Qt::Key_Escape);
+
+ connect(ui.hideButton, SIGNAL(clicked()), toggleSearchBar, SLOT(toggle()));
}
void ChatViewSearchBar::setVisible(bool visible) {
QWidget::setVisible(visible);
ui.searchEditLine->clear();
+ if(visible) ui.searchEditLine->setFocus();
}
+
inline QCheckBox *searchMsgsBox() const { return ui.searchMsgsBox; }
inline QCheckBox *searchOnlyRegularMsgsBox() const { return ui.searchOnlyRegularMsgsBox; }
- inline QAction *toggleViewAction() const { return _toggleViewAction; }
-
public slots:
- void setVisible(bool visible);
+ void setVisible(bool);
private:
Ui::ChatViewSearchBar ui;
- QAction *_toggleViewAction;
};
#endif //CHATVIEWSEARCHBAR_H
#include "mainwin.h"
#include "aboutdlg.h"
+#include "action.h"
+#include "actioncollection.h"
#include "bufferview.h"
#include "bufferviewconfig.h"
#include "bufferviewfilter.h"
offlineTrayIcon(":/icons/quassel-icon-offline.png"),
trayIconActive(false),
- timer(new QTimer(this))
+ timer(new QTimer(this)),
+ _actionCollection(new ActionCollection(this))
{
UiSettings uiSettings;
QString style = uiSettings.value("Style", QString("")).toString();
systray->setIcon(offlineTrayIcon);
setWindowIconText("Quassel IRC");
+ QtUi::actionCollection()->addAssociatedWidget(this);
+
statusBar()->showMessage(tr("Waiting for core..."));
installEventFilter(new JumpKeyHandler(this));
setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea);
// setup stuff...
+ setupActions();
setupMenus();
setupViews();
setupNickWidget();
// attach the BufferWidget to the BufferModel and the default selection
ui.bufferWidget->setModel(Client::bufferModel());
ui.bufferWidget->setSelectionModel(Client::bufferModel()->standardSelectionModel());
- ui.menuViews->addAction(ui.bufferWidget->searchBar()->toggleViewAction());
+ ui.menuViews->addAction(QtUi::actionCollection()->action("toggleSearchBar"));
_titleSetter.setModel(Client::bufferModel());
_titleSetter.setSelectionModel(Client::bufferModel()->standardSelectionModel());
s.setValue("MainWinState", saveState());
}
+void MainWin::setupActions() {
+
+
+}
+
void MainWin::setupMenus() {
connect(ui.actionConnectCore, SIGNAL(triggered()), this, SLOT(showCoreConnectionDlg()));
connect(ui.actionDisconnectCore, SIGNAL(triggered()), Client::instance(), SLOT(disconnectFromCore()));
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
-#ifndef _MAINWIN_H_
-#define _MAINWIN_H_
+#ifndef MAINWIN_H_
+#define MAINWIN_H_
#include "ui_mainwin.h"
#include "qtui.h"
#include "titlesetter.h"
-#include "sessionsettings.h"
+#include "sessionsettings.h"
#include <QSystemTrayIcon>
#include <QTimer>
+class ActionCollection;
class Buffer;
class BufferViewConfig;
class MsgProcessorStatusWidget;
virtual ~MainWin();
void init();
+
void addBufferView(BufferViewConfig *config = 0);
void displayTrayIconMessage(const QString &title, const QString &message);
TitleSetter _titleSetter;
+ void setupActions();
void setupMenus();
void setupViews();
void setupNickWidget();
QList<QDockWidget *> _netViews;
NickListWidget *nickListWidget;
+ ActionCollection *_actionCollection;
+
#ifdef HAVE_DBUS
org::freedesktop::Notifications *desktopNotifications;
quint32 notificationId;
#include <QDebug>
+#include "actioncollection.h"
#include "chatlinemodel.h"
#include "mainwin.h"
#include "qtuimessageprocessor.h"
+#include "qtuistyle.h"
#include "uisettings.h"
#include "util.h"
+ActionCollection *QtUi::_actionCollection = 0;
QtUiStyle *QtUi::_style = 0;
-QtUi::QtUi()
- : AbstractUi()
+QtUi::QtUi() : AbstractUi()
{
if(_style != 0) {
qWarning() << "QtUi has been instantiated again!";
return;
}
-
+ _actionCollection = new ActionCollection(this);
+
UiSettings uiSettings;
loadTranslation(uiSettings.value("Locale", QLocale::system()).value<QLocale>());
#ifndef QTUI_H
#define QTUI_H
-#include "qtuistyle.h"
#include "quasselui.h"
+class ActionCollection;
class MainWin;
class MessageModel;
class QtUiMessageProcessor;
+class QtUiStyle;
//! This class encapsulates Quassel's Qt-based GUI.
/** This is basically a wrapper around MainWin, which is necessary because we cannot derive MainWin
MessageModel *createMessageModel(QObject *parent);
AbstractMessageProcessor *createMessageProcessor(QObject *parent);
- inline static QtUiStyle *style() { return _style; }
+ inline static QtUiStyle *style();
+
+ //! Access the global ActionCollection.
+ /** This ActionCollection is associated with the main window, i.e. it contains global
+ * actions (and thus, shortcuts). Widgets providing application-wide shortcuts should
+ * create appropriate Action objects using QtUi::actionCollection()->add\<Action\>().
+ */
+ inline static ActionCollection *actionCollection();
public slots:
void init();
private:
MainWin *mainWin;
+ static ActionCollection *_actionCollection;
static QtUiStyle *_style;
};
+ActionCollection *QtUi::actionCollection() { return _actionCollection; }
+QtUiStyle *QtUi::style() { return _style; }
+
#endif
#include "qtui.h"
#include "qtuisettings.h"
+#include "qtuistyle.h"
#include "colorbutton.h"
#include <QColorDialog>
if(QtUi::style()->format(UiStyle::Sender).background().color() != ui.senderBG->color()) return true;
if(settings["SenderUseBG"].toBool() != ui.senderUseBG->isChecked()) return true;
if(settings["NewMsgMarkerFG"].value<QColor>() != ui.newMsgMarkerFG->color()) return true;
-
+
/*
if(QtUi::style()->format(UiStyle::Nick).foreground().color() != ui.nickFG->color()) return true;
if(QtUi::style()->format(UiStyle::Nick).background().color() != ui.nickBG->color()) return true;
#include "qtui.h"
#include "qtuisettings.h"
+#include "qtuistyle.h"
#include <QFontDialog>
mapper->setMapping(ui.chooseTimestamp, ui.demoTimestamp);
connect(mapper, SIGNAL(mapped(QWidget *)), this, SLOT(chooseFont(QWidget *)));
-
+
//connect(ui.customAppFonts, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
connect(ui.checkTopic, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
connect(ui.checkBufferView, SIGNAL(clicked()), this, SLOT(widgetHasChanged()));
inputLineFont = qApp->font();
}
initLabel(ui.demoInputLine, inputLineFont);
-
+
QTextCharFormat chatFormat = QtUi::style()->format(UiStyle::None, mode);
initLabel(ui.demoChatMessages, chatFormat.font());
QTextCharFormat nicksFormat = QtUi::style()->format(UiStyle::Sender, mode);
QtUiSettings s;
s.setValue("UseInputLineFont", (ui.checkInputLine->checkState() == Qt::Checked));
s.setValue("InputLineFont", ui.demoInputLine->font());
-
+
QTextCharFormat chatFormat = QtUi::style()->format(UiStyle::None);
chatFormat.setFont(ui.demoChatMessages->font());
QtUi::style()->setFormat(UiStyle::None, chatFormat, Settings::Custom);
#include <QFontMetrics>
#include "qtui.h"
+#include "qtuistyle.h"
#include "message.h"
TopicLabel::TopicLabel(QWidget *parent)
***************************************************************************/
#include <QAction>
+#include <QDebug>
#include "actioncollection.h"
}
Action *ActionCollection::addAction(const QString &name, Action *action) {
- QAction *act = addAction(name, action);
+ QAction *act = addAction(name, static_cast<QAction *>(action));
Q_ASSERT(act == action);
return action;
}
_associatedWidgets.clear();
}
+void ActionCollection::associatedWidgetDestroyed(QObject *obj) {
+ _associatedWidgets.removeAll(static_cast<QWidget *>(obj));
+}
+
bool ActionCollection::unlistAction(QAction *action) {
// This might be called with a partly destroyed QAction!
#ifndef ACTIONCOLLECTION_H_
#define ACTIONCOLLECTION_H_
+#include <QDebug>
#include <QList>
#include <QMap>
#include <QObject>