Explorar el Código

Insert element

Kandrashin Denis hace 13 años
padre
commit
daec783c4d
Se han modificado 5 ficheros con 104 adiciones y 46 borrados
  1. 1 2
      fb2edit.pro
  2. 58 12
      source/fb2head.cpp
  3. 4 1
      source/fb2head.hpp
  4. 40 31
      source/fb2tree.cpp
  5. 1 0
      source/fb2tree.hpp

+ 1 - 2
fb2edit.pro

@@ -64,5 +64,4 @@ if (unix) {
 
 FORMS += \
     source/fb2note.ui \
-    source/fb2find.ui \
-    source/new_node.ui
+    source/fb2find.ui

+ 58 - 12
source/fb2head.cpp

@@ -170,7 +170,7 @@ Fb2HeadItem::HintHash::HintHash()
 FB2_BEGIN_KEYHASH(Fb2HeadItem)
     FB2_KEY( Auth   , "author"    );
     FB2_KEY( Cover  , "coverpage" );
-    FB2_KEY( Image  , "img"       );
+    FB2_KEY( Image  , "image"       );
     FB2_KEY( Seqn   , "sequence"  );
 FB2_END_KEYHASH
 
@@ -187,7 +187,7 @@ Fb2HeadItem::Fb2HeadItem(QWebElement &element, Fb2HeadItem *parent)
         if (style == "annotation") return;
         if (style == "history") return;
     } else if (m_name == "img") {
-        m_name == "image";
+        m_name = "image";
         m_text = element.attribute("alt");
     }
     addChildren(element);
@@ -200,6 +200,17 @@ Fb2HeadItem::~Fb2HeadItem()
     }
 }
 
