17#include <QTreeWidgetItem>
18#include <QStyledItemDelegate>
19#include <QLinearGradient>
20#include <QStandardPaths>
21#include <QDragEnterEvent>
25#include <klocalizedstring.h>
26#include <ksharedconfig.h>
39#include "ui_KisOpenPaneBase.h"
42#include <kconfiggroup.h>
50 : QTreeWidgetItem(treeWidget,
QStringList() << name)
55 Qt::ItemFlags newFlags = Qt::NoItemFlags;
58 newFlags |= Qt::ItemIsEnabled | Qt::ItemIsSelectable;
63 bool operator<(
const QTreeWidgetItem & other)
const override {
96 m_itemMap =
new QMap<QString, QTreeWidgetItem *>();
119 QStyledItemDelegate* delegate =
new QStyledItemDelegate(
d->m_sectionList);
120 d->m_sectionList->setItemDelegate(delegate);
123 connect(scroller, &QScroller::stateChanged,
this, [&](QScroller::State state) {
128 connect(
d->m_sectionList, SIGNAL(itemSelectionChanged()),
130 connect(
d->m_sectionList, SIGNAL(
itemClicked(QTreeWidgetItem*,
int)),
132 connect(
d->m_sectionList, SIGNAL(itemActivated(QTreeWidgetItem*,
int)),
139 if (!
d->m_sectionList->selectedItems().isEmpty())
144 d->m_widgetStack->widget(selectedItem->
widgetIndex())->setFocus();
151 KConfigGroup cfgGrp( KSharedConfig::openConfig(),
"TemplateChooserDialog"); sizes = cfgGrp.readEntry(
"DetailsPaneSplitterSizes", sizes);
153 if (!sizes.isEmpty())
159 setAcceptDrops(
true);
164 if (!
d->m_sectionList->selectedItems().isEmpty()) {
168 if (!qobject_cast<KisDetailsPane*>(
d->m_widgetStack->widget(item->
widgetIndex()))) {
169 KConfigGroup cfgGrp( KSharedConfig::openConfig(),
"TemplateChooserDialog");
184 dialog.setCaption(i18n(
"Open Existing Document"));
185 dialog.setDefaultDir(QStandardPaths::writableLocation(QStandardPaths::PicturesLocation));
187 Q_FOREACH (
const QString &filename, dialog.filenames()) {
201 QTreeWidgetItem* firstItem = 0;
202 const int templateOffset = 1000;
204 if (!templatesResourcePath.isEmpty()) {
227 QTreeWidgetItem* item =
addPane(group->
name(),
"Template", group->
templates().first()->loadPicture(),
245 firstItem =
d->m_sectionList->topLevelItem(0);
248 KConfigGroup cfgGrp( KSharedConfig::openConfig(),
"TemplateChooserDialog");
250 if (
selectItem && (cfgGrp.readEntry(
"LastReturnType") ==
"Template")) {
251 d->m_sectionList->setCurrentItem(
selectItem, 0, QItemSelectionModel::ClearAndSelect);
253 else if (
d->m_sectionList->selectedItems().isEmpty() && firstItem) {
254 d->m_sectionList->setCurrentItem(firstItem, 0, QItemSelectionModel::ClearAndSelect);
260 if (event->mimeData()->hasUrls()) {
267 if (event->mimeData()->hasUrls() && event->mimeData()->urls().size() > 0) {
282 KConfigGroup cfgGrp( KSharedConfig::openConfig(),
"TemplateChooserDialog");
284 QString lastActiveItem = cfgGrp.readEntry(
"LastReturnType");
285 bool showCustomItemByDefault = cfgGrp.readEntry(
"ShowCustomDocumentWidgetByDefault",
false);
286 if (lastActiveItem == untranslatedName || (lastActiveItem.isEmpty() && showCustomItemByDefault)) {
287 d->m_sectionList->setCurrentItem(item, 0, QItemSelectionModel::ClearAndSelect);
289 d->m_widgetStack->widget(selectedItem->
widgetIndex())->setFocus();
295 QTreeWidgetItem* item =
d->
m_itemMap->value(name,
nullptr);
296 if (!item)
return false;
298 d->m_sectionList->setCurrentItem(item);
303QTreeWidgetItem*
KisOpenPane::addPane(
const QString &title,
const QString &untranslatedName,
const QString &iconName, QWidget *widget,
int sortWeight)
309 int id =
d->m_widgetStack->addWidget(widget);
312 d->
m_itemMap->insert(untranslatedName, (QTreeWidgetItem*)listItem);
316 QPixmap iconPixmap = icon.pixmap(32, 32);
318 QIcon finalIcon(iconPixmap);
319 listItem->setIcon(0, finalIcon);
324QTreeWidgetItem*
KisOpenPane::addPane(
const QString &title,
const QString &untranslatedName,
const QPixmap& icon, QWidget* widget,
int sortWeight)
330 int id =
d->m_widgetStack->addWidget(widget);
336 d->
m_itemMap->insert(untranslatedName, listItem);
338 if (!icon.isNull()) {
339 QImage image = icon.toImage();
341 if (!image.isNull() && ((image.width() >
iconSize) || (image.height() >
iconSize))) {
342 image = image.scaled(
iconSize,
iconSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
345 image.convertTo(QImage::Format_ARGB32);
347 listItem->setIcon(0, QIcon(QPixmap::fromImage(image)));
355 if(!
d->m_sectionList->selectedItems().isEmpty())
362 d->m_widgetStack->setCurrentIndex(section->
widgetIndex());
369 KConfigGroup cfgGrp( KSharedConfig::openConfig(),
"TemplateChooserDialog");
370 cfgGrp.writeEntry(
"DetailsPaneSplitterSizes", sizes);
377 if (selectedItem && selectedItem->
widgetIndex() >= 0) {
378 d->m_widgetStack->widget(selectedItem->
widgetIndex())->setFocus();
int iconSize(qreal width, qreal height)
QMap< QString, QTreeWidgetItem * > * m_itemMap
int m_freeCustomWidgetIndex
KoSectionListItem * m_templatesSeparator
void dropEvent(QDropEvent *event) override
void splitterResized(KisDetailsPane *sender, const QList< int > &sizes)
Emitted when one of the detail panes have changed it's splitter.
void initTemplates(const QString &templatesResourcePath)
void openFileDialog()
when clicked "Open Existing Document" button
void saveSplitterSizes(KisDetailsPane *sender, const QList< int > &sizes)
Saves the splitter sizes for KisDetailsPaneBase based panes.
void openTemplate(const QUrl &)
void updateSelectedWidget()
bool selectItem(const QString &name)
Selects an option out of the dialog based on its untranslated name.
void addCustomDocumentWidget(QWidget *widget, const QString &title, const QString &untranslatedName, const QString &icon=QString())
KisOpenPane(QWidget *parent, const QStringList &mimeFilter, const QString &templatesResourcePath=QString())
void slotOpenTemplate(const QUrl &url)
QTreeWidgetItem * addPane(const QString &title, const QString &untranslatedName, const QString &iconName, QWidget *widget, int sortWeight)
KisOpenPanePrivate *const d
void openExistingFile(const QUrl &)
void itemClicked(QTreeWidgetItem *item)
void alwaysUseChanged(KisTemplatesPane *sender, const QString &alwaysUse)
Emitted when the always use template has changed.
void dragEnterEvent(QDragEnterEvent *event) override
int sortingWeight() const
QList< KisTemplate * > templates() const
bool isHidden() const
If all children are hidden, we are hidden too.
KisTemplateGroup * defaultGroup() const
QList< KisTemplateGroup * > groups() const
KisTemplate * defaultTemplate() const
bool isSelected()
Returns true if a template in this group was the last one selected.
QString m_untranslatedName
bool operator<(const QTreeWidgetItem &other) const override
QString untranslatedName() const
KoSectionListItem(QTreeWidget *treeWidget, const QString &name, QString untranslatedName, int sortWeight, int widgetIndex=-1)
QIcon loadIcon(const QString &name)