29 #ifndef KLFLIBBROWSER_P_H
30 #define KLFLIBBROWSER_P_H
33 #include <QStackedWidget>
37 #include <QDragMoveEvent>
39 #include <QStackedLayout>
41 #include <QFileDialog>
45 #include <QSignalMapper>
46 #include <QDesktopServices>
47 #include <QMessageBox>
49 #include <ui_klflibexportdialog.h>
66 KLF_DEBUG_WATCH_OBJECT(
this) ;
74 qWarning()<<
"KLFLibBrowserViewContainer: NULL RESOURCE! Expect Imminent Crash!";
79 for (k = 0; k < allViewTypeIdents.size(); ++k) {
80 QString vtype = allViewTypeIdents[k];
84 if (thisViewTypeIdentOk)
89 action->setCheckable(
true);
90 connect(action, SIGNAL(triggered(
bool)), actionSignalMapper, SLOT(map()));
92 action->setEnabled(thisViewTypeIdentOk);
118 if (v == NULL) {
klfDbg(
"view is NULL ..."); }
149 curViewTypeIdent = vti;
151 vstate[
"ViewTypeIdentifier"] = vti;
152 vstate[
"ViewState"] = QVariant::fromValue<QVariantMap>(view->
saveGuiState());
153 vlist << QVariant::fromValue<QVariantMap>(vstate);
154 saved_view_types << vti;
158 QVariantList lastViewStateList =
pViewState.value(
"StateList").toList();
159 for (QVariantList::const_iterator cit = lastViewStateList.begin();
160 cit != lastViewStateList.end(); ++cit) {
161 const QVariantMap& vmap = (*cit).toMap();
163 if (saved_view_types.
contains(vmap.value(
"ViewTypeIdentifier").toString()))
166 vlist << QVariant::fromValue<QVariantMap>(vmap);
170 v[
"StateList"] = QVariant::fromValue<QVariantList>(vlist);
172 v[
"CurrentViewTypeIdentifier"] = QVariant::fromValue<QString>(curViewTypeIdent);
180 klfDbg(
"loading view state map: "<<v) ;
182 const QVariantList vlist = v[
"StateList"].toList();
183 const QString curvti = v[
"CurrentViewTypeIdentifier"].toString();
185 for (k = 0; k < vlist.size(); ++k) {
186 const QVariantMap vstate = vlist[k].toMap();
187 QString vti = vstate[
"ViewTypeIdentifier"].toString();
188 klfDbg(
"considering to restore view type "<<vti) ;
191 klfDbg(
"restore view type "<<vti) ;
197 qWarning()<<
"Can't open view of type "<<vti<<
" for resource "<<
url()<<
"!";
224 for (k = 0; k < subreslist.size(); ++k) {
233 url.
addQueryItem(
"klfDefaultSubResource", subreslist[k]);
238 klfDbg(
"re-using action for url="<<urlstr<<
" from our local action cache") ;
241 klfDbg(
"creating action for url="<<urlstr<<
", it is not yet in our local action cache...") ;
246 KLF_DEBUG_WATCH_OBJECT(a) ;
250 <<a->data().toString()) ;
264 klfDbg(
": view type "<<viewTypeIdent<<
" is already open at index ="
274 qWarning() <<
"The factory can't open a view of type "<<viewTypeIdent<<
"!";
278 if (viewTypeIdent ==
"default") {
280 if (defview == NULL) {
281 qWarning()<<
KLF_FUNC_NAME<<
": Created view of type"<<viewTypeIdent<<
", that is NOT a KLFLibDefaultView ?!?";
287 KLF_DEBUG_WATCH_OBJECT(v) ;
289 v->setContextMenuPolicy(Qt::CustomContextMenu);
305 connect(v, SIGNAL(customContextMenuRequested(
const QPoint&)),
311 klfDbgT(
": connected signals.");
320 int curindex = currentIndex();
325 klfDbgT(
": added widget, about to raise");
326 if (currentIndex() == curindex)
327 setCurrentIndex(index);
337 const QVariantList& vlist =
pViewState[
"StateList"].toList();
338 klfDbg(
"possibly restoring a GUI state... list size="<<vlist.size()) ;
340 for (k = 0; k < vlist.size(); ++k) {
341 const QVariantMap& vstate = vlist[k].toMap();
342 QString vti = vstate[
"ViewTypeIdentifier"].toString();
343 if (vti != viewTypeIdent)
345 klfDbg(
"Restoring gui state, match found for vti[="<<vti<<
"]==viewTypeIdent[="<<viewTypeIdent<<
"]!") ;
373 if (sender() ==
view())
377 if (sender() ==
view())
381 if (sender() ==
view())
385 if (sender() ==
view())
389 if (sender() ==
view())
461 setUsesScrollButtons(
false);
463 pTabBar->setAcceptDrops(
true);
464 pTabBar->installEventFilter(
this);
471 QPoint tabbarpos = pTabBar->mapFromGlobal(mapToGlobal(pos));
472 return pTabBar->
tabAt(tabbarpos);
478 return QRect(mapFromGlobal(pTabBar->mapToGlobal(tabbarrect.
topLeft())),
484 if (
object == pTabBar && event->
type() == QEvent::DragEnter) {
489 if (
object == pTabBar && event->
type() == QEvent::DragMove) {
496 setCurrentIndex(index);
499 return QTabWidget::eventFilter(
object, event);
535 QColor normalColor = pal.
color(QPalette::Active, QPalette::ButtonText);
536 QColor readOnlyColor = pal.
color(QPalette::Disabled, QPalette::ButtonText);
566 :
QMenu(tabwidget), pTabWidget(tabwidget)
568 setTitle(tr(
"Switch to Tab"));
570 pActionGroup->setExclusive(
true);
573 for (k = 0; k < pTabWidget->count(); ++k) {
577 connect(pTabWidget, SIGNAL(pageInserted(
int,
const QIcon&,
const QString&)),
579 connect(pTabWidget, SIGNAL(pageRemoved(
int)),
this, SLOT(
slotPageRemoved(
int)));
580 connect(pTabWidget, SIGNAL(pageTextChanged(
int,
const QString&)),
582 connect(pTabWidget, SIGNAL(pageIconChanged(
int,
const QIcon&)),
584 connect(pTabWidget, SIGNAL(pageEnabled(
int,
bool)),
this, SLOT(
slotPageEnabled(
int,
bool)));
598 a->setCheckable(
true);
600 if (index < actions().size())
601 insertAction(actions()[index], a);
608 if (index >= 0 && index < actions().size())
609 removeAction(actions()[index]);
613 if (index >= 0 && index < actions().size())
614 actions()[index]->setText(text);
618 if (index >= 0 && index < actions().size())
619 actions()[index]->setIcon(icon);
623 if (index >= 0 && index < actions().size())
624 actions()[index]->setEnabled(enable);
628 if (index >= 0 && index < actions().size())
629 actions()[index]->setChecked(
true);
642 for (k = 0; k < alist.
size(); ++k) {
644 pTabWidget->setCurrentIndex(k);
678 if (result != QDialog::Accepted)
684 if (param.
contains(
"klfRetry") && param[
"klfRetry"].toBool())
686 if (param.
contains(
"klfCancel") && param[
"klfCancel"].toBool())
698 qWarning()<<
KLF_FUNC_NAME<<
": factory create parameters did not provide a scheme!";
701 QString scheme = param[
"klfScheme"].toString();
703 if (efactory == NULL) {
704 qWarning()<<
KLF_FUNC_NAME<<
": can't find factory for scheme "<<scheme<<
"!";
710 param[
"klfDefaultSubResource"] =
QLatin1String(
"export_xtra");
713 if (resource == NULL) {
715 tr(
"Can't create resource %1!").arg(param[
"Filename"].toString()));
716 qWarning()<<
KLF_FUNC_NAME<<
": Failed to create resource of type "<<scheme<<
" with parameters: "<<param;
725 :
QDialog(libbrowser, 0), pLibBrowser(libbrowser), pModel(NULL),
726 pInSlotItemChanged(false)
729 setWindowModality(Qt::WindowModal);
733 if (wfactory == NULL) {
734 qWarning()<<
KLF_FUNC_NAME<<
": Can't find factory for type 'LocalFile'!";
740 pdefault[
"Url"] =
QUrl(
"klf+legacy://"+tr(
"%1/klatexformula_export_%2.klf").arg(mydir, filedate));
742 lyt_gbxExportLocalFileWidget->setObjectName(
"lyt_gbxExportLocalFileWidget");
743 lyt_gbxExportLocalFileWidget->setContentsMargins(0,0,0,0);
744 lyt_gbxExportLocalFileWidget->setSpacing(0);
747 lyt_gbxExportLocalFileWidget->
addWidget(localFileWidget);
748 localFileWidget->
setFixedHeight(localFileWidget->minimumSizeHint().height()+4);
749 gbxExportLocalFileWidget->setSizePolicy(
QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed));
752 lstRes->setModel(pModel);
756 connect(btnSelectAll, SIGNAL(clicked()),
this, SLOT(
selectAll()));
757 connect(btnUnselectAll, SIGNAL(clicked()),
this, SLOT(
unselectAll()));
759 populateExportList();
768 for (k = 0; k < root->
rowCount(); ++k) {
772 for (j = 0; j < resItem->
rowCount(); ++j) {
773 if (resItem->
child(j)->checkState() != Qt::Unchecked) {
782 if (resItem->checkState() != Qt::Unchecked)
797 for (k = 0; k < root->
rowCount(); ++k) {
798 root->
child(k)->setCheckState(select ? Qt::Checked : Qt::Unchecked);
810 if (pInSlotItemChanged)
812 pInSlotItemChanged =
true;
813 Qt::CheckState chk = item->checkState();
817 if ((chk == Qt::Checked || chk == Qt::Unchecked) && oldchk != chk) {
823 for (k = 0; k < item->
rowCount(); ++k) {
826 item->
child(k)->setCheckState(chk);
839 pInSlotItemChanged =
false;
846 bool pInSlotItemChanged;
852 void populateExportList()
860 for (k = 0; k < openurls.
size(); ++k) {
864 if (openurls[k].hasQueryItem(
"klfDefaultSubResource")) {
865 subreslist =
QStringList() << openurls[k].queryItemValue(
"klfDefaultSubResource");
871 for (j = 0; j < subreslist.size(); ++j) {
872 if (findSubResourceItem(res, subreslist[j]) != NULL)
882 srtitle = subreslist[j];
884 item->
setFlags(Qt::ItemIsSelectable|Qt::ItemIsUserCheckable|Qt::ItemIsEnabled);
897 for (j = 0; j < root->
rowCount(); ++j) {
899 return root->
child(j);
905 item->
setFlags(Qt::ItemIsSelectable|Qt::ItemIsUserCheckable|Qt::ItemIsEnabled);
916 for (k = 0; k < parent->
rowCount(); ++k) {
918 return parent->
child(k);
void setSearchTarget(KLFSearchable *target)
void slotMoreCategorySuggestions(const QStringList &categorylist)
void setGroupSubCategories(bool yesOrNo)
QList< QUrl > openUrls() const
KLFLibResourceEngine * resourceEngine()
QVariantMap saveGuiState() const
QList< QUrl > selectedExportUrls()
virtual QString viewTypeTitle(const QString &viewTypeIdent) const =0
ignore(const QRect &rectangle)
void requestOpenUrl(const QString &url)
static QStringList allSupportedViewTypeIdentifiers()
virtual QVariant subResourceProperty(const QString &subResource, int propId) const
void loadGuiState(const QVariantMap &v)
virtual KLFAbstractLibView * createLibView(const QString &viewTypeIdent, QWidget *parent, KLFLibResourceEngine *resourceEngine)=0
virtual bool canCreateLibView(const QString &viewTypeIdent, KLFLibResourceEngine *engine)=0
QList< QAction * > pViewTypeActions
void slotCurrentChanged(int index)
#define klfDbgT(streamableItems)
Sub-Resources may be assigned properties and values.
KLFLibResourceEngine * getOpenResource(const QUrl &url)
color(ColorGroup group, ColorRole role)
virtual QVariantMap saveGuiState() const =0
contains(const QString &str, Qt::CaseSensitivity cs=Qt::CaseSensitive)
virtual ~KLFLibBrowserViewContainer()
virtual bool setSubResourceProperty(const QString &subResource, int propId, const QVariant &value)
#define klfDbg(streamableItems)
KLFLibResourceEngine * pResource
void viewContextMenuRequested(const QPoint &pos)
QList< QAction * > openSubResourceActions()
#define KLF_DEBUG_BLOCK(msg)
setHorizontalHeaderLabels(const QStringList &labels)
virtual bool setViewType(const QString &viewType)
void viewOperationStartReportingProgress(KLFProgressReporter *progressReporter, const QString &descriptiveText)
bool openView(const QString &viewTypeIdent)
toString(FormattingOptions options=None)
KLFAbstractLibView * view()
void selectAll(bool select=true)
#define KLF_ASSERT_NOT_NULL(ptr, msg, failaction)
setData(const QVariant &value, int role=Qt::UserRole+1)
static KLFLibViewFactory * findFactoryFor(const QString &viewTypeIdentifier)
setTabText(int index, const QString &label)
setMapping(QObject *sender, int id)
virtual bool restoreGuiState(const QVariantMap &state)=0
setTabTextColor(int index, const QColor &color)
setColumnCount(int columns)
indexFromItem(const QStandardItem *item)
QStringList supportedViewTypeIdentifiers() const
QStringList pOkViewTypeIdents
appendRow(const QList< QStandardItem * > &items)
setFlags(Qt::ItemFlags flags)
Data can be stored in separate sub-resources.
int findViewTypeAction(const QString &vtype)
void slotRequestRestoreStyle(const KLFStyle &style)
A view widget to display a library resource's contents.
virtual KLFLibResourceEngine * createResource(const QString &scheme, const Parameters ¶meters, QObject *parent=NULL)
Create a new resource of given type and parameters.
QString currentViewTypeIdentifier()
QMap< QString, QAction * > pOpenSubResActionCache
void slotResourceDataChanged(const QList< KLFLib::entryId > &entryIdList)
virtual QString defaultSubResource() const
#define KLF_DEBUG_TIME_BLOCK(msg)
child(int row, int column=0)
KLFLibBrowserViewContainer(KLFLibResourceEngine *resource, QTabWidget *parent)
setData(const QVariant &userData)
virtual QUrl url() const =0
Display Resource URL. NOT exactly like KLFLibResourceEngine::url() !
virtual uint supportedFeatureFlags() const
List of features supported by this resource engine.
virtual KLFLibEntryList selectedEntries() const =0
virtual QStringList subResourceList() const
virtual QString title() const
The human-set title of this resource.
void resourceDataChanged(const QList< KLFLib::entryId > &entryIdList)
virtual KLFSearchable * searchable()
void viewTypeChanged(const QString &)
KLFLibExportDialog(KLFLibBrowser *libbrowser)
setText(const QString &text)
QString lastFileDialogPath
void setResourceRoleFlags(uint flags)
An entry (single formula) in the library.
void requestRestore(const KLFLibEntry &entry, uint restoreflags=KLFLib::RestoreLatexAndStyle)
static KLFLibEngineFactory * findFactoryFor(const QUrl &url)
void requestRestoreStyle(const KLFStyle &style)
critical(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons=Ok, StandardButton defaultButton=NoButton)
tabAt(const QPoint &position)
addQueryItem(const QString &key, const QString &value)
void slotRequestRestore(const KLFLibEntry &entry, uint restoreflags=KLFLib::RestoreLatexAndStyle)
static KLFLibResourceEngine * showExportDialogCreateResource(KLFLibBrowser *libbrowser, QList< QUrl > *exportUrls)
setCheckState(Qt::CheckState state)
void entriesSelected(const KLFLibEntryList &entries)
virtual QUrl url(uint flags=0x0) const
query URL
QString defaultSubResource()
An abstract resource engine.
void moreCategorySuggestions(const QStringList &categorylist)
struct KLFConfig::@4 LibraryBrowser
QActionGroup * pViewTypeActionGroup
uint resourceRoleFlags() const
data(int role=Qt::UserRole+1)
QMap< QString, int > pOpenViewTypeIdents
void internalRequestOpenSubResourceSender()
QList< QAction * > viewTypeActions() const
void slotEntriesSelected(const KLFLibEntryList &entries)