diff --git a/commandwidget.cpp b/commandwidget.cpp
new file mode 100644
--- /dev/null
+++ b/commandwidget.cpp
@@ -0,0 +1,95 @@
+/*
+ Copyright © 2015 Hasan Yavuz Özderya
+
+ This file is part of serialplot.
+
+ serialplot is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ serialplot is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with serialplot. If not, see .
+*/
+
+#include "commandwidget.h"
+#include "ui_commandwidget.h"
+
+#include
+#include
+#include
+#include
+
+CommandWidget::CommandWidget(QWidget *parent) :
+ QWidget(parent),
+ ui(new Ui::CommandWidget)
+{
+ ui->setupUi(this);
+
+#ifdef Q_OS_WIN
+ ui->pbDelete->setIcon(QIcon(":/icons/list-remove"));
+#endif // Q_OS_WIN
+
+ connect(ui->pbDelete, &QPushButton::clicked, this, &CommandWidget::onDeleteClicked);
+ connect(ui->pbSend, &QPushButton::clicked, this, &CommandWidget::onSendClicked);
+ connect(ui->pbASCII, &QPushButton::toggled, this, &CommandWidget::onASCIIToggled);
+}
+
+CommandWidget::~CommandWidget()
+{
+ delete ui;
+}
+
+void CommandWidget::onDeleteClicked()
+{
+ this->deleteLater();
+}
+
+void CommandWidget::onSendClicked()
+{
+ auto command = ui->leCommand->text();
+
+ if (command.isEmpty())
+ {
+ qWarning() << "Enter a command to send!";
+ ui->leCommand->setFocus(Qt::OtherFocusReason);
+ return;
+ }
+
+ if (isASCIIMode())
+ {
+ qDebug() << "Sending:" << command;
+ emit sendCommand(ui->leCommand->unEscapedText().toLatin1());
+ }
+ else // hex mode
+ {
+ command = command.remove(' ');
+ // check if nibbles are missing
+ if (command.size() % 2 == 1)
+ {
+ qWarning() << "HEX command is missing a nibble at the end!";
+ ui->leCommand->setFocus(Qt::OtherFocusReason);
+ // highlight the byte that is missing a nibble (last byte obviously)
+ int textSize = ui->leCommand->text().size();
+ ui->leCommand->setSelection(textSize-1, textSize);
+ return;
+ }
+ qDebug() << "Sending HEX:" << command;
+ emit sendCommand(QByteArray::fromHex(command.toLatin1()));
+ }
+}
+
+void CommandWidget::onASCIIToggled(bool checked)
+{
+ ui->leCommand->setMode(checked);
+}
+
+bool CommandWidget::isASCIIMode()
+{
+ return ui->pbASCII->isChecked();
+}