summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/unsupported/gsmtool/gsmtool.cpp129
-rw-r--r--noncore/unsupported/gsmtool/gsmtool.h9
-rw-r--r--noncore/unsupported/gsmtool/gsmtoolbase.ui179
3 files changed, 278 insertions, 39 deletions
diff --git a/noncore/unsupported/gsmtool/gsmtool.cpp b/noncore/unsupported/gsmtool/gsmtool.cpp
index 8273461..6fea596 100644
--- a/noncore/unsupported/gsmtool/gsmtool.cpp
+++ b/noncore/unsupported/gsmtool/gsmtool.cpp
@@ -18,32 +18,37 @@
using namespace gsmlib;
/*
* Constructs a GSMTool which is a child of 'parent', with the
* name 'name' and widget flags set to 'f'
*/
GSMTool::GSMTool( QWidget* parent, const char* name, WFlags fl )
: GSMToolBase( parent, name, fl )
{
devicelocked = 0;
me = NULL;
sms_store = NULL;
setConnected(FALSE);
/* FIXME: Persistent settings for device/baudrate */
connect(ConnectButton, SIGNAL(clicked()), this, SLOT(doConnectButton()));
+ connect(SMSDeleteButton, SIGNAL(clicked()), this, SLOT(doSMSDeleteButton()));
+ connect(SMSSendButton, SIGNAL(clicked()), this, SLOT(doSMSSendButton()));
+ connect(NewSMSClearButton, SIGNAL(clicked()), this, SLOT(doNewSMSClearButton()));
+ connect(NewSMSSaveButton, SIGNAL(clicked()), this, SLOT(doNewSMSSaveButton()));
+ connect(NewSMSSendButton, SIGNAL(clicked()), this, SLOT(doNewSMSSendButton()));
connect(ScanButton, SIGNAL(clicked()), this, SLOT(doScanButton()));
connect(TabWidget2, SIGNAL(currentChanged(QWidget *)), this, SLOT(doTabChanged()));
connect(SMSStoreList, SIGNAL(activated(int)), this, SLOT(doSMSStoreChanged()));
connect(SMSViewType, SIGNAL(activated(int)), this, SLOT(doSMSTypeChanged()));
connect(SMSList, SIGNAL(selectionChanged(QListViewItem *)), this, SLOT(doSelectedSMSChanged(QListViewItem *)));
timerid = -1; // Is this not possible normally?
}
/*
* Destroys the object and frees any allocated resources
*/
GSMTool::~GSMTool()
{
// no need to delete child widgets, Qt does it all for us
if (devicelocked)
unlockDevice();
@@ -56,32 +61,33 @@ const speed_t GSMTool::baudrates[12] = {
int GSMTool::lockDevice( )
{
devicelocked = 1;
/* FIXME */
return 0;
}
void GSMTool::unlockDevice( )
{
devicelocked = 0;
}
void GSMTool::setConnected( bool conn )
{
TabWidget2->setTabEnabled(tab_2, conn);
TabWidget2->setTabEnabled(tab_3, conn);
+ TabWidget2->setTabEnabled(tab_4, conn);
MfrLabel->setEnabled(conn);
MfrText->setEnabled(conn);
ModelLabel->setEnabled(conn);
ModelText->setEnabled(conn);
RevisionLabel->setEnabled(conn);
RevisionText->setEnabled(conn);
SerialLabel->setEnabled(conn);
SerialText->setEnabled(conn);
}
void GSMTool::doTabChanged()
{
int index = TabWidget2->currentPageIndex();
qDebug("tab changed to %d", index);
if (index == 1) {
@@ -131,103 +137,208 @@ void GSMTool::timerEvent( QTimerEvent * )
char buf[6];
sprintf(buf, "%d", -113 + (2*csq));
SigStrText->setText(buf);
dB->setEnabled(TRUE);
SigStrLabel->setEnabled(TRUE);
}
}
}
void GSMTool::doSMSStoreChanged()
{
const char *storename = SMSStoreList->currentText().ascii();
qDebug("Store Changed to '%s'", storename);
if (!strcmp(storename, "None")) {
sms_store = NULL;
} else try {
- sms_store = me->getSMSStore(storename);
+ sms_store = new SortedSMSStore(me->getSMSStore(storename));
+ sms_store->setSortOrder(ByIndex);
qDebug("got store of size %d", sms_store->size());
} catch (GsmException) {
sms_store = NULL;
qDebug("get store failed");
}
SMSList->setEnabled(!(sms_store == NULL));
+ NewSMSSaveButton->setEnabled(!(sms_store == NULL));
doSMSTypeChanged();
}
void GSMTool::doSMSTypeChanged()
{
int direction = SMSViewType->currentItem();
qDebug("direction %s\n", direction?"outgoing":"incoming");
+ if (direction)
+ SMSSendButton->setText("Send");
+ else
+ SMSSendButton->setText("Reply");
SMSList->clear();
doSelectedSMSChanged(NULL);
if (sms_store == NULL)
return;
- for (int i = 0; i < sms_store->size(); i++) {
- qDebug("Message %d", i);
- qDebug("Is%sempty", sms_store()[i].empty()?" ":" not ");
- if (sms_store()[i].empty())
+ for (SortedSMSStore::iterator e = sms_store->begin();
+ e != sms_store->end(); e++) {
+ // qDebug("Message %d", i);
+ qDebug("Is%sempty", e->empty()?" ":" not ");
+ if (e->empty())
continue;
- qDebug("Status %d", sms_store()[i].status());
- SMSMessageRef message = sms_store()[i].message();
+ qDebug("Status %d", e->status());
+ SMSMessageRef message = e->message();
qDebug("Got message.");
// qDebug(message->toString().c_str());
if (direction == message->messageType()) {
qDebug("yes\n");
char buf[3];
- snprintf(buf, 3, "%d", i);
+ snprintf(buf, 3, "%d", e->index());
new QListViewItem(SMSList, message->address()._number.c_str(), message->serviceCentreTimestamp().toString().c_str(), buf);
}
}
}
void GSMTool::doSelectedSMSChanged(QListViewItem *item)
{
qDebug("message changed\n");
if (!item || sms_store == NULL) {
SMSText->setText("");
SMSText->setEnabled(FALSE);
SMSDeleteButton->setEnabled(FALSE);
SMSSendButton->setEnabled(FALSE);
return;
}
/* ARGH. This sucks. Surely there's an app-private pointer in the
QListViewItem that I've failed to notice?
SMSMessageRef message = *(SMSMessageRef*)item->private;
*/
qDebug("item %p\n", item);
qDebug("text(2) is %s\n", item->text(2).ascii());
int index = atoi(item->text(2).ascii());
qDebug("index %d\n", index);
- SMSMessageRef message = sms_store()[index].message();
+ SMSMessageRef message = sms_store->find(index)->message();
SMSText->setText(message->userData().c_str());
SMSText->setEnabled(TRUE);
SMSDeleteButton->setEnabled(TRUE);
SMSSendButton->setEnabled(TRUE);
}
+
+void GSMTool::doSMSSendButton()
+{
+ qDebug("SMSSendButton");
+
+ QListViewItem *item = SMSList->currentItem();
+ if (!item)
+ return;
+
+ int index = atoi(item->text(2).ascii());
+ qDebug("index %d\n", index);
+
+ int direction = SMSViewType->currentItem();
+ qDebug("direction %s\n", direction?"outgoing":"incoming");
+
+ SMSMessageRef message = sms_store->find(index)->message();
+
+ if (direction)
+ NewSMSText->setText(message->userData().c_str());
+ else
+ NewSMSText->setText("");
+ NewSMSToBox->insertItem(message->address()._number.c_str(), 0);
+ TabWidget2->setCurrentPage(3);
+
+}
+
+void GSMTool::doNewSMSClearButton()
+{
+ NewSMSText->setText("");
+}
+
+void GSMTool::doNewSMSSaveButton()
+{
+ qDebug("NewSMSSaveButton");
+ const char *msgtext = strdup(NewSMSText->text().local8Bit());
+ const char *dest = NewSMSToBox->currentText().ascii();
+
+ NewSMSStatusLabel->setText("Sending...");
+ me->setMessageService(1);
+
+ qDebug("NewSMSSendButton: '%s' to '%s'", msgtext, dest);
+
+ SMSMessageRef m = new SMSSubmitMessage (msgtext, dest);
+ sms_store->insert(m);
+ free((void *)msgtext);
+
+}
+void GSMTool::doNewSMSSendButton()
+{
+ const char *msgtext = strdup(NewSMSText->text().local8Bit());
+ const char *dest = NewSMSToBox->currentText().ascii();
+
+ NewSMSStatusLabel->setText("Sending...");
+ me->setMessageService(1);
+
+ qDebug("NewSMSSendButton: '%s' to '%s'", msgtext, dest);
+
+ SMSSubmitMessage m(msgtext, dest);
+ try {
+ Ref<SMSMessage> ackPDU;
+ m.setAt(new GsmAt(*me));
+ m.send(ackPDU);
+
+ // print acknowledgement if available
+ if (! ackPDU.isnull())
+ cout << ackPDU->toString();
+ NewSMSStatusLabel->setText("Message sent.");
+ } catch (GsmException &ge) {
+ NewSMSStatusLabel->setText("Failed.");
+ qDebug(ge.what());
+ }
+ free((void *)msgtext);
+
+
+}
+
+
+void GSMTool::doSMSDeleteButton()
+{
+ QListViewItem *item = SMSList->currentItem();
+ if (!item)
+ return;
+
+ int index = atoi(item->text(2).ascii());
+ qDebug("delete SMS with index %d\n", index);
+
+
+
+ SortedSMSStore::iterator e = sms_store->find(index);
+
+ if (e != sms_store->end()) {
+ qDebug("message is %s\n", e->message()->userData().c_str());
+ sms_store->erase(e);
+
+ }
+ doSMSTypeChanged();
+}
+
void GSMTool::doScanButton()
{
qDebug("ScanButton");
NetworkList->setEnabled(FALSE);
AvailNetsLabel->setEnabled(FALSE);
NetworkList->clear();
new QListViewItem(NetworkList, "Scanning...");
vector<OPInfo> opis;
try {
opis = me->getAvailableOPInfo();
} catch (GsmException) {
NetworkList->clear();
new QListViewItem(NetworkList, "Scan failed...");
diff --git a/noncore/unsupported/gsmtool/gsmtool.h b/noncore/unsupported/gsmtool/gsmtool.h
index b8d9a86..b38ff88 100644
--- a/noncore/unsupported/gsmtool/gsmtool.h
+++ b/noncore/unsupported/gsmtool/gsmtool.h
@@ -1,45 +1,50 @@
#ifndef EXAMPLE_H
#define EXAMPLE_H
#include "gsmtoolbase.h"
#include <termios.h>
#include <gsmlib/gsm_me_ta.h>
+#include <gsmlib/gsm_sorted_sms_store.h>
class GSMTool : public GSMToolBase
{
Q_OBJECT
public:
GSMTool( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
~GSMTool();
protected:
void timerEvent(QTimerEvent *te );
private slots:
void doConnectButton();
void doScanButton();
void doTabChanged();
void doSMSStoreChanged();
void doSMSTypeChanged();
void doSelectedSMSChanged(QListViewItem *);
-
+ void doSMSSendButton();
+ void doSMSDeleteButton();
+ void doNewSMSClearButton();
+ void doNewSMSSaveButton();
+ void doNewSMSSendButton();
private:
static const speed_t baudrates[];
int devicelocked;
int timerid;
gsmlib::MeTa *me;
- gsmlib::SMSStoreRef sms_store;
+ gsmlib::SortedSMSStoreRef sms_store;
char *devicename;
speed_t baudrate;
int lockDevice( );
void unlockDevice( );
void setConnected( bool conn );
};
#endif // EXAMPLE_H
diff --git a/noncore/unsupported/gsmtool/gsmtoolbase.ui b/noncore/unsupported/gsmtool/gsmtoolbase.ui
index 2cca852..65e75ec 100644
--- a/noncore/unsupported/gsmtool/gsmtoolbase.ui
+++ b/noncore/unsupported/gsmtool/gsmtoolbase.ui
@@ -1,53 +1,53 @@
<!DOCTYPE UI><UI>
<class>GSMToolBase</class>
<widget>
<class>QWidget</class>
<property stdset="1">
<name>name</name>
<cstring>GSM Tool</cstring>
</property>
<property stdset="1">
<name>geometry</name>
<rect>
<x>0</x>
<y>0</y>
- <width>371</width>
+ <width>404</width>
<height>390</height>
</rect>
</property>
<property stdset="1">
<name>caption</name>
<string>GSM Tool</string>
</property>
<property>
<name>layoutMargin</name>
</property>
<property>
<name>layoutSpacing</name>
</property>
- <vbox>
+ <grid>
<property stdset="1">
<name>margin</name>
<number>2</number>
</property>
<property stdset="1">
<name>spacing</name>
<number>1</number>
</property>
- <widget>
+ <widget row="0" column="0" >
<class>QTabWidget</class>
<property stdset="1">
<name>name</name>
<cstring>TabWidget2</cstring>
</property>
<property stdset="1">
<name>sizePolicy</name>
<sizepolicy>
<hsizetype>7</hsizetype>
<vsizetype>7</vsizetype>
</sizepolicy>
</property>
<property stdset="1">
<name>focusPolicy</name>
<enum>NoFocus</enum>
</property>
@@ -106,32 +106,36 @@
<name>text</name>
<string>/dev/ttyS0</string>
</property>
</item>
<property stdset="1">
<name>name</name>
<cstring>DeviceName</cstring>
</property>
<property stdset="1">
<name>editable</name>
<bool>true</bool>
</property>
<property stdset="1">
<name>currentItem</name>
<number>0</number>
</property>
+ <property stdset="1">
+ <name>duplicatesEnabled</name>
+ <bool>false</bool>
+ </property>
</widget>
<widget>
<class>QLabel</class>
<property stdset="1">
<name>name</name>
<cstring>BaudLabel</cstring>
</property>
<property stdset="1">
<name>text</name>
<string>Baud Rate:</string>
</property>
</widget>
<widget>
<class>QLayoutWidget</class>
<property stdset="1">
<name>name</name>
@@ -733,39 +737,39 @@
</widget>
</vbox>
</widget>
<widget>
<class>QWidget</class>
<property stdset="1">
<name>name</name>
<cstring>tab</cstring>
</property>
<attribute>
<name>title</name>
<string>SMS</string>
</attribute>
<grid>
<property stdset="1">
<name>margin</name>
- <number>-1</number>
+ <number>2</number>
</property>
<property stdset="1">
<name>spacing</name>
- <number>-1</number>
+ <number>1</number>
</property>
- <widget row="0" column="0" >
+ <widget row="0" column="0" rowspan="1" colspan="3" >
<class>QLayoutWidget</class>
<property stdset="1">
<name>name</name>
<cstring>Layout6</cstring>
</property>
<property>
<name>layoutSpacing</name>
</property>
<hbox>
<property stdset="1">
<name>margin</name>
<number>0</number>
</property>
<property stdset="1">
<name>spacing</name>
<number>6</number>
@@ -817,33 +821,33 @@
<string>Incoming</string>
</property>
</item>
<item>
<property>
<name>text</name>
<string>Outgoing</string>
</property>
</item>
<property stdset="1">
<name>name</name>
<cstring>SMSViewType</cstring>
</property>
</widget>
</hbox>
</widget>
- <widget row="1" column="0" >
+ <widget row="1" column="0" rowspan="1" colspan="3" >
<class>QListView</class>
<column>
<property>
<name>text</name>
<string>Number</string>
</property>
<property>
<name>clickable</name>
<bool>true</bool>
</property>
<property>
<name>resizeable</name>
<bool>true</bool>
</property>
</column>
<column>
@@ -860,98 +864,217 @@
<bool>true</bool>
</property>
</column>
<property stdset="1">
<name>name</name>
<cstring>SMSList</cstring>
</property>
<property stdset="1">
<name>enabled</name>
<bool>false</bool>
</property>
<property stdset="1">
<name>allColumnsShowFocus</name>
<bool>true</bool>
</property>
</widget>
- <widget row="2" column="0" >
- <class>QLayoutWidget</class>
+ <widget row="3" column="0" rowspan="1" colspan="3" >
+ <class>QMultiLineEdit</class>
<property stdset="1">
<name>name</name>
- <cstring>Layout15</cstring>
- </property>
- <property>
- <name>layoutMargin</name>
+ <cstring>SMSText</cstring>
</property>
- <hbox>
<property stdset="1">
- <name>margin</name>
- <number>0</number>
+ <name>enabled</name>
+ <bool>false</bool>
</property>
<property stdset="1">
- <name>spacing</name>
+ <name>hMargin</name>
<number>1</number>
</property>
- <widget>
+ <property stdset="1">
+ <name>wordWrap</name>
+ <enum>WidgetWidth</enum>
+ </property>
+ <property stdset="1">
+ <name>readOnly</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget row="2" column="0" >
<class>QPushButton</class>
<property stdset="1">
<name>name</name>
<cstring>SMSDeleteButton</cstring>
</property>
<property stdset="1">
<name>text</name>
<string>Delete</string>
</property>
</widget>
- <widget>
+ <widget row="2" column="2" >
<class>QPushButton</class>
<property stdset="1">
<name>name</name>
<cstring>SMSSendButton</cstring>
</property>
<property stdset="1">
<name>text</name>
<string>Send</string>
</property>
</widget>
+ <spacer row="2" column="1" >
+ <property>
+ <name>name</name>
+ <cstring>Spacer6_2</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Horizontal</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
<widget>
- <class>QPushButton</class>
+ <class>QWidget</class>
<property stdset="1">
<name>name</name>
- <cstring>SMSNewButton</cstring>
+ <cstring>tab</cstring>
+ </property>
+ <attribute>
+ <name>title</name>
+ <string>New</string>
+ </attribute>
+ <grid>
+ <property stdset="1">
+ <name>margin</name>
+ <number>2</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>1</number>
+ </property>
+ <widget row="0" column="0" rowspan="1" colspan="3" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>NewSMSMessageLabel</cstring>
</property>
<property stdset="1">
<name>text</name>
- <string>New</string>
+ <string>Message:</string>
</property>
</widget>
- </hbox>
- </widget>
<widget row="3" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>NewSMSToLabel</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>To:</string>
+ </property>
+ </widget>
+ <widget row="3" column="1" rowspan="1" colspan="4" >
+ <class>QComboBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>NewSMSToBox</cstring>
+ </property>
+ <property stdset="1">
+ <name>editable</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>duplicatesEnabled</name>
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget row="1" column="0" rowspan="1" colspan="5" >
<class>QMultiLineEdit</class>
<property stdset="1">
<name>name</name>
- <cstring>SMSText</cstring>
+ <cstring>NewSMSText</cstring>
</property>
<property stdset="1">
<name>enabled</name>
- <bool>false</bool>
+ <bool>true</bool>
</property>
<property stdset="1">
<name>hMargin</name>
<number>1</number>
</property>
<property stdset="1">
<name>wordWrap</name>
<enum>WidgetWidth</enum>
</property>
<property stdset="1">
<name>readOnly</name>
- <bool>true</bool>
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget row="4" column="4" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>NewSMSSendButton</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Send</string>
+ </property>
+ </widget>
+ <widget row="0" column="3" rowspan="1" colspan="2" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>NewSMSStatusLabel</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string></string>
+ </property>
+ </widget>
+ <widget row="4" column="2" rowspan="1" colspan="2" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>NewSMSSaveButton</cstring>
+ </property>
+ <property stdset="1">
+ <name>enabled</name>
+ <bool>false</bool>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Save</string>
+ </property>
+ </widget>
+ <widget row="4" column="0" rowspan="1" colspan="2" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>NewSMSClearButton</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Clear</string>
</property>
</widget>
</grid>
</widget>
</widget>
- </vbox>
+ </grid>
</widget>
</UI>