+Fb2HeadItem * Fb2HeadItem::append(const QString name)
+{
+    QWebElement element;
+    element.setOuterXml("<div>text</div>");
+    element.addClass(name);
+    m_element.appendInside(element);
+    Fb2HeadItem * child = new Fb2HeadItem(element, this);
+    m_list << child;
+    return child;
+}
+
 void Fb2HeadItem::addChildren(QWebElement &parent)
 {
     QWebElement child = parent.firstChild();
@@ -262,7 +273,7 @@ QString Fb2HeadItem::value() const
         case Cover : {
             QString text;
             foreach (Fb2HeadItem * item, m_list) {
-                if (item->m_name == "img") {
+                if (item->m_name == "image") {
                     if (!text.isEmpty()) text += ", ";
                     text += item->value();
                 }
@@ -448,16 +459,24 @@ Fb2HeadView::Fb2HeadView(Fb2WebView &view, QWidget *parent)
 {
     QAction * act;
 
+    setContextMenuPolicy(Qt::ActionsContextMenu);
+
     actionInsert = act = new QAction(FB2::icon("list-add"), tr("&Append"), this);
+    act->setShortcutContext(Qt::WidgetShortcut);
+    act->setShortcut(QKeySequence("Insert"));
     act->setPriority(QAction::LowPriority);
     connect(act, SIGNAL(triggered()), SLOT(insertNode()));
+    addAction(act);
 
     actionModify = act = new QAction(FB2::icon("list-add"), tr("&Modify"), this);
     act->setPriority(QAction::LowPriority);
 
     actionDelete = act = new QAction(FB2::icon("list-remove"), tr("&Delete"), this);
+    act->setShortcutContext(Qt::WidgetShortcut);
+    act->setShortcut(QKeySequence("Delete"));
     act->setPriority(QAction::LowPriority);
     connect(act, SIGNAL(triggered()), SLOT(deleteNode()));
+    addAction(act);
 
     //setItemDelegate(new QItemDelegate(this));
     setRootIsDecorated(false);
@@ -528,11 +547,31 @@ void Fb2HeadView::insertNode()
 {
     Fb2HeadModel * m = qobject_cast<Fb2HeadModel*>(model());
     if (!m) return;
+
     QModelIndex current = currentIndex();
-    Fb2HeadItem * i = m->item(current);
-    if (!i) return;
-    Fb2NodeDlg dlg(*this, i->scheme());
-    dlg.exec();
+    Fb2HeadItem * item = m->item(current);
+    if (!item) return;
+
+    QString name = item->name().toLower();
+    if (name == "annotation") {
+        item = item->parent();
+    } else if (name == "history") {
+        item = item->parent();
+    }
+
+    QStringList list;
+    item->scheme().items(list);
+    if (list.count() == 0) {
+        item = item->parent();
+        if (!item) return;
+        item->scheme().items(list);
+    }
+
+    Fb2NodeDlg dlg(this, item->scheme(), list);
+    int res = dlg.exec();
+    if (res) {
+        item->append(dlg.value());
+    }
 }
 
 void Fb2HeadView::deleteNode()
@@ -543,8 +582,8 @@ void Fb2HeadView::deleteNode()
 //  Fb2NodeDlg
 //---------------------------------------------------------------------------
 
-Fb2NodeDlg::Fb2NodeDlg(Fb2HeadView &view, Fb2Scheme scheme)
-    : QDialog(&view)
+Fb2NodeDlg::Fb2NodeDlg(QWidget *parent, Fb2Scheme scheme, QStringList &list)
+    : QDialog(parent)
     , m_scheme(scheme)
 {
     setWindowTitle(tr("Insert tag"));
@@ -556,9 +595,6 @@ Fb2NodeDlg::Fb2NodeDlg(Fb2HeadView &view, Fb2Scheme scheme)
     label->setText(tr("Tag name:"));
     layout->addWidget(label, 0, 0, 1, 1);
 
-    QStringList list;
-    scheme.items(list);
-
     m_combo = new QComboBox(this);
     m_combo->setEditable(true);
     m_combo->addItems(list);
@@ -581,9 +617,19 @@ Fb2NodeDlg::Fb2NodeDlg(Fb2HeadView &view, Fb2Scheme scheme)
     connect(m_combo, SIGNAL(editTextChanged(QString)), SLOT(comboChanged(QString)));
     connect(buttons, SIGNAL(accepted()), SLOT(accept()));
     connect(buttons, SIGNAL(rejected()), SLOT(reject()));
+
+    if (list.count()) {
+        m_combo->setCurrentIndex(0);
+        comboChanged(list.first());
+    }
 }
 
 void Fb2NodeDlg::comboChanged(const QString &text)
 {
     m_text->setText(m_scheme.element(text).info());
 }
+
+QString Fb2NodeDlg::value() const
+{
+    return m_combo->currentText();
+}

+ 4 - 1
source/fb2head.hpp

@@ -65,6 +65,8 @@ public:
 
     virtual ~Fb2HeadItem();
 
+    Fb2HeadItem * append(const QString name);
+
     Fb2HeadItem * item(const QModelIndex &index) const;
 
     Fb2HeadItem * item(int row) const;
@@ -183,7 +185,8 @@ class Fb2NodeDlg : public QDialog
     Q_OBJECT
 
 public:
-    explicit Fb2NodeDlg(Fb2HeadView &view, Fb2Scheme scheme);
+    explicit Fb2NodeDlg(QWidget *parent, Fb2Scheme scheme, QStringList &list);
+    QString value() const;
 
 private slots:
     void comboChanged(const QString &text);

+ 40 - 31
source/fb2tree.cpp

@@ -234,6 +234,8 @@ Fb2TreeView::Fb2TreeView(Fb2WebView &view, QWidget *parent)
     , m_view(view)
 {
     setHeaderHidden(true);
+    setContextMenuPolicy(Qt::ActionsContextMenu);
+
     connect(this, SIGNAL(activated(QModelIndex)), SLOT(activated(QModelIndex)));
     connect(m_view.page(), SIGNAL(loadFinished(bool)), SLOT(updateTree()));
     connect(m_view.page(), SIGNAL(contentsChanged()), SLOT(contentsChanged()));
@@ -250,6 +252,43 @@ Fb2TreeView::Fb2TreeView(Fb2WebView &view, QWidget *parent)
     QMetaObject::invokeMethod(this, "updateTree", Qt::QueuedConnection);
 }
 
+void Fb2TreeView::initToolbar(QToolBar *toolbar)
+{
+    QAction * act;
+
+    act = new QAction(FB2::icon("list-add"), tr("&Insert"), this);
+    connect(act, SIGNAL(triggered()), SLOT(insertNode()));
+    toolbar->addAction(act);
+    addAction(act);
+
+    act = new QAction(FB2::icon("list-remove"), tr("&Delete"), this);
+    connect(act, SIGNAL(triggered()), SLOT(deleteNode()));
+    toolbar->addAction(act);
+    addAction(act);
+
+    toolbar->addSeparator();
+
+    act = new QAction(FB2::icon("go-up"), tr("&Up"), this);
+    connect(act, SIGNAL(triggered()), SLOT(moveUp()));
+    toolbar->addAction(act);
+    addAction(act);
+
+    act = new QAction(FB2::icon("go-down"), tr("&Down"), this);
+    connect(act, SIGNAL(triggered()), SLOT(moveDown()));
+    toolbar->addAction(act);
+    addAction(act);
+
+    act = new QAction(FB2::icon("go-previous"), tr("&Left"), this);
+    connect(act, SIGNAL(triggered()), SLOT(moveLeft()));
+    toolbar->addAction(act);
+    addAction(act);
+
+    act = new QAction(FB2::icon("go-next"), tr("&Right"), this);
+    connect(act, SIGNAL(triggered()), SLOT(moveRight()));
+    toolbar->addAction(act);
+    addAction(act);
+}
+
 void Fb2TreeView::selectionChanged()
 {
     m_timerSelect.start();
@@ -320,8 +359,6 @@ void Fb2TreeView::moveRight()
 Fb2TreeWidget::Fb2TreeWidget(Fb2WebView &view, QWidget* parent)
     : QWidget(parent)
 {
-    QAction * act;
-
     QVBoxLayout * layout = new QVBoxLayout(this);
     layout->setSpacing(0);
     layout->setContentsMargins(0, 0, 0, 0);
@@ -334,33 +371,5 @@ Fb2TreeWidget::Fb2TreeWidget(Fb2WebView &view, QWidget* parent)
     m_tool = new QToolBar(this);
     layout->addWidget(m_tool);
 
-    act = new QAction(FB2::icon("list-add"), tr("&Insert"), this);
-    connect(act, SIGNAL(triggered()), m_tree, SLOT(insertNode()));
-    m_tool->addAction(act);
-
-    act = new QAction(FB2::icon("list-remove"), tr("&Delete"), this);
-    connect(act, SIGNAL(triggered()), m_tree, SLOT(deleteNode()));
-    m_tool->addAction(act);
-
-    m_tool->addSeparator();
-
-    act = new QAction(FB2::icon("go-up"), tr("&Up"), this);
-    connect(act, SIGNAL(triggered()), m_tree, SLOT(moveUp()));
-    m_tree->actions().append(act);
-    m_tool->addAction(act);
-
-    act = new QAction(FB2::icon("go-down"), tr("&Down"), this);
-    connect(act, SIGNAL(triggered()), m_tree, SLOT(moveDown()));
-    m_tree->actions().append(act);
-    m_tool->addAction(act);
-
-    act = new QAction(FB2::icon("go-previous"), tr("&Left"), this);
-    connect(act, SIGNAL(triggered()), m_tree, SLOT(moveLeft()));
-    m_tree->actions().append(act);
-    m_tool->addAction(act);
-
-    act = new QAction(FB2::icon("go-next"), tr("&Right"), this);
-    connect(act, SIGNAL(triggered()), m_tree, SLOT(moveRight()));
-    m_tree->actions().append(act);
-    m_tool->addAction(act);
+    m_tree->initToolbar(m_tool);
 }

+ 1 - 0
source/fb2tree.hpp

@@ -99,6 +99,7 @@ class Fb2TreeView : public QTreeView
 
 public:
     explicit Fb2TreeView(Fb2WebView &view, QWidget *parent = 0);
+    void initToolbar(QToolBar *toolbar);
 
 public slots:
     void updateTree();