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 {
111 QStyledItemDelegate* delegate =
new QStyledItemDelegate(
d->m_sectionList);
112 d->m_sectionList->setItemDelegate(delegate);
115 connect(scroller, &QScroller::stateChanged,
this, [&](QScroller::State state) {
120 connect(
d->m_sectionList, SIGNAL(itemSelectionChanged()),
124 connect(
d->m_sectionList, SIGNAL(itemActivated(QTreeWidgetItem*,
int)),
131 if (!
d->m_sectionList->selectedItems().isEmpty())
136 d->m_widgetStack->widget(selectedItem->
widgetIndex())->setFocus();
143 KConfigGroup cfgGrp( KSharedConfig::openConfig(),
"TemplateChooserDialog"); sizes = cfgGrp.readEntry(
"DetailsPaneSplitterSizes", sizes);
145 if (!sizes.isEmpty())
151 setAcceptDrops(
true);
156 if (!
d->m_sectionList->selectedItems().isEmpty()) {
160 if (!qobject_cast<KisDetailsPane*>(
d->m_widgetStack->widget(item->
widgetIndex()))) {
161 KConfigGroup cfgGrp( KSharedConfig::openConfig(),
"TemplateChooserDialog");
176 dialog.setCaption(i18n(
"Open Existing Document"));
177 dialog.setDefaultDir(QStandardPaths::writableLocation(QStandardPaths::PicturesLocation));
179 Q_FOREACH (
const QString &filename, dialog.filenames()) {
192 QTreeWidgetItem* selectItem = 0;
193 QTreeWidgetItem* firstItem = 0;
194 const int templateOffset = 1000;
196 if (!templatesResourcePath.isEmpty()) {
219 QTreeWidgetItem* item =
addPane(group->
name(),
"Template", group->
templates().first()->loadPicture(),
237 firstItem =
d->m_sectionList->topLevelItem(0);
240 KConfigGroup cfgGrp( KSharedConfig::openConfig(),
"TemplateChooserDialog");
242 if (selectItem && (cfgGrp.readEntry(
"LastReturnType") ==
"Template")) {
243 d->m_sectionList->setCurrentItem(selectItem, 0, QItemSelectionModel::ClearAndSelect);
245 else if (
d->m_sectionList->selectedItems().isEmpty() && firstItem) {
246 d->m_sectionList->setCurrentItem(firstItem, 0, QItemSelectionModel::ClearAndSelect);
252 if (event->mimeData()->hasUrls()) {
259 if (event->mimeData()->hasUrls() && event->mimeData()->urls().size() > 0) {
274 KConfigGroup cfgGrp( KSharedConfig::openConfig(),
"TemplateChooserDialog");
276 QString lastActiveItem = cfgGrp.readEntry(
"LastReturnType");
277 bool showCustomItemByDefault = cfgGrp.readEntry(
"ShowCustomDocumentWidgetByDefault",
false);
278 if (lastActiveItem == untranslatedName || (lastActiveItem.isEmpty() && showCustomItemByDefault)) {
279 d->m_sectionList->setCurrentItem(item, 0, QItemSelectionModel::ClearAndSelect);
281 d->m_widgetStack->widget(selectedItem->
widgetIndex())->setFocus();
286QTreeWidgetItem*
KisOpenPane::addPane(
const QString &title,
const QString &untranslatedName,
const QString &iconName, QWidget *widget,
int sortWeight)
292 int id =
d->m_widgetStack->addWidget(widget);
297 QPixmap iconPixmap = icon.pixmap(32, 32);
299 QIcon finalIcon(iconPixmap);
300 listItem->setIcon(0, finalIcon);
305QTreeWidgetItem*
KisOpenPane::addPane(
const QString &title,
const QString &untranslatedName,
const QPixmap& icon, QWidget* widget,
int sortWeight)
311 int id =
d->m_widgetStack->addWidget(widget);
317 if (!icon.isNull()) {
318 QImage image = icon.toImage();
320 if (!image.isNull() && ((image.width() >
iconSize) || (image.height() >
iconSize))) {
321 image = image.scaled(
iconSize,
iconSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
324 image.convertTo(QImage::Format_ARGB32);
326 listItem->setIcon(0, QIcon(QPixmap::fromImage(image)));
334 if(!
d->m_sectionList->selectedItems().isEmpty())
341 d->m_widgetStack->setCurrentIndex(section->
widgetIndex());
348 KConfigGroup cfgGrp( KSharedConfig::openConfig(),
"TemplateChooserDialog");
349 cfgGrp.writeEntry(
"DetailsPaneSplitterSizes", sizes);
356 if (selectedItem && selectedItem->
widgetIndex() >= 0) {
357 d->m_widgetStack->widget(selectedItem->
widgetIndex())->setFocus();
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
int iconSize(qreal width, qreal height)
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()
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)