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#if KDE_IS_VERSION(3,4,0)
94 m_documentList->setShadeSortColumn(
false);
97 KGuiItem openGItem(i18n(
"Use This Template"));
98 m_openButton->setGuiItem(openGItem);
99 m_documentList->header()->hide();
100 TDEConfigGroup cfgGrp(d->m_instance->config(),
"TemplateChooserDialog");
101 TQString fullTemplateName = cfgGrp.readPathEntry(
"FullTemplateName");
102 d->m_alwaysUseTemplate = cfgGrp.readPathEntry(
"AlwaysUseTemplate");
103 connect(m_alwaysUseCheckBox, TQ_SIGNAL(clicked()),
this, TQ_SLOT(alwaysUseClicked()));
107 connect(kapp, TQ_SIGNAL(tdedisplayPaletteChanged()),
this, TQ_SLOT(changePalette()));
112 for (KoTemplate* t = group->first(); t != 0L; t = group->next()) {
114 TQImage icon = t->loadPicture(instance).convertToImage();
115 icon = icon.smoothScale(64, 64, TQImage::ScaleMin);
116 icon.setAlphaBuffer(
true);
117 icon = icon.copy((icon.width() - 64) / 2, (icon.height() - 64) / 2, 64, 64);
118 item->setPixmap(0, TQPixmap(icon));
119 item->setPixmap(2, t->loadPicture(instance));
121 if(d->m_alwaysUseTemplate == t->file()) {
123 }
else if(!selectItem && (t->file() == fullTemplateName)) {
128 connect(m_documentList, TQ_SIGNAL(selectionChanged(TQListViewItem*)),
129 this, TQ_SLOT(selectionChanged(TQListViewItem*)));
130 connect(m_documentList, TQ_SIGNAL(doubleClicked(TQListViewItem*,
const TQPoint&,
int)),
131 this, TQ_SLOT(openTemplate(TQListViewItem*)));
132 connect(m_documentList, TQ_SIGNAL(returnPressed(TQListViewItem*)),
133 this, TQ_SLOT(openTemplate(TQListViewItem*)));
134 connect(m_openButton, TQ_SIGNAL(clicked()),
this, TQ_SLOT(openTemplate()));
137 m_documentList->setSelected(selectItem,
true);
138 d->m_selected =
true;
140 m_documentList->setSelected(m_documentList->firstChild(),
true);
144KoTemplatesPane::~KoTemplatesPane()
149void KoTemplatesPane::selectionChanged(TQListViewItem* item)
152 m_openButton->setEnabled(
true);
153 m_alwaysUseCheckBox->setEnabled(
true);
154 m_titleLabel->setText(item->text(0));
155 m_previewLabel->setPixmap(*(item->pixmap(2)));
156 m_detailsLabel->setText(item->text(1));
157 m_alwaysUseCheckBox->setChecked(item->text(2) == d->m_alwaysUseTemplate);
159 m_openButton->setEnabled(
false);
160 m_alwaysUseCheckBox->setEnabled(
false);
161 m_alwaysUseCheckBox->setChecked(
false);
162 m_titleLabel->setText(TQString());
163 m_previewLabel->setPixmap(TQPixmap());
167void KoTemplatesPane::openTemplate()
169 TQListViewItem* item = m_documentList->selectedItem();
173void KoTemplatesPane::openTemplate(TQListViewItem* item)
176 TDEConfigGroup cfgGrp(d->m_instance->config(),
"TemplateChooserDialog");
177 cfgGrp.writePathEntry(
"FullTemplateName", item->text(2));
178 cfgGrp.writeEntry(
"LastReturnType",
"Template");
179 cfgGrp.writeEntry(
"AlwaysUseTemplate", d->m_alwaysUseTemplate);
180 emit openTemplate(item->text(2));
184void KoTemplatesPane::changePalette()
186 TQPalette p = kapp ? kapp->palette() : palette();
187 p.setBrush(TQColorGroup::Base, p.brush(TQPalette::Normal, TQColorGroup::Background));
188 p.setColor(TQColorGroup::Text, p.color(TQPalette::Normal, TQColorGroup::Foreground));
189 m_detailsLabel->setPalette(p);
194 return d->m_selected;
197void KoTemplatesPane::alwaysUseClicked()
199 TQListViewItem* item = m_documentList->selectedItem();
201 if(!m_alwaysUseCheckBox->isChecked()) {
202 TDEConfigGroup cfgGrp(d->m_instance->config(),
"TemplateChooserDialog");
203 cfgGrp.writeEntry(
"AlwaysUseTemplate", TQString());
204 d->m_alwaysUseTemplate = TQString();
206 d->m_alwaysUseTemplate = item->text(2);
212void KoTemplatesPane::changeAlwaysUseTemplate(
KoTemplatesPane* sender,
const TQString& alwaysUse)
217 TQListViewItem* item = m_documentList->selectedItem();
220 if(item && (item->text(2) == d->m_alwaysUseTemplate)) {
221 m_alwaysUseCheckBox->setChecked(
false);
224 d->m_alwaysUseTemplate = alwaysUse;
227bool KoTemplatesPane::eventFilter(TQObject* watched, TQEvent* e)
229 if(watched == m_previewLabel) {
230 if(e->type() == TQEvent::MouseButtonDblClick) {
235 if(watched == m_documentList) {
236 if((e->type() == TQEvent::Resize) && isShown()) {
237 emit splitterResized(
this, m_splitter->sizes());
244void KoTemplatesPane::resizeSplitter(KoDetailsPaneBase* sender,
const TQValueList<int>& sizes)
249 m_splitter->setSizes(sizes);
253class KoRecentDocumentsPanePrivate
256 KoRecentDocumentsPanePrivate()
257 : m_previewJob(0), m_instance(0)
261 ~KoRecentDocumentsPanePrivate()
264 m_previewJob->kill();
267 TDEIO::PreviewJob* m_previewJob;
268 TDEInstance* m_instance;
272 : KoDetailsPaneBase(parent,
"RecentDocsPane")
274 d =
new KoRecentDocumentsPanePrivate;
275 d->m_instance = instance;
276 m_previewLabel->installEventFilter(
this);
277 m_documentList->installEventFilter(
this);
278 setFocusProxy(m_documentList);
279 KGuiItem openGItem(i18n(
"Open This Document"),
"document-open");
280 m_openButton->setGuiItem(openGItem);
281 m_alwaysUseCheckBox->hide();
282 m_documentList->header()->hide();
283 m_documentList->setSorting(-1);
287 connect(kapp, TQ_SIGNAL(tdedisplayPaletteChanged()),
this, TQ_SLOT(changePalette()));
290 TQString oldGroup = instance->config()->group();
291 instance->config()->setGroup(
"RecentFiles");
295 KFileItemList fileList;
296 fileList.setAutoDelete(
false);
299 TQString key = TQString(
"File%1").arg(i);
300 value = instance->config()->readPathEntry(key);
302 if(!value.isEmpty()) {
303 TQString path = value;
307 if(path.endsWith(
"]")) {
308 int pos = path.find(
"[");
309 name = path.mid(0, pos - 1);
310 path = path.mid(pos + 1, path.length() - pos - 2);
316 name = url.filename();
318 if(!url.isLocalFile() || TQFile::exists(url.path())) {
319 KFileItem* fileItem =
new KFileItem(KFileItem::Unknown, KFileItem::Unknown, url);
320 fileList.append(fileItem);
321 KoFileListItem* item =
new KoFileListItem(m_documentList,
322 m_documentList->lastItem(), name, url.url(), fileItem);
324 TQImage icon = fileItem->pixmap(64).convertToImage();
325 icon.setAlphaBuffer(
true);
326 icon = icon.copy((icon.width() - 64) / 2, (icon.height() - 64) / 2, 64, 64);
327 item->setPixmap(0, TQPixmap(icon));
328 item->setPixmap(2, fileItem->pixmap(128));
333 }
while ( !value.isEmpty() || i<=10 );
335 instance->config()->setGroup( oldGroup );
337 connect(m_documentList, TQ_SIGNAL(selectionChanged(TQListViewItem*)),
338 this, TQ_SLOT(selectionChanged(TQListViewItem*)));
339 connect(m_documentList, TQ_SIGNAL(clicked(TQListViewItem*)),
340 this, TQ_SLOT(selectionChanged(TQListViewItem*)));
341 connect(m_documentList, TQ_SIGNAL(doubleClicked(TQListViewItem*,
const TQPoint&,
int)),
342 this, TQ_SLOT(openFile(TQListViewItem*)));
343 connect(m_documentList, TQ_SIGNAL(returnPressed(TQListViewItem*)),
344 this, TQ_SLOT(openFile(TQListViewItem*)));
345 connect(m_openButton, TQ_SIGNAL(clicked()),
this, TQ_SLOT(openFile()));
347 m_documentList->setSelected(m_documentList->firstChild(),
true);
349 d->m_previewJob = TDEIO::filePreview(fileList, 200, 200);
351 connect(d->m_previewJob, TQ_SIGNAL(result(TDEIO::Job*)),
this, TQ_SLOT(previewResult(TDEIO::Job*)));
352 connect(d->m_previewJob, TQ_SIGNAL(gotPreview(
const KFileItem*,
const TQPixmap&)),
353 this, TQ_SLOT(updatePreview(
const KFileItem*,
const TQPixmap&)));
356KoRecentDocumentsPane::~KoRecentDocumentsPane()
361void KoRecentDocumentsPane::selectionChanged(TQListViewItem* item)
364 m_openButton->setEnabled(
true);
365 m_titleLabel->setText(item->text(0));
366 m_previewLabel->setPixmap(*(item->pixmap(2)));
368 if(
static_cast<KoFileListItem*
>(item)->fileItem()) {
369 KFileItem* fileItem =
static_cast<KoFileListItem*
>(item)->fileItem();
370 TQString details =
"<center><table border=\"0\">";
371 details += i18n(
"File modification date and time. %1 is date time",
"<tr><td><b>Modified:</b></td><td>%1</td></tr>")
372 .arg(fileItem->timeString(TDEIO::UDS_MODIFICATION_TIME));
373 details += i18n(
"File access date and time. %1 is date time",
"<tr><td><b>Accessed:</b></td><td>%1</td></tr>")
374 .arg(fileItem->timeString(TDEIO::UDS_ACCESS_TIME));
375 details +=
"</table></center>";
376 m_detailsLabel->setText(details);
378 m_detailsLabel->setText(TQString());
381 m_openButton->setEnabled(
false);
382 m_titleLabel->setText(TQString());
383 m_previewLabel->setPixmap(TQPixmap());
384 m_detailsLabel->setText(TQString());
388void KoRecentDocumentsPane::openFile()
390 TQListViewItem* item = m_documentList->selectedItem();
394void KoRecentDocumentsPane::openFile(TQListViewItem* item)
396 TDEConfigGroup cfgGrp(d->m_instance->config(),
"TemplateChooserDialog");
397 cfgGrp.writeEntry(
"LastReturnType",
"File");
400 emit openFile(item->text(1));
403void KoRecentDocumentsPane::previewResult(TDEIO::Job* job)
405 if(d->m_previewJob == job)
409void KoRecentDocumentsPane::updatePreview(
const KFileItem* fileItem,
const TQPixmap& preview)
411 if(preview.isNull()) {
415 TQListViewItemIterator it(m_documentList);
417 while(it.current()) {
418 if(it.current()->text(1) == fileItem->url().url()) {
419 it.current()->setPixmap(2, preview);
420 TQImage icon = preview.convertToImage();
421 icon = icon.smoothScale(64, 64, TQImage::ScaleMin);
422 icon.setAlphaBuffer(
true);
423 icon = icon.copy((icon.width() - 64) / 2, (icon.height() - 64) / 2, 64, 64);
424 it.current()->setPixmap(0, TQPixmap(icon));
426 if(it.current()->isSelected()) {
427 m_previewLabel->setPixmap(preview);
437void KoRecentDocumentsPane::changePalette()
439 TQPalette p = kapp ? kapp->palette() : palette();
440 p.setBrush(TQColorGroup::Base, p.brush(TQPalette::Normal, TQColorGroup::Background));
441 p.setColor(TQColorGroup::Text, p.color(TQPalette::Normal, TQColorGroup::Foreground));
442 m_detailsLabel->setPalette(p);
445bool KoRecentDocumentsPane::eventFilter(TQObject* watched, TQEvent* e)
447 if(watched == m_previewLabel) {
448 if(e->type() == TQEvent::MouseButtonDblClick) {
453 if(watched == m_documentList) {
454 if((e->type() == TQEvent::Resize) && isShown()) {
455 emit splitterResized(
this, m_splitter->sizes());
462void KoRecentDocumentsPane::resizeSplitter(KoDetailsPaneBase* sender,
const TQValueList<int>& sizes)
467 m_splitter->setSizes(sizes);
470#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.