File: CabrilloLogWindow.cpp

package info (click to toggle)
wsjtx 2.3.0%2Brepack-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 63,524 kB
  • sloc: cpp: 59,051; f90: 34,130; python: 27,241; ansic: 11,205; fortran: 2,051; sh: 132; makefile: 109
file content (90 lines) | stat: -rw-r--r-- 2,448 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include "CabrilloLogWindow.hpp"

#include <stdexcept>
#include <QApplication>
#include <QIdentityProxyModel>
#include <QSqlTableModel>
#include "Configuration.hpp"
#include "models/Bands.hpp"
#include "item_delegates/FrequencyDelegate.hpp"
#include "item_delegates/ForeignKeyDelegate.hpp"
#include "item_delegates/CallsignDelegate.hpp"
#include "item_delegates/SQLiteDateTimeDelegate.hpp"
#include "pimpl_impl.hpp"

#include "ui_CabrilloLogWindow.h"

namespace
{
  class FormatProxyModel final
    : public QIdentityProxyModel
  {
  public:
    explicit FormatProxyModel (QObject * parent = nullptr)
      : QIdentityProxyModel {parent}
    {
    }

    QVariant data (QModelIndex const& index, int role) const override
    {
      if (Qt::TextAlignmentRole == role && index.isValid ())
        {
          switch (index.column ())
            {
            case 1:
            case 7:
              return Qt::AlignRight + Qt::AlignVCenter;
            default:
              break;
            }
        }
      return QIdentityProxyModel::data (index, role);
    }
  };
}

class CabrilloLogWindow::impl final
{
public:
  explicit impl (QSqlTableModel * log_model)
    : log_model_ {log_model}
  {
  }

  QSqlTableModel * log_model_;
  FormatProxyModel format_model_;
  Ui::CabrilloLogWindow ui_;
};

CabrilloLogWindow::CabrilloLogWindow (QSettings * settings, Configuration const * configuration
                            , QSqlTableModel * cabrillo_log_model, QWidget * parent)
  : AbstractLogWindow {"Cabrillo Log Window", settings, configuration, parent}
  , m_{cabrillo_log_model}
{
  setWindowTitle (QApplication::applicationName () + " - Cabrillo Log");
  m_->ui_.setupUi (this);
  m_->format_model_.setSourceModel (m_->log_model_);
  m_->ui_.log_table_view->setModel (&m_->format_model_);
  set_log_view (m_->ui_.log_table_view);
  m_->ui_.log_table_view->setItemDelegateForColumn (1, new FrequencyDelegate {this});
  m_->ui_.log_table_view->setItemDelegateForColumn (3, new SQLiteDateTimeDelegate {this});
  m_->ui_.log_table_view->setItemDelegateForColumn (4, new CallsignDelegate {this});
  auto h_header = m_->ui_.log_table_view->horizontalHeader ();
  h_header->moveSection (7, 1); // band to first column
}

CabrilloLogWindow::~CabrilloLogWindow ()
{
}

void CabrilloLogWindow::log_model_changed (int row)
{
  if (row >= 0)
    {
      m_->log_model_->selectRow (row);
    }
  else
    {
      m_->log_model_->select ();
    }
}