123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291 |
- #include "fb2dlgs.hpp"
- #include "fb2code.hpp"
- #include "fb2page.hpp"
- #include "fb2text.hpp"
- #include "fb2tree.hpp"
- #include "fb2utils.h"
- #include "ui_fb2find.h"
- #include "ui_fb2setup.h"
- #include <QComboBox>
- #include <QDialogButtonBox>
- #include <QFileDialog>
- #include <QFrame>
- #include <QLabel>
- #include <QLineEdit>
- #include <QTabWidget>
- #include <QToolBar>
- #include <QWebFrame>
- #include <QWebPage>
- //---------------------------------------------------------------------------
- // FbCodeFindDlg
- //---------------------------------------------------------------------------
- FbCodeFindDlg::FbCodeFindDlg(FbCodeEdit &edit)
- : QDialog(&edit)
- , ui(new Ui::FbFind)
- , m_edit(edit)
- {
- ui->setupUi(this);
- ui->checkHigh->setText(tr("Complete words"));
- connect(ui->btnFind, SIGNAL(clicked()), this, SLOT(find()));
- }
- FbCodeFindDlg::~FbCodeFindDlg()
- {
- delete ui;
- }
- void FbCodeFindDlg::find()
- {
- QString text = ui->editText->text();
- if (text.isEmpty()) return;
- QTextDocument::FindFlags options = 0;
- if (ui->radioUp->isChecked()) options |= QTextDocument::FindBackward;
- if (ui->checkCase->isChecked()) options |= QTextDocument::FindCaseSensitively;
- if (ui->checkHigh->isChecked()) options |= QTextDocument::FindWholeWords;
- m_edit.findText(text, options);
- }
- //---------------------------------------------------------------------------
- // FbTextFindDlg
- //---------------------------------------------------------------------------
- FbTextFindDlg::FbTextFindDlg(FbTextEdit &edit)
- : QDialog(&edit)
- , ui(new Ui::FbFind)
- , m_edit(edit)
- {
- ui->setupUi(this);
- ui->checkHigh->hide();
- connect(ui->btnFind, SIGNAL(clicked()), this, SLOT(find()));
- }
- FbTextFindDlg::~FbTextFindDlg()
- {
- m_edit.findText(QString(), QWebPage::HighlightAllOccurrences);
- delete ui;
- }
- void FbTextFindDlg::find()
- {
- QString text = ui->editText->text();
- if (text.isEmpty()) return;
- QWebPage::FindFlags options = QWebPage::FindWrapsAroundDocument;
- if (ui->radioUp->isChecked()) options |= QWebPage::FindBackward;
- if (ui->checkCase->isChecked()) options |= QWebPage::FindCaseSensitively;
- m_edit.findText(text, options);
- options |= QWebPage::HighlightAllOccurrences;
- m_edit.findText(text, options);
- }
- //---------------------------------------------------------------------------
- // FbNoteDlg
- //---------------------------------------------------------------------------
- FbNoteDlg::FbNoteDlg(FbTextEdit &view)
- : QDialog(&view)
- {
- setWindowTitle(tr("Insert footnote"));
- resize(460, 300);
- QGridLayout * gridLayout = new QGridLayout(this);
- QLabel * label1 = new QLabel(this);
- label1->setText(tr("Identifier:"));
- gridLayout->addWidget(label1, 0, 0, 1, 1);
- m_key = new QComboBox(this);
- QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
- gridLayout->addWidget(m_key, 0, 1, 1, 1);
- QLabel * label2 = new QLabel(this);
- label2->setText(tr("Title:"));
- gridLayout->addWidget(label2, 1, 0, 1, 1);
- m_title = new QLineEdit(this);
- m_title->setObjectName(QString::fromUtf8("m_title"));
- gridLayout->addWidget(m_title, 1, 1, 1, 1);
- m_toolbar = new QToolBar(this);
- gridLayout->addWidget(m_toolbar, 2, 0, 1, 2);
- QFrame * frame = new QFrame(this);
- frame->setFrameShape(QFrame::StyledPanel);
- frame->setFrameShadow(QFrame::Sunken);
- gridLayout->addWidget(frame, 3, 0, 1, 2);
- QLayout * frameLayout = new QBoxLayout(QBoxLayout::LeftToRight, frame);
- frameLayout->setSpacing(0);
- frameLayout->setMargin(0);
- m_text = new FbTextBase(frame);
- m_text->setObjectName(QString::fromUtf8("m_text"));
- m_text->setUrl(QUrl(QString::fromUtf8("about:blank")));
- frameLayout->addWidget(m_text);
- QDialogButtonBox * buttonBox = new QDialogButtonBox(this);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
- buttonBox->setOrientation(Qt::Horizontal);
- buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
- gridLayout->addWidget(buttonBox, 4, 0, 1, 2);
- QObject::connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
- QObject::connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
- m_key->addItem(tr("<create new>"));
- m_key->setCurrentIndex(0);
- m_title->setFocus();
- FbTextPage *page = new FbTextPage(this);
- connect(m_text, SIGNAL(loadFinished(bool)), SLOT(loadFinished()));
- page->setNetworkAccessManager(view.page()->networkAccessManager());
- page->setContentEditable(true);
- m_text->setPage(page);
- m_text->setHtml("<body><p><br></p></body>");
- m_text->addTools(m_toolbar);
- }
- void FbNoteDlg::loadFinished()
- {
- FbTextElement body = m_text->page()->mainFrame()->documentElement().findFirst("body");
- body.select();
- }
- //---------------------------------------------------------------------------
- // FbSetupDlg
- //---------------------------------------------------------------------------
- FbSetupDlg::FbSetupDlg(QWidget *parent)
- : QDialog(parent)
- , ui(new Ui::FbSetup)
- {
- ui->setupUi(this);
- }
- //---------------------------------------------------------------------------
- // FbImageDlg::FbTab
- //---------------------------------------------------------------------------
- FbImageDlg::FbTab::FbTab(QWidget* parent)
- : QWidget(parent)
- {
- QGridLayout * layout = new QGridLayout(this);
- label = new QLabel(this);
- label->setText(tr("File name:"));
- layout->addWidget(label, 0, 0, 1, 1);
- combo = new FbImageCombo(this);
- QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
- combo->setSizePolicy(sizePolicy);
- layout->addWidget(combo, 0, 1, 1, 1);
- QFrame *frame = new FbTextFrame(this);
- frame->setMinimumSize(QSize(300, 200));
- layout->addWidget(frame, 1, 0, 1, 2);
- preview = new QWebView(this);
- frame->layout()->addWidget(preview);
- }
- //---------------------------------------------------------------------------
- // FbImageCombo
- //---------------------------------------------------------------------------
- void FbImageCombo::showPopup()
- {
- QComboBox::showPopup();
- if (isEditable()) {
- emit popup();
- QComboBox::hidePopup();
- }
- }
- void FbImageCombo::selectFile()
- {
- QString filters;
- filters += tr("Common Graphics (*.png *.jpg *.jpeg *.gif)") += ";;";
- filters += tr("Portable Network Graphics (PNG) (*.png)") += ";;";
- filters += tr("JPEG (*.jpg *.jpeg)") += ";;";
- filters += tr("Graphics Interchange Format (*.gif)") += ";;";
- filters += tr("All Files (*)");
- QString path = QFileDialog::getOpenFileName(this, tr("Insert image..."), QString(), filters);
- if (!path.isEmpty()) setEditText(path);
- }
- //---------------------------------------------------------------------------
- // FbImageDlg
- //---------------------------------------------------------------------------
- FbImageDlg::FbImageDlg(FbTextEdit *text)
- : QDialog(text)
- , tabFile(0)
- , tabPict(0)
- {
- setWindowTitle(tr("Insert picture"));
- QBoxLayout *layout = new QBoxLayout(QBoxLayout::TopToBottom, this);
- notebook = new QTabWidget(this);
- layout->addWidget(notebook);
- QDialogButtonBox *buttons = new QDialogButtonBox(this);
- buttons->setOrientation(Qt::Horizontal);
- buttons->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
- layout->addWidget(buttons);
- connect(buttons, SIGNAL(accepted()), SLOT(accept()));
- connect(buttons, SIGNAL(rejected()), SLOT(reject()));
- connect(notebook, SIGNAL(currentChanged(int)), SLOT(notebookChanged(int)));
- QUrl url = text->url();
- tabFile = new FbTab(notebook);
- tabFile->combo->setEditable(true);
- tabFile->preview->setHtml(QString(), url);
- connect(tabFile->combo, SIGNAL(popup()), tabFile->combo, SLOT(selectFile()));
- notebook->addTab(tabFile, tr("Select file"));
- if (text->store()->count()) {
- FbListModel *model = new FbListModel(text, this);
- tabPict = new FbTab(notebook);
- tabPict->preview->setHtml(QString(), url);
- tabPict->combo->setModel(model);
- tabPict->combo->setCurrentIndex(0);
- tabPict->preview->page()->setNetworkAccessManager(text->page()->networkAccessManager());
- notebook->addTab(tabPict, tr("From collection"));
- connect(tabPict->combo, SIGNAL(activated(QString)), SLOT(pictureActivated(QString)));
- tabPict->combo->setFocus();
- }
- QString style =
- // "QComboBox::drop-down{border:0px;margin:0px;}"
- "QComboBox::down-arrow{image:url(:dots.png);}";
- tabFile->combo->setStyleSheet(style);
- tabFile->combo->setFocus();
- resize(minimumSizeHint());
- }
- void FbImageDlg::notebookChanged(int index)
- {
- if (index) {
- disconnect(notebook, SIGNAL(currentChanged(int)), this, SLOT(notebookChanged(int)));
- if (tabPict) pictureActivated(tabPict->combo->itemText(0));
- }
- }
- void FbImageDlg::pictureActivated(const QString & text)
- {
- QUrl url = tabPict->preview->url();
- url.setFragment(text);
- QString html = QString("<img src=%1 valign=center align=center width=100%>").arg(url.toString());
- tabPict->preview->setHtml(html, tabPict->preview->url());
- }
|