~ubuntu-branches/ubuntu/saucy/kopete/saucy-proposed

« back to all changes in this revision

Viewing changes to kopete/statusmenu/kopetestatuseditaction.cpp

  • Committer: Package Import Robot
  • Author(s): Jonathan Riddell
  • Date: 2013-06-21 02:22:39 UTC
  • Revision ID: package-import@ubuntu.com-20130621022239-63l3zc8p0nf26pt6
Tags: upstream-4.10.80
ImportĀ upstreamĀ versionĀ 4.10.80

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
    kopetestatuseditaction.cpp - Kopete Status Edit Action
 
3
 
 
4
    Copyright (c) 2008      by Roman Jarosz          <kedgedev@centrum.cz>
 
5
    Kopete    (c) 2008      by the Kopete developers <kopete-devel@kde.org>
 
6
 
 
7
    *************************************************************************
 
8
    *                                                                       *
 
9
    * This library is free software; you can redistribute it and/or         *
 
10
    * modify it under the terms of the GNU Lesser General Public            *
 
11
    * License as published by the Free Software Foundation; either          *
 
12
    * version 2 of the License, or (at your option) any later version.      *
 
13
    *                                                                       *
 
14
    *************************************************************************
 
15
*/
 
16
#include "kopetestatuseditaction.h"
 
17
 
 
18
 
 
19
#include <QKeyEvent>
 
20
#include <QMenu>
 
21
 
 
22
#include <kopetestatusmessage.h>
 
23
 
 
24
#include "ui_kopetestatuseditwidget_base.h"
 
25
 
 
26
namespace Kopete
 
27
{
 
28
 
 
29
namespace UI
 
30
{
 
31
 
 
32
StatusEditWidget::StatusEditWidget( QWidget *parent )
 
33
: QWidget( parent )
 
34
, ui( new Ui::KopeteStatusEditWidget )
 
35
{
 
36
        ui->setupUi( this );
 
37
 
 
38
        ui->statusTitle->setClearButtonShown( true );
 
39
        ui->buttonBox->addButton( KGuiItem( i18n( "C&lear" ), "edit-clear" ), QDialogButtonBox::DestructiveRole, this, SLOT(clearClicked()) );
 
40
 
 
41
        setFocusPolicy( Qt::StrongFocus );
 
42
        setFocusProxy( ui->statusTitle );
 
43
 
 
44
        connect( ui->buttonBox, SIGNAL(accepted()), this, SLOT(changeClicked()) );
 
45
}
 
46
 
 
47
StatusEditWidget::~StatusEditWidget()
 
48
{
 
49
        delete ui;
 
50
}
 
51
 
 
52
KDialogButtonBox *StatusEditWidget::buttonBox() const
 
53
{
 
54
        return ui->buttonBox;
 
55
}
 
56
 
 
57
Kopete::StatusMessage StatusEditWidget::statusMessage() const
 
58
{
 
59
        Kopete::StatusMessage statusMessage;
 
60
        statusMessage.setTitle( ui->statusTitle->text() );
 
61
        statusMessage.setMessage( ui->statusMessage->toPlainText() );
 
62
        return statusMessage;
 
63
}
 
64
 
 
65
void StatusEditWidget::setStatusMessage( const Kopete::StatusMessage& statusMessage )
 
66
{
 
67
        ui->statusTitle->setText( statusMessage.title() );
 
68
        ui->statusMessage->setPlainText( statusMessage.message() );
 
69
}
 
70
 
 
71
void StatusEditWidget::changeClicked()
 
72
{
 
73
        emit statusChanged( statusMessage() );
 
74
}
 
75
 
 
76
void StatusEditWidget::clearClicked()
 
77
{
 
78
        setStatusMessage( Kopete::StatusMessage() );
 
79
        emit statusChanged( statusMessage() );
 
80
}
 
81
 
 
82
// FIXME: This should probably be in the action, implemented as an event-filter
 
83
// Prevents menu closing on widget click
 
84
void StatusEditWidget::mouseReleaseEvent( QMouseEvent * )
 
85
{}
 
86
 
 
87
void StatusEditWidget::keyPressEvent( QKeyEvent* event )
 
88
{
 
89
        // Change status on enter key press
 
90
        if ( event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter )
 
91
        {
 
92
                changeClicked();
 
93
                event->accept();
 
94
                return;
 
95
        }
 
96
 
 
97
        QWidget::keyPressEvent( event );
 
98
}
 
99
 
 
100
StatusEditAction::StatusEditAction( QObject *parent )
 
101
: QWidgetAction( parent )
 
102
{
 
103
        mStatusEditWidget = new StatusEditWidget();
 
104
        setDefaultWidget( mStatusEditWidget );
 
105
 
 
106
        connect(mStatusEditWidget, SIGNAL(statusChanged(Kopete::StatusMessage)), SLOT(hideMenu()) );
 
107
        connect(mStatusEditWidget, SIGNAL(statusChanged(Kopete::StatusMessage)), SIGNAL(statusChanged(Kopete::StatusMessage)) );
 
108
}
 
109
 
 
110
Kopete::StatusMessage StatusEditAction::statusMessage() const
 
111
{
 
112
        return mStatusEditWidget->statusMessage();
 
113
}
 
114
 
 
115
void StatusEditAction::setStatusMessage( const Kopete::StatusMessage& statusMessage )
 
116
{
 
117
        mStatusEditWidget->setStatusMessage( statusMessage );
 
118
}
 
119
 
 
120
void StatusEditAction::hideMenu()
 
121
{
 
122
        // Hack to hide menu
 
123
        QMenu* menu = qobject_cast<QMenu*>(mStatusEditWidget->parent());
 
124
        if ( menu )
 
125
        {
 
126
                menu->setActiveAction(this);
 
127
                mStatusEditWidget->parent()->event( new QKeyEvent(QEvent::KeyPress, Qt::Key_Return, Qt::NoModifier)  );
 
128
                mStatusEditWidget->parent()->event( new QKeyEvent(QEvent::KeyRelease, Qt::Key_Return, Qt::NoModifier)  );
 
129
        }
 
130
}
 
131
 
 
132
StatusEditDialog::StatusEditDialog( QWidget *parent )
 
133
: KDialog(parent)
 
134
, mStatusEditWidget( new StatusEditWidget )
 
135
{
 
136
        setMainWidget( mStatusEditWidget );
 
137
        setCaption( i18n("Edit Message") );
 
138
 
 
139
        // We use the buttonbox from the edit widget
 
140
        setButtons(KDialog::None);
 
141
        KDialogButtonBox *buttonBox = mStatusEditWidget->buttonBox();
 
142
        buttonBox->setStandardButtons( buttonBox->standardButtons() | QDialogButtonBox::Cancel );
 
143
        connect(buttonBox, SIGNAL(rejected()), SLOT(reject()) );
 
144
 
 
145
        connect(mStatusEditWidget, SIGNAL(statusChanged(Kopete::StatusMessage)), SLOT(accept()) );
 
146
}
 
147
 
 
148
Kopete::StatusMessage StatusEditDialog::statusMessage() const
 
149
{
 
150
        return mStatusEditWidget->statusMessage();
 
151
}
 
152
 
 
153
void StatusEditDialog::setStatusMessage( const Kopete::StatusMessage& statusMessage )
 
154
{
 
155
        mStatusEditWidget->setStatusMessage( statusMessage );
 
156
}
 
157
 
 
158
 
 
159
}
 
160
 
 
161
}
 
162
 
 
163
#include "kopetestatuseditaction.moc"