text: #ifndef ADDRESSBOOKPAGE_H
  #define ADDRESSBOOKPAGE_H
  
  #include <QDialog>
  
  namespace Ui {
      class AddressBookPage;
  }
  class AddressTableModel;
  class OptionsModel;
  
  QT_BEGIN_NAMESPACE
  class QTableView;
  class QItemSelection;
  class QSortFilterProxyModel;
  class QMenu;
  class QModelIndex;
  QT_END_NAMESPACE
  
  /** Widget that shows a list of sending or receiving addresses.
    */
  class AddressBookPage : public QDialog
  {
      Q_OBJECT
  
  public:
      enum Tabs {
          SendingTab = 0,
          ReceivingTab = 1
      };
  
      enum Mode {
          ForSending, /**< Open address book to pick address for sending */
          ForEditing  /**< Open address book for editing */
      };
  
      explicit AddressBookPage(Mode mode, Tabs tab, QWidget *parent = 0);
      ~AddressBookPage();
  
      void setModel(AddressTableModel *model);
      void setOptionsModel(OptionsModel *optionsModel);
      const QString &getReturnValue() const { return returnValue; }
  
  public slots:
      void done(int retval);
      void exportClicked();
  
  private:
      Ui::AddressBookPage *ui;
      AddressTableModel *model;
      OptionsModel *optionsModel;
      Mode mode;
      Tabs tab;
      QString returnValue;
      QSortFilterProxyModel *proxyModel;
      QMenu *contextMenu;
      QAction *deleteAction;
      QString newAddressToSelect;
  
  private slots:
      void on_deleteButton_clicked();
      void on_newAddressButton_clicked();
      /** Copy address of currently selected address entry to clipboard */
      void on_copyToClipboard_clicked();
      void onCopyPMKeyAction();
      void on_signMessage_clicked();
      void on_verifyMessage_clicked();
      void selectionChanged();
      void on_showQRCode_clicked();
      /** Spawn contextual menu (right mouse menu) for address book entry */
      void contextualMenu(const QPoint &point);
  
      /** Copy label of currently selected address entry to clipboard */
      void onCopyLabelAction();
      /** Edit currently selected address entry */
      void onEditAction();
  
      /** New entry/entries were added to address table */
      void selectNewAddress(const QModelIndex &parent, int begin, int end);
  
  signals:
      void signMessage(QString addr);
      void verifyMessage(QString addr);
  };
  
  #endif // ADDRESSBOOKDIALOG_H
  