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