19#include "KoDetailsPane.h"
21#include <tqcheckbox.h>
29#include <tqsimplerichtext.h>
31#include <tqsplitter.h>
33#include <tdeinstance.h>
35#include <tdelistview.h>
36#include <kpushbutton.h>
39#include <tdefileitem.h>
40#include <tdeio/previewjob.h>
42#include <ktextbrowser.h>
43#include <tdeapplication.h>
45#include "KoTemplates.h"
50 KoFileListItem(TDEListView* listView, TQListViewItem* after,
const TQString& filename,
51 const TQString& fullPath, KFileItem* fileItem)
52 :
TDEListViewItem(listView, after, filename, fullPath), m_fileItem(fileItem)
61 KFileItem* fileItem()
const
67 KFileItem* m_fileItem;
70class KoTemplatesPanePrivate
73 KoTemplatesPanePrivate()
74 : m_instance(0), m_selected(false)
78 TDEInstance* m_instance;
80 TQString m_alwaysUseTemplate;
85 KoTemplateGroup *group, KoTemplate* )
86 : KoDetailsPaneBase(parent,
"TemplatesPane")
88 d =
new KoTemplatesPanePrivate;
89 d->m_instance = instance;
90 m_previewLabel->installEventFilter(
this);
91 m_documentList->installEventFilter(
this);
92 setFocusProxy(m_documentList);
93 m_documentList->setShadeSortColumn(
false);
95 KGuiItem openGItem(i18n(
"Use This Template"));
96 m_openButton->setGuiItem(openGItem);
97 m_documentList->header()->hide();
98 TDEConfigGroup cfgGrp(d->m_instance->config(),
"TemplateChooserDialog");
99 TQString fullTemplateName = cfgGrp.readPathEntry(
"FullTemplateName");
100 d->m_alwaysUseTemplate = cfgGrp.readPathEntry(
"AlwaysUseTemplate");
101 connect(m_alwaysUseCheckBox, TQ_SIGNAL(clicked()),
this, TQ_SLOT(alwaysUseClicked()));
105 connect(kapp, TQ_SIGNAL(tdedisplayPaletteChanged()),
this, TQ_SLOT(changePalette()));
110 for (KoTemplate* t = group->first(); t != 0L; t = group->next()) {
112 TQImage icon = t->loadPicture(instance).convertToImage();
113 icon = icon.smoothScale(64, 64, TQImage::ScaleMin);
114 icon.setAlphaBuffer(
true);
115 icon = icon.copy((icon.width() - 64) / 2, (icon.height() - 64) / 2, 64, 64);
116 item->setPixmap(0, TQPixmap(icon));
117 item->setPixmap(2, t->loadPicture(instance));
119 if(d->m_alwaysUseTemplate == t->file()) {
121 }
else if(!selectItem && (t->file() == fullTemplateName)) {
126 connect(m_documentList, TQ_SIGNAL(selectionChanged(TQListViewItem*)),
127 this, TQ_SLOT(selectionChanged(TQListViewItem*)));
128 connect(m_documentList, TQ_SIGNAL(doubleClicked(TQListViewItem*,
const TQPoint&,
int)),
129 this, TQ_SLOT(openTemplate(TQListViewItem*)));
130 connect(m_documentList, TQ_SIGNAL(returnPressed(TQListViewItem*)),
131 this, TQ_SLOT(openTemplate(TQListViewItem*)));
132 connect(m_openButton, TQ_SIGNAL(clicked()),
this, TQ_SLOT(openTemplate()));
135 m_documentList->setSelected(selectItem,
true);
136 d->m_selected =
true;
138 m_documentList->setSelected(m_documentList->firstChild(),
true);
142KoTemplatesPane::~KoTemplatesPane()
147void KoTemplatesPane::selectionChanged(TQListViewItem* item)
150 m_openButton->setEnabled(
true);
151 m_alwaysUseCheckBox->setEnabled(
true);
152 m_titleLabel->setText(item->text(0));
153 m_previewLabel->setPixmap(*(item->pixmap(2)));
154 m_detailsLabel->setText(item->text(1));
155 m_alwaysUseCheckBox->setChecked(item->text(2) == d->m_alwaysUseTemplate);
157 m_openButton->setEnabled(
false);
158 m_alwaysUseCheckBox->setEnabled(
false);
159 m_alwaysUseCheckBox->setChecked(
false);
160 m_titleLabel->setText(TQString());
161 m_previewLabel->setPixmap(TQPixmap());
165void KoTemplatesPane::openTemplate()
167 TQListViewItem* item = m_documentList->selectedItem();
171void KoTemplatesPane::openTemplate(TQListViewItem* item)
174 TDEConfigGroup cfgGrp(d->m_instance->config(),
"TemplateChooserDialog");
175 cfgGrp.writePathEntry(
"FullTemplateName", item->text(2));
176 cfgGrp.writeEntry(
"LastReturnType",
"Template");
177 cfgGrp.writeEntry(
"AlwaysUseTemplate", d->m_alwaysUseTemplate);
178 emit openTemplate(item->text(2));
182void KoTemplatesPane::changePalette()
184 TQPalette p = kapp ? kapp->palette() : palette();
185 p.setBrush(TQColorGroup::Base, p.brush(TQPalette::Normal, TQColorGroup::Background));
186 p.setColor(TQColorGroup::Text, p.color(TQPalette::Normal, TQColorGroup::Foreground));
187 m_detailsLabel->setPalette(p);
192 return d->m_selected;
195void KoTemplatesPane::alwaysUseClicked()
197 TQListViewItem* item = m_documentList->selectedItem();
199 if(!m_alwaysUseCheckBox->isChecked()) {
200 TDEConfigGroup cfgGrp(d->m_instance->config(),
"TemplateChooserDialog");
201 cfgGrp.writeEntry(
"AlwaysUseTemplate", TQString());
202 d->m_alwaysUseTemplate = TQString();
204 d->m_alwaysUseTemplate = item->text(2);
210void KoTemplatesPane::changeAlwaysUseTemplate(
KoTemplatesPane* sender,
const TQString& alwaysUse)
215 TQListViewItem* item = m_documentList->selectedItem();
218 if(item && (item->text(2) == d->m_alwaysUseTemplate)) {
219 m_alwaysUseCheckBox->setChecked(
false);
222 d->m_alwaysUseTemplate = alwaysUse;
225bool KoTemplatesPane::eventFilter(TQObject* watched, TQEvent* e)
227 if(watched == m_previewLabel) {
228 if(e->type() == TQEvent::MouseButtonDblClick) {
233 if(watched == m_documentList) {
234 if((e->type() == TQEvent::Resize) && isShown()) {
235 emit splitterResized(
this, m_splitter->sizes());
242void KoTemplatesPane::resizeSplitter(KoDetailsPaneBase* sender,
const TQValueList<int>& sizes)
247 m_splitter->setSizes(sizes);
251class KoRecentDocumentsPanePrivate
254 KoRecentDocumentsPanePrivate()
255 : m_previewJob(0), m_instance(0)
259 ~KoRecentDocumentsPanePrivate()
262 m_previewJob->kill();
265 TDEIO::PreviewJob* m_previewJob;
266 TDEInstance* m_instance;
270 : KoDetailsPaneBase(parent,
"RecentDocsPane")
272 d =
new KoRecentDocumentsPanePrivate;
273 d->m_instance = instance;
274 m_previewLabel->installEventFilter(
this);
275 m_documentList->installEventFilter(
this);
276 setFocusProxy(m_documentList);
277 KGuiItem openGItem(i18n(
"Open This Document"),
"document-open");
278 m_openButton->setGuiItem(openGItem);
279 m_alwaysUseCheckBox->hide();
280 m_documentList->header()->hide();
281 m_documentList->setSorting(-1);
285 connect(kapp, TQ_SIGNAL(tdedisplayPaletteChanged()),
this, TQ_SLOT(changePalette()));
288 TQString oldGroup = instance->config()->group();
289 instance->config()->setGroup(
"RecentFiles");
293 KFileItemList fileList;
294 fileList.setAutoDelete(
false);
297 TQString key = TQString(
"File%1").arg(i);
298 value = instance->config()->readPathEntry(key);
300 if(!value.isEmpty()) {
301 TQString path = value;
305 if(path.endsWith(
"]")) {
306 int pos = path.find(
"[");
307 name = path.mid(0, pos - 1);
308 path = path.mid(pos + 1, path.length() - pos - 2);
314 name = url.filename();
316 if(!url.isLocalFile() || TQFile::exists(url.path())) {
317 KFileItem* fileItem =
new KFileItem(KFileItem::Unknown, KFileItem::Unknown, url);
318 fileList.append(fileItem);
319 KoFileListItem* item =
new KoFileListItem(m_documentList,
320 m_documentList->lastItem(), name, url.url(), fileItem);
322 TQImage icon = fileItem->pixmap(64).convertToImage();
323 icon.setAlphaBuffer(
true);
324 icon = icon.copy((icon.width() - 64) / 2, (icon.height() - 64) / 2, 64, 64);
325 item->setPixmap(0, TQPixmap(icon));
326 item->setPixmap(2, fileItem->pixmap(128));
331 }
while ( !value.isEmpty() || i<=10 );
333 instance->config()->setGroup( oldGroup );
335 connect(m_documentList, TQ_SIGNAL(selectionChanged(TQListViewItem*)),
336 this, TQ_SLOT(selectionChanged(TQListViewItem*)));
337 connect(m_documentList, TQ_SIGNAL(clicked(TQListViewItem*)),
338 this, TQ_SLOT(selectionChanged(TQListViewItem*)));
339 connect(m_documentList, TQ_SIGNAL(doubleClicked(TQListViewItem*,
const TQPoint&,
int)),
340 this, TQ_SLOT(openFile(TQListViewItem*)));
341 connect(m_documentList, TQ_SIGNAL(returnPressed(TQListViewItem*)),
342 this, TQ_SLOT(openFile(TQListViewItem*)));
343 connect(m_openButton, TQ_SIGNAL(clicked()),
this, TQ_SLOT(openFile()));
345 m_documentList->setSelected(m_documentList->firstChild(),
true);
347 d->m_previewJob = TDEIO::filePreview(fileList, 200, 200);
349 connect(d->m_previewJob, TQ_SIGNAL(result(TDEIO::Job*)),
this, TQ_SLOT(previewResult(TDEIO::Job*)));
350 connect(d->m_previewJob, TQ_SIGNAL(gotPreview(
const KFileItem*,
const TQPixmap&)),
351 this, TQ_SLOT(updatePreview(
const KFileItem*,
const TQPixmap&)));
354KoRecentDocumentsPane::~KoRecentDocumentsPane()
359void KoRecentDocumentsPane::selectionChanged(TQListViewItem* item)
362 m_openButton->setEnabled(
true);
363 m_titleLabel->setText(item->text(0));
364 m_previewLabel->setPixmap(*(item->pixmap(2)));
366 if(
static_cast<KoFileListItem*
>(item)->fileItem()) {
367 KFileItem* fileItem =
static_cast<KoFileListItem*
>(item)->fileItem();
368 TQString details =
"<center><table border=\"0\">";
369 details += i18n(
"File modification date and time. %1 is date time",
"<tr><td><b>Modified:</b></td><td>%1</td></tr>")
370 .arg(fileItem->timeString(TDEIO::UDS_MODIFICATION_TIME));
371 details += i18n(
"File access date and time. %1 is date time",
"<tr><td><b>Accessed:</b></td><td>%1</td></tr>")
372 .arg(fileItem->timeString(TDEIO::UDS_ACCESS_TIME));
373 details +=
"</table></center>";
374 m_detailsLabel->setText(details);
376 m_detailsLabel->setText(TQString());
379 m_openButton->setEnabled(
false);
380 m_titleLabel->setText(TQString());
381 m_previewLabel->setPixmap(TQPixmap());
382 m_detailsLabel->setText(TQString());
386void KoRecentDocumentsPane::openFile()
388 TQListViewItem* item = m_documentList->selectedItem();
392void KoRecentDocumentsPane::openFile(TQListViewItem* item)
394 TDEConfigGroup cfgGrp(d->m_instance->config(),
"TemplateChooserDialog");
395 cfgGrp.writeEntry(
"LastReturnType",
"File");
398 emit openFile(item->text(1));
401void KoRecentDocumentsPane::previewResult(TDEIO::Job* job)
403 if(d->m_previewJob == job)
407void KoRecentDocumentsPane::updatePreview(
const KFileItem* fileItem,
const TQPixmap& preview)
409 if(preview.isNull()) {
413 TQListViewItemIterator it(m_documentList);
415 while(it.current()) {
416 if(it.current()->text(1) == fileItem->url().url()) {
417 it.current()->setPixmap(2, preview);
418 TQImage icon = preview.convertToImage();
419 icon = icon.smoothScale(64, 64, TQImage::ScaleMin);
420 icon.setAlphaBuffer(
true);
421 icon = icon.copy((icon.width() - 64) / 2, (icon.height() - 64) / 2, 64, 64);
422 it.current()->setPixmap(0, TQPixmap(icon));
424 if(it.current()->isSelected()) {
425 m_previewLabel->setPixmap(preview);
435void KoRecentDocumentsPane::changePalette()
437 TQPalette p = kapp ? kapp->palette() : palette();
438 p.setBrush(TQColorGroup::Base, p.brush(TQPalette::Normal, TQColorGroup::Background));
439 p.setColor(TQColorGroup::Text, p.color(TQPalette::Normal, TQColorGroup::Foreground));
440 m_detailsLabel->setPalette(p);
443bool KoRecentDocumentsPane::eventFilter(TQObject* watched, TQEvent* e)
445 if(watched == m_previewLabel) {
446 if(e->type() == TQEvent::MouseButtonDblClick) {
451 if(watched == m_documentList) {
452 if((e->type() == TQEvent::Resize) && isShown()) {
453 emit splitterResized(
this, m_splitter->sizes());
460void KoRecentDocumentsPane::resizeSplitter(KoDetailsPaneBase* sender,
const TQValueList<int>& sizes)
465 m_splitter->setSizes(sizes);
468#include "KoDetailsPane.moc"
KoRecentDocumentsPane(TQWidget *parent, TDEInstance *instance)
Constructor.
This widget is the right-side part of the template opening widget.
void alwaysUseChanged(KoTemplatesPane *sender, const TQString &alwaysUse)
Emited when the always use checkbox is selected.
bool isSelected()
Returns true if a template in this group was the last one selected.
KoTemplatesPane(TQWidget *parent, TDEInstance *instance, KoTemplateGroup *group, KoTemplate *defaultTemplate)
Constructor.
TDEListViewItem(TQListView *parent)