1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
echo "Creating $LOCATION_ROOT/${APP_NAME_LC}/${APP_NAME_LC}_part.cpp...";
cat << EOF > $LOCATION_ROOT/${APP_NAME_LC}/${APP_NAME_LC}_part.cpp
#include "${APP_NAME_LC}_part.h"
#include "${APP_NAME_LC}_part.moc"
#include <kinstance.h>
#include <kaction.h>
#include <kstdaction.h>
#include <kfiledialog.h>
#include <kparts/genericfactory.h>
#include <tqfile.h>
#include <tqtextstream.h>
#include <tqmultilineedit.h>
typedef KParts::GenericFactory<${APP_NAME}Part> ${APP_NAME}PartFactory;
K_EXPORT_COMPONENT_FACTORY( lib${APP_NAME_LC}part, ${APP_NAME}PartFactory )
${APP_NAME}Part::${APP_NAME}Part( TQWidget *tqparentWidget, const char *widgetName,
TQObject *tqparent, const char *name,
const TQStringList & /*args*/ )
: KParts::ReadWritePart(tqparent, name)
{
// we need an instance
setInstance( ${APP_NAME}PartFactory::instance() );
// this should be your custom internal widget
m_widget = new TQMultiLineEdit( tqparentWidget, widgetName );
// notify the part that this is our internal widget
setWidget(m_widget);
// create our actions
KStdAction::saveAs(this, TQT_SLOT(fileSaveAs()), actionCollection());
KStdAction::save(this, TQT_SLOT(save()), actionCollection());
// set our XML-UI resource file
setXMLFile("${APP_NAME_LC}_part.rc");
// we are read-write by default
setReadWrite(true);
// we are not modified since we haven't done anything yet
setModified(false);
}
${APP_NAME}Part::~${APP_NAME}Part()
{
}
void ${APP_NAME}Part::setReadWrite(bool rw)
{
// notify your internal widget of the read-write state
m_widget->setReadOnly(!rw);
if (rw)
connect(m_widget, TQT_SIGNAL(textChanged()),
this, TQT_SLOT(setModified()));
else
{
disconnect(m_widget, TQT_SIGNAL(textChanged()),
this, TQT_SLOT(setModified()));
}
ReadWritePart::setReadWrite(rw);
}
void ${APP_NAME}Part::setModified(bool modified)
{
// get a handle on our Save action and make sure it is valid
KAction *save = actionCollection()->action(KStdAction::stdName(KStdAction::Save));
if (!save)
return;
// if so, we either enable or disable it based on the current
// state
if (modified)
save->setEnabled(true);
else
save->setEnabled(false);
// in any event, we want our tqparent to do it's thing
ReadWritePart::setModified(modified);
}
KAboutData *${APP_NAME}Part::createAboutData()
{
// the non-i18n name here must be the same as the directory in
// which the part's rc file is installed ('partrcdir' in the
// Makefile)
KAboutData *aboutData = new KAboutData("${APP_NAME_LC}part", I18N_NOOP("${APP_NAME}Part"), "${APP_VERSION}");
aboutData->addAuthor("${AUTHOR}", 0, "${EMAIL}");
return aboutData;
}
bool ${APP_NAME}Part::openFile()
{
// m_file is always local so we can use TQFile on it
TQFile file(m_file);
if (file.open(IO_ReadOnly) == false)
return false;
// our example widget is text-based, so we use TQTextStream instead
// of a raw TQDataStream
TQTextStream stream(&file);
TQString str;
while (!stream.eof())
str += stream.readLine() + "\n";
file.close();
// now that we have the entire file, display it
m_widget->setText(str);
// just for fun, set the status bar
emit setStatusBarText( m_url.prettyURL() );
return true;
}
bool ${APP_NAME}Part::saveFile()
{
// if we aren't read-write, return immediately
if (isReadWrite() == false)
return false;
// m_file is always local, so we use TQFile
TQFile file(m_file);
if (file.open(IO_WriteOnly) == false)
return false;
// use TQTextStream to dump the text to the file
TQTextStream stream(&file);
stream << m_widget->text();
file.close();
return true;
}
void ${APP_NAME}Part::fileSaveAs()
{
// this slot is called whenever the File->Save As menu is selected,
TQString file_name = KFileDialog::getSaveFileName();
if (file_name.isEmpty() == false)
saveAs(file_name);
}
|