Browse Source

Insert image dialog

Kandrashin Denis 12 years ago
parent
commit
3289c7ef2d
6 changed files with 64 additions and 17 deletions
  1. 1 0
      fb2edit.pro
  2. 53 14
      source/fb2dlgs.cpp
  3. 8 2
      source/fb2dlgs.hpp
  4. 1 1
      source/fb2temp.cpp
  5. BIN
      source/res/dots.png
  6. 1 0
      source/res/fb2edit.qrc

+ 1 - 0
fb2edit.pro

@@ -52,6 +52,7 @@ QT += network
 QT += xmlpatterns
 
 OTHER_FILES += \
+    source/res/dots.png \
     source/res/style.css \
     source/res/blank.fb2 \
     source/js/export.js \

+ 53 - 14
source/fb2dlgs.cpp

@@ -167,7 +167,7 @@ FbSetupDlg::FbSetupDlg(QWidget *parent)
 }
 
 //---------------------------------------------------------------------------
-//  FbSetupDlg
+//  FbImageDlg::FbTab
 //---------------------------------------------------------------------------
 
 FbImageDlg::FbTab::FbTab(QWidget* parent)
@@ -182,7 +182,6 @@ FbImageDlg::FbTab::FbTab(QWidget* parent)
     combo = new QComboBox(this);
     QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
     combo->setSizePolicy(sizePolicy);
-    combo->setEditable(true);
     layout->addWidget(combo, 0, 1, 1, 1);
 
     QFrame *frame = new FbTextFrame(this);
@@ -191,19 +190,22 @@ FbImageDlg::FbTab::FbTab(QWidget* parent)
 
     preview = new QWebView(this);
     frame->layout()->addWidget(preview);
-    preview->load(QUrl("about:blank"));
 }
 
-FbImageDlg::FbImageDlg(QWidget *parent)
-    : QDialog(parent)
+//---------------------------------------------------------------------------
+//  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);
-    notebook->addTab(tabPict = new FbTab(notebook), tr("Collection"));
-    notebook->addTab(tabFile = new FbTab(notebook), tr("New file"));
     layout->addWidget(notebook);
 
     QDialogButtonBox *buttons = new QDialogButtonBox(this);
@@ -211,14 +213,51 @@ FbImageDlg::FbImageDlg(QWidget *parent)
     buttons->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
     layout->addWidget(buttons);
 
-    QObject::connect(buttons, SIGNAL(accepted()), this, SLOT(accept()));
-    QObject::connect(buttons, SIGNAL(rejected()), this, SLOT(reject()));
-
-    resize(minimumSizeHint());
+    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);
+    notebook->addTab(tabFile, tr("New 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("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(qrc:/dots.png);}";
+//      "QComboBox::drop-down{border:0px;margin:0px;}"
+        "QComboBox::down-arrow{image:url(:dots.png);}";
     tabFile->combo->setStyleSheet(style);
-    tabPict->combo->setFocus();
+
+    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());
+}
+

+ 8 - 2
source/fb2dlgs.hpp

@@ -21,6 +21,8 @@ class FbFind;
 class FbSetup;
 }
 
+
+
 class FbCodeFindDlg : public QDialog
 {
     Q_OBJECT
@@ -94,12 +96,16 @@ private:
     };
 
 public:
-    explicit FbImageDlg(QWidget *parent = 0);
+    explicit FbImageDlg(FbTextEdit *text);
+
+private slots:
+    void pictureActivated(const QString & text);
+    void notebookChanged(int index);
 
 private:
     QTabWidget *notebook;
-    FbTab *tabPict;
     FbTab *tabFile;
+    FbTab *tabPict;
 };
 
 #endif // FB2DLGS_H

+ 1 - 1
source/fb2temp.cpp

@@ -388,7 +388,7 @@ void FbListWidget::loadFinished()
 
 void FbListWidget::showImage(const QString &name)
 {
-    QUrl url = m_text->page()->mainFrame()->url();
+    QUrl url = m_text->url();
     url.setFragment(name);
     QString html = QString("<img src=%1 valign=center align=center width=100%>").arg(url.toString());
     m_view->setHtml(html);

BIN
source/res/dots.png


+ 1 - 0
source/res/fb2edit.qrc

@@ -9,5 +9,6 @@
         <file>style.css</file>
         <file alias="ts/ru.qm">../ts/ru.qm</file>
         <file alias="js/jquery.js">../../3rdparty/jQuery/jquery.js</file>
+        <file>dots.png</file>
     </qresource>
 </RCC>