scintillahexeditview.cpp 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #include "scintillahexeditview.h"
  2. #include "styleset.h"
  3. #include "ccnotepad.h"
  4. #include <stdexcept>
  5. #include <QMimeData>
  6. // initialize the static variable
  7. bool ScintillaHexEditView::_SciInit = false;
  8. #define DEFAULT_FONT_NAME "Courier New"
  9. ScintillaHexEditView::ScintillaHexEditView(QWidget *parent):QsciScintilla(parent), m_NoteWin(nullptr)
  10. {
  11. init();
  12. }
  13. ScintillaHexEditView::~ScintillaHexEditView()
  14. {
  15. }
  16. void ScintillaHexEditView::setNoteWidget(QWidget * win)
  17. {
  18. m_NoteWin = win;
  19. }
  20. sptr_t ScintillaHexEditView::execute(quint32 Msg, uptr_t wParam, sptr_t lParam) const {
  21. try {
  22. return (m_pScintillaFunc) ? m_pScintillaFunc(m_pScintillaPtr, Msg, wParam, lParam) : -1;
  23. }
  24. catch (...)
  25. {
  26. return -1;
  27. }
  28. };
  29. void ScintillaHexEditView::init()
  30. {
  31. if (!_SciInit)
  32. {
  33. _SciInit = true;
  34. }
  35. m_pScintillaFunc = (SCINTILLA_FUNC)this->SendScintillaPtrResult(SCI_GETDIRECTFUNCTION);
  36. m_pScintillaPtr = (SCINTILLA_PTR)this->SendScintillaPtrResult(SCI_GETDIRECTPOINTER);
  37. if (!m_pScintillaFunc)
  38. {
  39. throw std::runtime_error("ScintillaEditView::init : SCI_GETDIRECTFUNCTION message failed");
  40. }
  41. if (!m_pScintillaPtr)
  42. {
  43. throw std::runtime_error("ScintillaEditView::init : SCI_GETDIRECTPOINTER message failed");
  44. }
  45. //设置字体
  46. #if defined (Q_OS_MAC)
  47. QFont font(DEFAULT_FONT_NAME, 12, QFont::Normal);
  48. #else
  49. QFont font(DEFAULT_FONT_NAME, 11, QFont::Normal);
  50. #endif
  51. setFont(font);
  52. setMarginsFont(font);
  53. setMarginsBackgroundColor(StyleSet::marginsBackgroundColor);
  54. execute(SCI_SETTABWIDTH, 4);
  55. setPaper(QColor(0xfc, 0xfc, 0xfc));
  56. }
  57. void ScintillaHexEditView::dragEnterEvent(QDragEnterEvent* event)
  58. {
  59. //if (event->mimeData()->hasFormat("text/uri-list")) //只能打开文本文件
  60. //{
  61. // event->accept(); //可以在这个窗口部件上拖放对象
  62. //}
  63. //else
  64. //{
  65. // event->ignore();
  66. //}
  67. event->accept();
  68. }
  69. void ScintillaHexEditView::dropEvent(QDropEvent* e)
  70. {
  71. QList<QUrl> urls = e->mimeData()->urls();
  72. if (urls.isEmpty())
  73. return;
  74. CCNotePad* pv = dynamic_cast<CCNotePad*>(m_NoteWin);
  75. if (pv != nullptr)
  76. pv->receiveEditDrop(e);
  77. //qDebug() << ui.leftSrc->geometry() << ui.rightSrc->geometry() << QCursor::pos() << this->mapFromGlobal(QCursor::pos());
  78. }