ignore generated resource file
[novacoin.git] / BitcoinGUI.cpp
1 /*
2  * W.J. van der Laan 2011
3  */
4 #include "BitcoinGUI.h"
5 #include "TransactionTableModel.h"
6
7 #include <QApplication>
8 #include <QMainWindow>
9 #include <QMenuBar>
10 #include <QMenu>
11 #include <QIcon>
12 #include <QTabBar>
13 #include <QVBoxLayout>
14 #include <QWidget>
15 #include <QToolBar>
16 #include <QStatusBar>
17 #include <QLabel>
18 #include <QTableView>
19 #include <QLineEdit>
20 #include <QPushButton>
21 #include <QHeaderView>
22 #include <QLocale>
23
24 #include <iostream>
25
26 BitcoinGUI::BitcoinGUI(QWidget *parent):
27     QMainWindow(parent)
28 {
29     resize(850, 550);
30     setWindowTitle(tr("Bitcoin"));
31     setWindowIcon(QIcon(":icons/bitcoin"));
32     
33     QAction *quit = new QAction(QIcon(":/icons/quit"), "&Quit", this);
34     QAction *sendcoins = new QAction(QIcon(":/icons/send"), "&Send coins", this);
35     QAction *addressbook = new QAction(QIcon(":/icons/address-book"), "&Address book", this);
36     QAction *about = new QAction(QIcon(":/icons/bitcoin"), "&About", this);
37     
38     /* Menus */
39     QMenu *file = menuBar()->addMenu("&File");
40     file->addAction(sendcoins);
41     file->addSeparator();
42     file->addAction(quit);
43     
44     QMenu *settings = menuBar()->addMenu("&Settings");
45     settings->addAction(addressbook);
46
47     QMenu *help = menuBar()->addMenu("&Help");
48     help->addAction(about);
49     
50     /* Toolbar */
51     QToolBar *toolbar = addToolBar("Main toolbar");
52     toolbar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
53     toolbar->addAction(sendcoins);
54     toolbar->addAction(addressbook);
55
56     /* Address: <address>: New... : Paste to clipboard */
57     QHBoxLayout *hbox_address = new QHBoxLayout();
58     hbox_address->addWidget(new QLabel(tr("Your Bitcoin Address:")));
59     QLineEdit *edit_address = new QLineEdit();
60     edit_address->setReadOnly(true);
61     hbox_address->addWidget(edit_address);
62     
63     QPushButton *button_new = new QPushButton(trUtf8("&New\u2026"));
64     QPushButton *button_clipboard = new QPushButton(tr("&Copy to clipboard"));
65     hbox_address->addWidget(button_new);
66     hbox_address->addWidget(button_clipboard);
67     
68     /* Balance: <balance> */
69     QHBoxLayout *hbox_balance = new QHBoxLayout();
70     hbox_balance->addWidget(new QLabel(tr("Balance:")));
71     hbox_balance->addSpacing(5);/* Add some spacing between the label and the text */
72
73     QLabel *label_balance = new QLabel(QLocale::system().toString(1345.54));
74     label_balance->setFont(QFont("Teletype"));
75     hbox_balance->addWidget(label_balance);
76     hbox_balance->addStretch(1);
77     
78     /* Tab widget */
79     QVBoxLayout *vbox = new QVBoxLayout();
80     vbox->addLayout(hbox_address);
81     vbox->addLayout(hbox_balance);
82     
83     /* Transaction table:
84      * TransactionView
85      * TransactionModel
86      */
87     QTableView *transaction_table = new QTableView(this);
88
89     TransactionTableModel *transaction_model = new TransactionTableModel(this);
90     transaction_table->setModel(transaction_model);
91     transaction_table->setSelectionBehavior(QAbstractItemView::SelectRows);
92     transaction_table->setSelectionMode(QAbstractItemView::ExtendedSelection);
93
94     transaction_table->horizontalHeader()->resizeSection(
95             TransactionTableModel::Status, 112);
96     transaction_table->horizontalHeader()->resizeSection(
97             TransactionTableModel::Date, 112);
98     transaction_table->horizontalHeader()->setResizeMode(
99             TransactionTableModel::Description, QHeaderView::Stretch);
100     transaction_table->horizontalHeader()->resizeSection(
101             TransactionTableModel::Debit, 79);
102     transaction_table->horizontalHeader()->resizeSection(
103             TransactionTableModel::Credit, 79);
104
105     /* setupTabs */
106     QTabBar *tabs = new QTabBar(this);
107     tabs->addTab(tr("All transactions"));
108     tabs->addTab(tr("Sent/Received"));
109     tabs->addTab(tr("Sent"));
110     tabs->addTab(tr("Received"));
111     /* QSortFilterProxyModel
112        setFilterRole : filter on user role
113        setFilterKeyColumn
114        setFilterRegExp / setFilterFixedString
115        "^."
116        "^[sr]"
117        "^[s]"
118        "^[r]"
119      */
120    
121     vbox->addWidget(tabs);
122     vbox->addWidget(transaction_table);
123     
124     QWidget *centralwidget = new QWidget(this);
125     centralwidget->setLayout(vbox);
126     setCentralWidget(centralwidget);
127     
128     /* Status bar */
129     statusBar();
130     
131     QLabel *label_connections = new QLabel("6 connections", this);
132     label_connections->setFrameStyle(QFrame::Panel | QFrame::Sunken);
133     label_connections->setMinimumWidth(100);
134     
135     QLabel *label_blocks = new QLabel("6 blocks", this);
136     label_blocks->setFrameStyle(QFrame::Panel | QFrame::Sunken);
137     label_blocks->setMinimumWidth(100);
138     
139     QLabel *label_transactions = new QLabel("6 transactions", this);
140     label_transactions->setFrameStyle(QFrame::Panel | QFrame::Sunken);
141     label_transactions->setMinimumWidth(100);
142     
143     
144     statusBar()->addPermanentWidget(label_connections);
145     statusBar()->addPermanentWidget(label_blocks);
146     statusBar()->addPermanentWidget(label_transactions);
147     
148      
149     /* Action bindings */
150
151     connect(quit, SIGNAL(triggered()), qApp, SLOT(quit()));
152     connect(tabs, SIGNAL(currentChanged(int)), this, SLOT(currentChanged(int)));
153 }
154
155 void BitcoinGUI::currentChanged(int tab)
156 {
157     std::cout << "Switched to tab: " << tab << std::endl;
158 }