20#include "KoOpenPane.h"
25#include <tqwidgetstack.h>
27#include <tqvaluelist.h>
33#include <tdefiledialog.h>
34#include <tdeinstance.h>
35#include <kpushbutton.h>
36#include <kiconloader.h>
38#include <tdelistview.h>
40#include "KoFilterManager.h"
41#include "KoTemplates.h"
42#include "KoDocument.h"
43#include "KoDetailsPane.h"
44#include "koDetailsPaneBase.h"
48class KoSectionListItem :
public TQListViewItem
51 KoSectionListItem(
TDEListView* listView,
const TQString& name,
int sortWeight,
int widgetIndex = -1)
52 : TQListViewItem(listView,
name), m_sortWeight(sortWeight), m_widgetIndex(widgetIndex)
56 virtual int compare(TQListViewItem* i,
int,
bool)
const
58 KoSectionListItem* item =
dynamic_cast<KoSectionListItem*
>(i);
63 return sortWeight() - item->sortWeight();
66 virtual void paintCell(TQPainter* p,
const TQColorGroup& cg,
int column,
int width,
int align)
68 if(widgetIndex() >= 0) {
69 TQListViewItem::paintCell(p, cg, column, width, align);
71 int ypos = (height() - 2) / 2;
72 TQPen pen(cg.foreground(), 2);
74 p->drawLine(0, ypos, width, ypos);
78 int sortWeight()
const {
return m_sortWeight; }
79 int widgetIndex()
const {
return m_widgetIndex; }
86class KoOpenPanePrivate
94 TDEInstance* m_instance;
97KoOpenPane::KoOpenPane(TQWidget *parent, TDEInstance* instance,
const TQString& templateType)
98 : KoOpenPaneBase(parent,
"OpenPane")
100 d =
new KoOpenPanePrivate;
101 d->m_instance = instance;
103 m_sectionList->header()->hide();
104 m_sectionList->setSorting(0);
105#if KDE_IS_VERSION(3,4,0)
106 m_sectionList->setShadeSortColumn(
false);
108 connect(m_sectionList, TQ_SIGNAL(selectionChanged(TQListViewItem*)),
109 this, TQ_SLOT(selectionChanged(TQListViewItem*)));
110 connect(m_sectionList, TQ_SIGNAL(pressed(TQListViewItem*)),
111 this, TQ_SLOT(itemClicked(TQListViewItem*)));
112 connect(m_sectionList, TQ_SIGNAL(spacePressed(TQListViewItem*)),
113 this, TQ_SLOT(itemClicked(TQListViewItem*)));
114 connect(m_sectionList, TQ_SIGNAL(returnPressed(TQListViewItem*)),
115 this, TQ_SLOT(itemClicked(TQListViewItem*)));
117 KGuiItem openExistingGItem(i18n(
"Open Existing Document..."),
"document-open");
118 m_openExistingButton->setGuiItem(openExistingGItem);
119 connect(m_openExistingButton, TQ_SIGNAL(clicked()),
this, TQ_SLOT(showOpenFileDialog()));
122 initTemplates(templateType);
124 KoSectionListItem* selectedItem =
static_cast<KoSectionListItem*
>(m_sectionList->selectedItem());
127 m_widgetStack->widget(selectedItem->widgetIndex())->setFocus();
130 TQValueList<int> sizes;
131 sizes << 20 << width() - 20;
132 m_splitter->setSizes(sizes);
135 TDEConfigGroup cfgGrp(d->m_instance->config(),
"TemplateChooserDialog");
136 sizes = cfgGrp.readIntListEntry(
"DetailsPaneSplitterSizes");
137 emit splitterResized(0, sizes);
139 connect(
this, TQ_SIGNAL(splitterResized(KoDetailsPaneBase*,
const TQValueList<int>&)),
140 this, TQ_SLOT(saveSplitterSizes(KoDetailsPaneBase*,
const TQValueList<int>&)));
143KoOpenPane::~KoOpenPane()
145 KoSectionListItem* item =
dynamic_cast<KoSectionListItem*
>(m_sectionList->selectedItem());
148 if(!
dynamic_cast<KoDetailsPaneBase*
>(m_widgetStack->widget(item->widgetIndex()))) {
149 TDEConfigGroup cfgGrp(d->m_instance->config(),
"TemplateChooserDialog");
150 cfgGrp.writeEntry(
"LastReturnType",
"Custom");
157void KoOpenPane::showOpenFileDialog()
162 KURL url = KFileDialog::getOpenURL(
":OpenDialog", mimeFilter.join(
" "),
this);
165 TDEConfigGroup cfgGrp(d->m_instance->config(),
"TemplateChooserDialog");
166 cfgGrp.writeEntry(
"LastReturnType",
"File");
167 emit openExistingFile(url.url());
171void KoOpenPane::initRecentDocs()
174 connect(recentDocPane, TQ_SIGNAL(openFile(
const TQString&)),
this, TQ_SIGNAL(openExistingFile(
const TQString&)));
175 TQListViewItem* item = addPane(i18n(
"Recent Documents"),
"document-open", recentDocPane, 0);
176 connect(recentDocPane, TQ_SIGNAL(splitterResized(KoDetailsPaneBase*,
const TQValueList<int>&)),
177 this, TQ_SIGNAL(splitterResized(KoDetailsPaneBase*,
const TQValueList<int>&)));
178 connect(
this, TQ_SIGNAL(splitterResized(KoDetailsPaneBase*,
const TQValueList<int>&)),
179 recentDocPane, TQ_SLOT(resizeSplitter(KoDetailsPaneBase*,
const TQValueList<int>&)));
181 KoSectionListItem* separator =
new KoSectionListItem(m_sectionList,
"", 1);
182 separator->setEnabled(
false);
184 if(d->m_instance->config()->hasGroup(
"RecentFiles")) {
185 m_sectionList->setSelected(item,
true);
189void KoOpenPane::initTemplates(
const TQString& templateType)
191 TQListViewItem* selectItem = 0;
192 TQListViewItem* firstItem = 0;
193 const int templateOffset = 1000;
195 if(!templateType.isEmpty())
197 KoTemplateTree templateTree(templateType.local8Bit(), d->m_instance,
true);
199 for (KoTemplateGroup *group = templateTree.first(); group != 0L; group = templateTree.next()) {
200 if (group->isHidden()) {
205 group, templateTree.defaultTemplate());
206 connect(pane, TQ_SIGNAL(openTemplate(
const TQString&)),
this, TQ_SIGNAL(openTemplate(
const TQString&)));
207 connect(pane, TQ_SIGNAL(alwaysUseChanged(
KoTemplatesPane*,
const TQString&)),
209 connect(
this, TQ_SIGNAL(alwaysUseChanged(
KoTemplatesPane*,
const TQString&)),
210 pane, TQ_SLOT(changeAlwaysUseTemplate(
KoTemplatesPane*,
const TQString&)));
211 connect(pane, TQ_SIGNAL(splitterResized(KoDetailsPaneBase*,
const TQValueList<int>&)),
212 this, TQ_SIGNAL(splitterResized(KoDetailsPaneBase*,
const TQValueList<int>&)));
213 connect(
this, TQ_SIGNAL(splitterResized(KoDetailsPaneBase*,
const TQValueList<int>&)),
214 pane, TQ_SLOT(resizeSplitter(KoDetailsPaneBase*,
const TQValueList<int>&)));
215 TQListViewItem* item = addPane(group->name(), group->first()->loadPicture(d->m_instance),
216 pane, group->sortingWeight() + templateOffset);
222 if(group == templateTree.defaultGroup()) {
231 firstItem = m_sectionList->firstChild();
234 TDEConfigGroup cfgGrp(d->m_instance->config(),
"TemplateChooserDialog");
236 if(selectItem && (cfgGrp.readEntry(
"LastReturnType") ==
"Template")) {
237 m_sectionList->setSelected(selectItem,
true);
238 }
else if(!m_sectionList->selectedItem() && firstItem) {
239 m_sectionList->setSelected(firstItem,
true);
243void KoOpenPane::setCustomDocumentWidget(TQWidget *widget) {
245 KoSectionListItem* separator =
new KoSectionListItem(m_sectionList,
"", INT_MAX-1);
246 separator->setEnabled(
false);
248 TQListViewItem* item = addPane(i18n(
"Custom Document"), TQString(), widget, INT_MAX);
250 TDEConfigGroup cfgGrp(d->m_instance->config(),
"TemplateChooserDialog");
252 if(cfgGrp.readEntry(
"LastReturnType") ==
"Custom") {
253 m_sectionList->setSelected(item,
true);
254 KoSectionListItem* selectedItem =
static_cast<KoSectionListItem*
>(item);
255 m_widgetStack->widget(selectedItem->widgetIndex())->setFocus();
259TQListViewItem* KoOpenPane::addPane(
const TQString& title,
const TQString& icon, TQWidget* widget,
int sortWeight)
261 return addPane(title, SmallIcon(icon, TDEIcon::SizeLarge, TDEIcon::DefaultState, d->m_instance),
265TQListViewItem* KoOpenPane::addPane(
const TQString& title,
const TQPixmap& icon, TQWidget* widget,
int sortWeight)
271 int id = m_widgetStack->addWidget(widget);
272 KoSectionListItem* listItem =
new KoSectionListItem(m_sectionList, title, sortWeight,
id);
275 TQImage image = icon.convertToImage();
277 if((image.width() > 48) || (image.height() > 48)) {
278 image = image.smoothScale(48, 48, TQImage::ScaleMin);
281 image.setAlphaBuffer(
true);
282 image = image.copy((image.width() - 48) / 2, (image.height() - 48) / 2, 48, 48);
283 listItem->setPixmap(0, TQPixmap(image));
289void KoOpenPane::selectionChanged(TQListViewItem* item)
291 KoSectionListItem* section =
dynamic_cast<KoSectionListItem*
>(item);
296 m_headerLabel->setText(section->text(0));
297 m_widgetStack->raiseWidget(section->widgetIndex());
300void KoOpenPane::saveSplitterSizes(KoDetailsPaneBase* ,
const TQValueList<int>& sizes)
302 TDEConfigGroup cfgGrp(d->m_instance->config(),
"TemplateChooserDialog");
303 cfgGrp.writeEntry(
"DetailsPaneSplitterSizes", sizes);
306void KoOpenPane::itemClicked(TQListViewItem* item)
308 KoSectionListItem* selectedItem =
static_cast<KoSectionListItem*
>(item);
311 m_widgetStack->widget(selectedItem->widgetIndex())->setFocus();
315#include "KoOpenPane.moc"
static TQCString readNativeFormatMimeType(TDEInstance *instance=0)
Used by KoApplication, and by KoMainWindow, when no document exists yet.
static TQStringList readExtraNativeMimeTypes(TDEInstance *instance=0)
Used by KoMainWindow, when no document exists yet.
static TQStringList mimeFilter()
The same method as KoFilterManager::mimeFilter but suited for KoShell.
This widget is the recent doc part of the template opening widget.
This widget is the right-side part of the template opening widget.
bool isSelected()
Returns true if a template in this group was the last one selected.
const char * name(StdAction id)