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 m_sectionList->setShadeSortColumn(
false);
106 connect(m_sectionList, TQ_SIGNAL(selectionChanged(TQListViewItem*)),
107 this, TQ_SLOT(selectionChanged(TQListViewItem*)));
108 connect(m_sectionList, TQ_SIGNAL(pressed(TQListViewItem*)),
109 this, TQ_SLOT(itemClicked(TQListViewItem*)));
110 connect(m_sectionList, TQ_SIGNAL(spacePressed(TQListViewItem*)),
111 this, TQ_SLOT(itemClicked(TQListViewItem*)));
112 connect(m_sectionList, TQ_SIGNAL(returnPressed(TQListViewItem*)),
113 this, TQ_SLOT(itemClicked(TQListViewItem*)));
115 KGuiItem openExistingGItem(i18n(
"Open Existing Document..."),
"document-open");
116 m_openExistingButton->setGuiItem(openExistingGItem);
117 connect(m_openExistingButton, TQ_SIGNAL(clicked()),
this, TQ_SLOT(showOpenFileDialog()));
120 initTemplates(templateType);
122 KoSectionListItem* selectedItem =
static_cast<KoSectionListItem*
>(m_sectionList->selectedItem());
125 m_widgetStack->widget(selectedItem->widgetIndex())->setFocus();
128 TQValueList<int> sizes;
129 sizes << 20 << width() - 20;
130 m_splitter->setSizes(sizes);
133 TDEConfigGroup cfgGrp(d->m_instance->config(),
"TemplateChooserDialog");
134 sizes = cfgGrp.readIntListEntry(
"DetailsPaneSplitterSizes");
135 emit splitterResized(0, sizes);
137 connect(
this, TQ_SIGNAL(splitterResized(KoDetailsPaneBase*,
const TQValueList<int>&)),
138 this, TQ_SLOT(saveSplitterSizes(KoDetailsPaneBase*,
const TQValueList<int>&)));
141KoOpenPane::~KoOpenPane()
143 KoSectionListItem* item =
dynamic_cast<KoSectionListItem*
>(m_sectionList->selectedItem());
146 if(!
dynamic_cast<KoDetailsPaneBase*
>(m_widgetStack->widget(item->widgetIndex()))) {
147 TDEConfigGroup cfgGrp(d->m_instance->config(),
"TemplateChooserDialog");
148 cfgGrp.writeEntry(
"LastReturnType",
"Custom");
155void KoOpenPane::showOpenFileDialog()
160 KURL url = KFileDialog::getOpenURL(
":OpenDialog", mimeFilter.join(
" "),
this);
163 TDEConfigGroup cfgGrp(d->m_instance->config(),
"TemplateChooserDialog");
164 cfgGrp.writeEntry(
"LastReturnType",
"File");
165 emit openExistingFile(url.url());
169void KoOpenPane::initRecentDocs()
171 KoRecentDocumentsPane* recentDocPane =
new KoRecentDocumentsPane(
this, d->m_instance);
172 connect(recentDocPane, TQ_SIGNAL(openFile(
const TQString&)),
this, TQ_SIGNAL(openExistingFile(
const TQString&)));
173 TQListViewItem* item = addPane(i18n(
"Recent Documents"),
"document-open", recentDocPane, 0);
174 connect(recentDocPane, TQ_SIGNAL(splitterResized(KoDetailsPaneBase*,
const TQValueList<int>&)),
175 this, TQ_SIGNAL(splitterResized(KoDetailsPaneBase*,
const TQValueList<int>&)));
176 connect(
this, TQ_SIGNAL(splitterResized(KoDetailsPaneBase*,
const TQValueList<int>&)),
177 recentDocPane, TQ_SLOT(resizeSplitter(KoDetailsPaneBase*,
const TQValueList<int>&)));
179 KoSectionListItem* separator =
new KoSectionListItem(m_sectionList,
"", 1);
180 separator->setEnabled(
false);
182 if(d->m_instance->config()->hasGroup(
"RecentFiles")) {
183 m_sectionList->setSelected(item,
true);
187void KoOpenPane::initTemplates(
const TQString& templateType)
189 TQListViewItem* selectItem = 0;
190 TQListViewItem* firstItem = 0;
191 const int templateOffset = 1000;
193 if(!templateType.isEmpty())
195 KoTemplateTree templateTree(templateType.local8Bit(), d->m_instance,
true);
197 for (KoTemplateGroup *group = templateTree.first(); group != 0L; group = templateTree.next()) {
198 if (group->isHidden()) {
202 KoTemplatesPane* pane =
new KoTemplatesPane(
this, d->m_instance,
203 group, templateTree.defaultTemplate());
204 connect(pane, TQ_SIGNAL(openTemplate(
const TQString&)),
this, TQ_SIGNAL(openTemplate(
const TQString&)));
205 connect(pane, TQ_SIGNAL(alwaysUseChanged(KoTemplatesPane*,
const TQString&)),
206 this, TQ_SIGNAL(alwaysUseChanged(KoTemplatesPane*,
const TQString&)));
207 connect(
this, TQ_SIGNAL(alwaysUseChanged(KoTemplatesPane*,
const TQString&)),
208 pane, TQ_SLOT(changeAlwaysUseTemplate(KoTemplatesPane*,
const TQString&)));
209 connect(pane, TQ_SIGNAL(splitterResized(KoDetailsPaneBase*,
const TQValueList<int>&)),
210 this, TQ_SIGNAL(splitterResized(KoDetailsPaneBase*,
const TQValueList<int>&)));
211 connect(
this, TQ_SIGNAL(splitterResized(KoDetailsPaneBase*,
const TQValueList<int>&)),
212 pane, TQ_SLOT(resizeSplitter(KoDetailsPaneBase*,
const TQValueList<int>&)));
213 TQListViewItem* item = addPane(group->name(), group->first()->loadPicture(d->m_instance),
214 pane, group->sortingWeight() + templateOffset);
220 if(group == templateTree.defaultGroup()) {
229 firstItem = m_sectionList->firstChild();
232 TDEConfigGroup cfgGrp(d->m_instance->config(),
"TemplateChooserDialog");
234 if(selectItem && (cfgGrp.readEntry(
"LastReturnType") ==
"Template")) {
235 m_sectionList->setSelected(selectItem,
true);
236 }
else if(!m_sectionList->selectedItem() && firstItem) {
237 m_sectionList->setSelected(firstItem,
true);
241void KoOpenPane::setCustomDocumentWidget(TQWidget *widget) {
243 KoSectionListItem* separator =
new KoSectionListItem(m_sectionList,
"", INT_MAX-1);
244 separator->setEnabled(
false);
246 TQListViewItem* item = addPane(i18n(
"Custom Document"), TQString(), widget, INT_MAX);
248 TDEConfigGroup cfgGrp(d->m_instance->config(),
"TemplateChooserDialog");
250 if(cfgGrp.readEntry(
"LastReturnType") ==
"Custom") {
251 m_sectionList->setSelected(item,
true);
252 KoSectionListItem* selectedItem =
static_cast<KoSectionListItem*
>(item);
253 m_widgetStack->widget(selectedItem->widgetIndex())->setFocus();
257TQListViewItem* KoOpenPane::addPane(
const TQString& title,
const TQString& icon, TQWidget* widget,
int sortWeight)
259 return addPane(title, SmallIcon(icon, TDEIcon::SizeLarge, TDEIcon::DefaultState, d->m_instance),
263TQListViewItem* KoOpenPane::addPane(
const TQString& title,
const TQPixmap& icon, TQWidget* widget,
int sortWeight)
269 int id = m_widgetStack->addWidget(widget);
270 KoSectionListItem* listItem =
new KoSectionListItem(m_sectionList, title, sortWeight,
id);
273 TQImage image = icon.convertToImage();
275 if((image.width() > 48) || (image.height() > 48)) {
276 image = image.smoothScale(48, 48, TQImage::ScaleMin);
279 image.setAlphaBuffer(
true);
280 image = image.copy((image.width() - 48) / 2, (image.height() - 48) / 2, 48, 48);
281 listItem->setPixmap(0, TQPixmap(image));
287void KoOpenPane::selectionChanged(TQListViewItem* item)
289 KoSectionListItem* section =
dynamic_cast<KoSectionListItem*
>(item);
294 m_headerLabel->setText(section->text(0));
295 m_widgetStack->raiseWidget(section->widgetIndex());
298void KoOpenPane::saveSplitterSizes(KoDetailsPaneBase* ,
const TQValueList<int>& sizes)
300 TDEConfigGroup cfgGrp(d->m_instance->config(),
"TemplateChooserDialog");
301 cfgGrp.writeEntry(
"DetailsPaneSplitterSizes", sizes);
304void KoOpenPane::itemClicked(TQListViewItem* item)
306 KoSectionListItem* selectedItem =
static_cast<KoSectionListItem*
>(item);
309 m_widgetStack->widget(selectedItem->widgetIndex())->setFocus();
313#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.
bool isSelected()
Returns true if a template in this group was the last one selected.
const char * name(StdAction id)