fb2dock.cpp 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #include "fb2dock.hpp"
  2. #include "fb2code.hpp"
  3. #include "fb2head.hpp"
  4. #include "fb2text.hpp"
  5. #include <QLayout>
  6. FbMainDock::FbMainDock(QWidget *parent)
  7. : QStackedWidget(parent)
  8. , isSwitched(false)
  9. {
  10. textFrame = new FbWebFrame(this);
  11. m_text = new FbTextEdit(textFrame);
  12. textFrame->layout()->addWidget(m_text);
  13. m_head = new FbHeadEdit(this);
  14. m_code = new FbCodeEdit(this);
  15. addWidget(textFrame);
  16. addWidget(m_head);
  17. addWidget(m_code);
  18. m_head->setText(m_text);
  19. }
  20. void FbMainDock::createActions()
  21. {
  22. QAction * act;
  23. actionUndo = act = new QAction(FbIcon("edit-undo"), tr("&Undo"), this);
  24. act->setPriority(QAction::LowPriority);
  25. act->setShortcut(QKeySequence::Undo);
  26. act->setEnabled(false);
  27. menu->addAction(act);
  28. actionRedo = act = new QAction(FbIcon("edit-redo"), tr("&Redo"), this);
  29. act->setPriority(QAction::LowPriority);
  30. act->setShortcut(QKeySequence::Redo);
  31. act->setEnabled(false);
  32. menu->addAction(act);
  33. }
  34. FbMainDock::Mode FbMainDock::mode() const
  35. {
  36. QWidget * current = currentWidget();
  37. if (current == textFrame) return Text;
  38. if (current == m_head) return Head;
  39. if (current == m_code) return Code;
  40. return Text;
  41. }
  42. void FbMainDock::setMode(Mode mode)
  43. {
  44. switch (mode) {
  45. case Text: setCurrentWidget(textFrame); return;
  46. case Head: setCurrentWidget(m_head); return;
  47. case Code: setCurrentWidget(m_code); return;
  48. }
  49. }
  50. bool FbMainDock::load(const QString &filename)
  51. {
  52. QFile file(filename);
  53. if (!file.open(QFile::ReadOnly | QFile::Text)) {
  54. qCritical() << QObject::tr("Cannot read file %1: %2.").arg(filename).arg(file.errorString());
  55. return false;
  56. }
  57. if (mode == Code) {
  58. m_code->clear();
  59. return m_code->read(&file);
  60. }
  61. return false;
  62. }
  63. bool FbMainDock::save(QIODevice *device)
  64. {
  65. if (currentWidget() == m_code) {
  66. QTextStream out(device);
  67. out << m_code->toPlainText();
  68. } else {
  69. isSwitched = false;
  70. m_text->save(device, codec);
  71. }
  72. return true;
  73. }