Added a simple "TextEditor" in the graph, for a plan mode.

Added a simple TextEditor in the graph for the 'Dive Plan' mode,
this text editor is very simple, so the user can double click on
'depth' or 'duration' to set the depth or duration of the dive.
Since this was a test, only 'duration' was done, and I'll add
duration on the next commit.

Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
This commit is contained in:
Tomaz Canabrava 2013-06-10 19:02:06 -03:00 committed by Dirk Hohndel
parent b4835badb6
commit 939246acda
3 changed files with 57 additions and 2 deletions

View file

@ -47,7 +47,6 @@ MainWindow::MainWindow() : ui(new Ui::MainWindow()), helpView(0)
connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), ui->ListWidget, SLOT(reloadHeaderActions()));
connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), ui->ProfileWidget, SLOT(refresh()));
ui->mainErrorMessage->hide();
ui->ProfileWidget->setFocusProxy(ui->ListWidget);
ui->ListWidget->reload(DiveTripModel::TREE);
initialUiSetup();
readSettings();

View file

@ -1,4 +1,6 @@
#include "profilegraphics.h"
#include "mainwindow.h"
#include "divelistview.h"
#include <QGraphicsScene>
#include <QResizeEvent>
@ -12,6 +14,7 @@
#include <QPropertyAnimation>
#include <QGraphicsSceneHoverEvent>
#include <QMouseEvent>
#include <qtextdocument.h>
#include "../color.h"
#include "../display.h"
@ -255,6 +258,8 @@ void ProfileGraphicsView::plot(struct dive *d, bool forceRedraw)
return;
}
// best place to put the focus stealer code.
setFocusProxy(mainWindow()->dive_list());
scene()->setSceneRect(0,0, viewport()->width()-50, viewport()->height()-50);
toolTip = new ToolTipItem();
@ -330,12 +335,18 @@ void ProfileGraphicsView::plot(struct dive *d, bool forceRedraw)
// The Time ruler should be right after the DiveComputer:
timeMarkers->setPos(0, diveComputer->y());
if(mode == PLAN){
timeEditor = new GraphicsTextEditor();
timeEditor->setPlainText(" Set Duration: 10 minutes");
timeEditor->setPos(profile_grid_area.width() + timeMarkers->boundingRect().width(), timeMarkers->y());
timeEditor->document();
scene()->addItem(timeEditor);
}
if (PP_GRAPHS_ENABLED) {
plot_pp_gas_profile();
plot_pp_text();
}
/* now shift the translation back by half the margin;
* this way we can draw the vertical scales on both sides */
//cairo_translate(gc->cr, -drawing_area->x / 2.0, 0);
@ -1481,3 +1492,27 @@ EventItem::EventItem(QGraphicsItem* parent): QGraphicsPolygonItem(parent)
ball->setBrush(QBrush(Qt::black));
}
GraphicsTextEditor::GraphicsTextEditor(QGraphicsItem* parent): QGraphicsTextItem(parent)
{
}
void GraphicsTextEditor::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event)
{
// Remove the proxy filter so we can focus here.
mainWindow()->graphics()->setFocusProxy(0);
setTextInteractionFlags(Qt::TextEditorInteraction | Qt::TextEditable);
}
void GraphicsTextEditor::keyReleaseEvent(QKeyEvent* event)
{
if (event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return){
setTextInteractionFlags(Qt::NoTextInteraction);
emit editingFinished( toPlainText() );
mainWindow()->graphics()->setFocusProxy(mainWindow()->dive_list());
return;
}
emit textChanged( toPlainText() );
QGraphicsTextItem::keyReleaseEvent(event);
}

View file

@ -5,6 +5,9 @@
#include <QGraphicsView>
#include <QGraphicsItem>
#include <QIcon>
#include <QDoubleSpinBox>
#include <QPushButton>
#include <QGraphicsProxyWidget>
struct text_render_options;
struct graphics_context;
@ -64,6 +67,20 @@ private:
QIcon icon;
};
class GraphicsTextEditor : public QGraphicsTextItem{
Q_OBJECT
public:
GraphicsTextEditor(QGraphicsItem* parent = 0);
protected:
virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event);
virtual void keyReleaseEvent(QKeyEvent* event);
signals:
void textChanged(const QString& text);
void editingFinished(const QString& text);
};
class ProfileGraphicsView : public QGraphicsView
{
Q_OBJECT
@ -120,6 +137,10 @@ private:
QGraphicsItem* depthMarkers;
QGraphicsItem* diveComputer;
// For 'Plan' mode.:
GraphicsTextEditor *depthEditor;
GraphicsTextEditor *timeEditor;
enum Mode mode;
};