1 /***************************************************************************
2 rkeditordataframe - description
3 -------------------
4 begin : Fri Aug 20 2004
5 copyright : (C) 2004, 2006, 2010 by Thomas Friedrichsmeier
6 email : thomas.friedrichsmeier@kdemail.net
7 ***************************************************************************/
8
9 /***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17 #include "rkeditordataframe.h"
18
19 #include <kmessagebox.h>
20 #include <KLocalizedString>
21
22 #include "../rbackend/rkrinterface.h"
23 #include "../rkglobals.h"
24 #include "twintable.h"
25 #include "twintablemember.h"
26 #include "rkvareditmodel.h"
27 #include "../core/robject.h"
28 #include "../core/robjectlist.h"
29 #include "../core/renvironmentobject.h"
30 #include "../core/rcontainerobject.h"
31 #include "../misc/rkdummypart.h"
32 #include "../windows/rkworkplace.h"
33
34 #include "../debug.h"
35
36 #define LOAD_COMPLETE_COMMAND 1
37 // warning! numbers above GET_DATA_OFFSET are used to determine, which row, the data should go to!
38 #define GET_DATA_OFFSET 10
39
RKEditorDataFrame(RContainerObject * object,QWidget * parent)40 RKEditorDataFrame::RKEditorDataFrame (RContainerObject* object, QWidget *parent) : TwinTable (parent) {
41 RK_TRACE (EDITOR);
42
43 commonInit ();
44
45 RK_ASSERT (!object->isPending ());
46 RKEditor::object = object;
47 RK_ASSERT (object->isDataFrame ());
48 setGlobalContextProperty ("current_object", object->getFullName());
49
50 RKVarEditDataFrameModel* model = new RKVarEditDataFrameModel (object, this);
51 initTable (model, object);
52 connect (model, &RKVarEditDataFrameModel::modelObjectDestroyed, this, &RKEditorDataFrame::detachModel);
53
54 waitForLoad ();
55 }
56
RKEditorDataFrame(const QString & new_object_name,QWidget * parent)57 RKEditorDataFrame::RKEditorDataFrame (const QString& new_object_name, QWidget* parent) : TwinTable (parent) {
58 RK_TRACE (EDITOR);
59
60 commonInit ();
61
62 QString valid = RObjectList::getGlobalEnv ()->validizeName (new_object_name);
63 if (valid != new_object_name) KMessageBox::sorry (this, i18n ("The name you specified was already in use or not valid. Renamed to %1", valid), i18n ("Invalid Name"));
64
65 RKVarEditDataFrameModel* model = new RKVarEditDataFrameModel (valid, RObjectList::getGlobalEnv (), open_chain, 5, this);
66
67 RKEditor::object = model->getObject ();
68 RK_ASSERT (object->isDataFrame ());
69 setGlobalContextProperty ("current_object", object->getFullName());
70
71 initTable (model, object);
72 connect (model, &RKVarEditDataFrameModel::modelObjectDestroyed, this, &RKEditorDataFrame::deleteLater);
73
74 RKGlobals::rInterface ()->closeChain (open_chain);
75 }
76
commonInit()77 void RKEditorDataFrame::commonInit () {
78 RK_TRACE (EDITOR);
79
80 setPart (new RKDummyPart (this, this));
81 getPart ()->insertChildClient (this);
82 initializeActivationSignals ();
83
84 open_chain = RKGlobals::rInterface ()->startChain (0);
85 }
86
~RKEditorDataFrame()87 RKEditorDataFrame::~RKEditorDataFrame () {
88 RK_TRACE (EDITOR);
89 }
90
detachModel()91 void RKEditorDataFrame::detachModel () {
92 RK_TRACE (EDITOR);
93
94 dataview->setRKModel (0);
95 metaview->setRKModel (0);
96 deleteLater ();
97 }
98
flushChanges()99 void RKEditorDataFrame::flushChanges () {
100 RK_TRACE (EDITOR);
101 flushEdit ();
102 }
103
waitForLoad()104 void RKEditorDataFrame::waitForLoad () {
105 RK_TRACE (EDITOR);
106 flushEdit ();
107
108 enableEditing (false);
109
110 RCommand *command = new RCommand (QString (), RCommand::EmptyCommand | RCommand::Sync | RCommand::GetStringVector, QString (), this, LOAD_COMPLETE_COMMAND);
111 RKGlobals::rInterface ()->issueCommand (command, open_chain);
112 }
113
rCommandDone(RCommand * command)114 void RKEditorDataFrame::rCommandDone (RCommand *command) {
115 RK_TRACE (EDITOR);
116
117 if (command->getFlags () == LOAD_COMPLETE_COMMAND) {
118 RKGlobals::rInterface ()->closeChain (open_chain);
119 open_chain = 0;
120
121 enableEditing (true);
122 }
123 }
124
restoreObject(RObject * object)125 void RKEditorDataFrame::restoreObject (RObject *object) {
126 RK_TRACE (EDITOR);
127
128 #ifdef __GNUC__
129 # warning TODO: this interface should be moved to the model for good.
130 #endif
131 datamodel->restoreObject (object, 0);
132 }
133
134