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_charCountLabel = new QLabel();
\r
51 if (userMessage.isEmpty())
\r
53 m_textEdit->setText(tr("Message:"));
\r
54 m_textEdit->selectAll();
\r
55 m_charCountLabel->setNum(MESSAGE_MAX_LENGTH);
\r
57 connect(m_textEdit, SIGNAL(selectionChanged()),
\r
58 this, SLOT(textSelectionChanged()));
\r
62 m_textEdit->setText(userMessage);
\r
63 m_textEdit->document()->setModified(true);
\r
67 QScrollArea *scrollArea = new QScrollArea();
\r
69 QVBoxLayout* scrollAreaLayout = new QVBoxLayout;
\r
70 scrollAreaLayout->setSpacing(0);
\r
71 scrollAreaLayout->setMargin(0);
\r
72 scrollAreaLayout->addWidget(m_textEdit);
\r
74 QWidget* scrollAreaWidget = new QWidget;
\r
75 scrollAreaWidget->setLayout(scrollAreaLayout);
\r
77 scrollArea->setWidget(scrollAreaWidget);
\r
79 scrollArea->setWidgetResizable(true);
\r
80 scrollArea->setFrameShape(QScrollArea::NoFrame);
\r
82 m_locationLabel = new QLabel();
\r
83 m_locationLabel->setWordWrap(true);
\r
84 m_checkBox = new QCheckBox(tr("Publish on Facebook"));
\r
85 m_checkBox->setChecked(publishOnFacebook);
\r
87 QDialogButtonBox *buttonBox = new QDialogButtonBox(Qt::Vertical);
\r
88 QPushButton *sendButton = buttonBox->addButton(QDialogButtonBox::Ok);
\r
89 QPushButton *cancelButton = buttonBox->addButton(QDialogButtonBox::Cancel);
\r
90 sendButton->setText(tr("Send"));
\r
92 gridLayout->addWidget(new QLabel(tr("Location:")), 0, 0, 1, 1, Qt::AlignTop | Qt::AlignLeft);
\r
93 gridLayout->addWidget(m_locationLabel, 0, 1, 1, 3);
\r
94 gridLayout->addWidget(scrollArea, 1, 0, 1, 4);
\r
95 gridLayout->addWidget(m_checkBox, 2, 0, 1, 2);
\r
96 gridLayout->addWidget(m_charCountLabel,2, 2, 1, 1, Qt::AlignCenter);
\r
97 gridLayout->addWidget(buttonBox, 2, 3, 2, 1, Qt::AlignTop);
\r
99 gridLayout->setColumnMinimumWidth(2, 2 * m_charCountLabel->fontMetrics().width(
\r
100 m_charCountLabel->text()));
\r
102 setLayout(gridLayout);
\r
104 const int LAYOUT_COLUMN_ONE_STRETCH = 10;
\r
105 const int LAYOUT_TOP_MARGIN = 15;
\r
106 gridLayout->setColumnStretch(1, LAYOUT_COLUMN_ONE_STRETCH);
\r
108 QMargins layoutMargins = gridLayout->contentsMargins();
\r
109 layoutMargins.setTop(LAYOUT_TOP_MARGIN);
\r
110 gridLayout->setContentsMargins(layoutMargins);
\r
112 connect(sendButton, SIGNAL(clicked()),
\r
113 this, SLOT(sendUpdate()));
\r
115 connect(cancelButton, SIGNAL(clicked()),
\r
116 this, SLOT(reject()));
\r
118 connect(m_textEdit, SIGNAL(textChanged()),
\r
119 this, SLOT(textChanged()));
\r
121 #ifdef Q_WS_MAEMO_5
\r
122 if (QAbstractKineticScroller *scroller = scrollArea->property("kineticScroller").value<
\r
123 QAbstractKineticScroller *>()) {
\r
124 scroller->setOvershootPolicy(QAbstractKineticScroller::OvershootAlwaysOff);
\r
127 new TextEditAutoResizer(m_textEdit);
\r
128 setAttribute(Qt::WA_Maemo5StackedWindow);
\r
129 setWindowFlags(Qt::Window);
\r
132 m_textEdit->setFocus(Qt::OtherFocusReason);
\r
135 UpdateLocationDialog::~UpdateLocationDialog()
\r
137 qDebug() << __PRETTY_FUNCTION__;
\r
140 void UpdateLocationDialog::setAddress(const QString &address)
\r
142 qDebug() << __PRETTY_FUNCTION__;
\r
144 m_locationLabel->setText(address);
\r
147 void UpdateLocationDialog::sendUpdate()
\r
149 qDebug() << __PRETTY_FUNCTION__;
\r
151 // coordinates for this call will be get from somewhere, map etc...
\r
152 emit statusUpdate(m_textEdit->document()->isModified() ? m_textEdit->toPlainText() : QString(),
\r
153 m_checkBox->isChecked());
\r
158 void UpdateLocationDialog::textChanged()
\r
160 qDebug() << __PRETTY_FUNCTION__;
\r
162 QString msgText = m_textEdit->toPlainText().toUtf8();
\r
164 if (msgText.length() > MESSAGE_MAX_LENGTH) {
\r
165 QKeyEvent event = QKeyEvent(QEvent::KeyPress, Qt::Key_Backspace, Qt::NoModifier);
\r
166 QApplication::sendEvent(m_textEdit, &event);
\r
169 m_charCountLabel->setNum(MESSAGE_MAX_LENGTH - m_textEdit->toPlainText().toUtf8().length());
\r
172 void UpdateLocationDialog::textSelectionChanged()
\r
174 qDebug() << __PRETTY_FUNCTION__;
\r
176 if (!m_textEdit->document()->isModified())
\r
178 m_textEdit->clear();
\r
180 disconnect(m_textEdit, SIGNAL(selectionChanged()), this, SLOT(textSelectionChanged()));
\r