2 Situare - A location system for Facebook
\r
3 Copyright (C) 2010 Ixonos Plc. Authors:
\r
5 Katri Kaikkonen - katri.kaikkonen@ixonos.com
\r
6 Henri Lampela - henri.lampela@ixonos.com
\r
8 Situare is free software; you can redistribute it and/or
\r
9 modify it under the terms of the GNU General Public License
\r
10 version 2 as published by the Free Software Foundation.
\r
12 Situare is distributed in the hope that it will be useful,
\r
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
15 GNU General Public License for more details.
\r
17 You should have received a copy of the GNU General Public License
\r
18 along with Situare; if not, write to the Free Software
\r
19 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
\r
23 #include <QApplication>
\r
24 #include <QCheckBox>
\r
26 #include <QDialogButtonBox>
\r
27 #include <QGridLayout>
\r
28 #include <QKeyEvent>
\r
30 #include <QPushButton>
\r
31 #include <QScrollArea>
\r
32 #include <QTextEdit>
\r
34 #include "updatelocationdialog.h"
\r
36 const int MESSAGE_MAX_LENGTH = 255;
\r
38 UpdateLocationDialog::UpdateLocationDialog(const QString &userMessage, bool publishOnFacebook,
\r
42 qDebug() << __PRETTY_FUNCTION__;
\r
44 setWindowTitle(tr("Update Location"));
\r
46 QGridLayout *gridLayout = new QGridLayout();
\r
48 m_textEdit = new QTextEdit();
\r
49 m_textEdit->setAcceptRichText(false);
\r
50 m_charCountLabel = new QLabel();
\r
52 if (userMessage.isEmpty())
\r
54 m_textEdit->setText(tr("Message:"));
\r
55 m_textEdit->selectAll();
\r
56 m_charCountLabel->setNum(MESSAGE_MAX_LENGTH);
\r
58 connect(m_textEdit, SIGNAL(selectionChanged()),
\r
59 this, SLOT(textSelectionChanged()));
\r
63 m_textEdit->setText(userMessage);
\r
64 m_textEdit->document()->setModified(true);
\r
68 QScrollArea *scrollArea = new QScrollArea();
\r
70 QVBoxLayout* scrollAreaLayout = new QVBoxLayout;
\r
71 scrollAreaLayout->setSpacing(0);
\r
72 scrollAreaLayout->setMargin(0);
\r
73 scrollAreaLayout->addWidget(m_textEdit);
\r
75 QWidget* scrollAreaWidget = new QWidget;
\r
76 scrollAreaWidget->setLayout(scrollAreaLayout);
\r
78 scrollArea->setWidget(scrollAreaWidget);
\r
80 scrollArea->setWidgetResizable(true);
\r
81 scrollArea->setFrameShape(QScrollArea::NoFrame);
\r
83 m_locationLabel = new QLabel();
\r
84 m_locationLabel->setWordWrap(true);
\r
85 m_checkBox = new QCheckBox(tr("Publish on Facebook"));
\r
86 m_checkBox->setChecked(publishOnFacebook);
\r
88 QDialogButtonBox *buttonBox = new QDialogButtonBox(Qt::Vertical);
\r
89 QPushButton *sendButton = buttonBox->addButton(QDialogButtonBox::Ok);
\r
90 QPushButton *cancelButton = buttonBox->addButton(QDialogButtonBox::Cancel);
\r
91 sendButton->setText(tr("Send"));
\r
93 gridLayout->addWidget(new QLabel(tr("Location:")), 0, 0, 1, 1, Qt::AlignTop | Qt::AlignLeft);
\r
94 gridLayout->addWidget(m_locationLabel, 0, 1, 1, 3);
\r
95 gridLayout->addWidget(scrollArea, 1, 0, 1, 4);
\r
96 gridLayout->addWidget(m_checkBox, 2, 0, 1, 2);
\r
97 gridLayout->addWidget(m_charCountLabel,2, 2, 1, 1, Qt::AlignCenter);
\r
98 gridLayout->addWidget(buttonBox, 2, 3, 2, 1, Qt::AlignTop);
\r
100 gridLayout->setColumnMinimumWidth(2, 2 * m_charCountLabel->fontMetrics().width(
\r
101 m_charCountLabel->text()));
\r
103 setLayout(gridLayout);
\r
105 const int LAYOUT_COLUMN_ONE_STRETCH = 10;
\r
106 const int LAYOUT_TOP_MARGIN = 15;
\r
107 gridLayout->setColumnStretch(1, LAYOUT_COLUMN_ONE_STRETCH);
\r
109 QMargins layoutMargins = gridLayout->contentsMargins();
\r
110 layoutMargins.setTop(LAYOUT_TOP_MARGIN);
\r
111 gridLayout->setContentsMargins(layoutMargins);
\r
113 connect(sendButton, SIGNAL(clicked()),
\r
114 this, SLOT(sendUpdate()));
\r
116 connect(cancelButton, SIGNAL(clicked()),
\r
117 this, SLOT(reject()));
\r
119 connect(m_textEdit, SIGNAL(textChanged()),
\r
120 this, SLOT(textChanged()));
\r
122 #ifdef Q_WS_MAEMO_5
\r
123 if (QAbstractKineticScroller *scroller = scrollArea->property("kineticScroller").value<
\r
124 QAbstractKineticScroller *>()) {
\r
125 scroller->setOvershootPolicy(QAbstractKineticScroller::OvershootAlwaysOff);
\r
128 new TextEditAutoResizer(m_textEdit);
\r
129 setAttribute(Qt::WA_Maemo5StackedWindow);
\r
130 setWindowFlags(Qt::Window);
\r
133 m_textEdit->setFocus(Qt::OtherFocusReason);
\r
136 UpdateLocationDialog::~UpdateLocationDialog()
\r
138 qDebug() << __PRETTY_FUNCTION__;
\r
141 void UpdateLocationDialog::setAddress(const QString &address)
\r
143 qDebug() << __PRETTY_FUNCTION__;
\r
145 m_locationLabel->setText(address);
\r
148 void UpdateLocationDialog::sendUpdate()
\r
150 qDebug() << __PRETTY_FUNCTION__;
\r
152 // coordinates for this call will be get from somewhere, map etc...
\r
153 emit statusUpdate(m_textEdit->document()->isModified() ? m_textEdit->toPlainText() : QString(),
\r
154 m_checkBox->isChecked());
\r
159 void UpdateLocationDialog::textChanged()
\r
161 qDebug() << __PRETTY_FUNCTION__;
\r
163 QString msgText = m_textEdit->toPlainText().toUtf8();
\r
165 if (msgText.length() > MESSAGE_MAX_LENGTH) {
\r
166 QKeyEvent event = QKeyEvent(QEvent::KeyPress, Qt::Key_Backspace, Qt::NoModifier);
\r
167 QApplication::sendEvent(m_textEdit, &event);
\r
170 m_charCountLabel->setNum(MESSAGE_MAX_LENGTH - m_textEdit->toPlainText().toUtf8().length());
\r
173 void UpdateLocationDialog::textSelectionChanged()
\r
175 qDebug() << __PRETTY_FUNCTION__;
\r
177 if (!m_textEdit->document()->isModified())
\r
179 m_textEdit->clear();
\r
181 disconnect(m_textEdit, SIGNAL(selectionChanged()), this, SLOT(textSelectionChanged()));
\r