Exemple #1
0
static int 
preparedata(char *buf, long end, FILE *from) 
{
	long current = ftell(from);
	int diff = (int)(end - current);
	int amount;
	
	if(current < 0)
		die("ftell");
	
	debug(4, "amount prepared to be sent: %d", copyamount(diff));
	amount = fread(buf, sizeof(char), copyamount(diff), from);

	if(ferror(from))
		die("read");

	if(feof(from) || current == end)
		return 0;
	
	return amount;
}
receivecoinsdialog::receivecoinsdialog(qwidget *parent) :
    qdialog(parent),
    ui(new ui::receivecoinsdialog),
    model(0)
{
    ui->setupui(this);

#ifdef q_os_mac // icons on push buttons are very uncommon on mac
    ui->clearbutton->seticon(qicon());
    ui->receivebutton->seticon(qicon());
    ui->showrequestbutton->seticon(qicon());
    ui->removerequestbutton->seticon(qicon());
#else
    ui->clearbutton->seticon(singlecoloricon(":/icons/remove"));
    ui->receivebutton->seticon(singlecoloricon(":/icons/receiving_addresses"));
    ui->showrequestbutton->seticon(singlecoloricon(":/icons/edit"));
    ui->removerequestbutton->seticon(singlecoloricon(":/icons/remove"));
#endif

    // context menu actions
    qaction *copylabelaction = new qaction(tr("copy label"), this);
    qaction *copymessageaction = new qaction(tr("copy message"), this);
    qaction *copyamountaction = new qaction(tr("copy amount"), this);

    // context menu
    contextmenu = new qmenu();
    contextmenu->addaction(copylabelaction);
    contextmenu->addaction(copymessageaction);
    contextmenu->addaction(copyamountaction);

    // context menu signals
    connect(ui->recentrequestsview, signal(customcontextmenurequested(qpoint)), this, slot(showmenu(qpoint)));
    connect(copylabelaction, signal(triggered()), this, slot(copylabel()));
    connect(copymessageaction, signal(triggered()), this, slot(copymessage()));
    connect(copyamountaction, signal(triggered()), this, slot(copyamount()));

    connect(ui->clearbutton, signal(clicked()), this, slot(clear()));
}
transactionview::transactionview(qwidget *parent) :
    qwidget(parent), model(0), transactionproxymodel(0),
    transactionview(0)
{
    // build filter row
    setcontentsmargins(0,0,0,0);

    qhboxlayout *hlayout = new qhboxlayout();
    hlayout->setcontentsmargins(0,0,0,0);
#ifdef q_os_mac
    hlayout->setspacing(5);
    hlayout->addspacing(26);
#else
    hlayout->setspacing(0);
    hlayout->addspacing(23);
#endif

    watchonlywidget = new qcombobox(this);
    watchonlywidget->setfixedwidth(24);
    watchonlywidget->additem("", transactionfilterproxy::watchonlyfilter_all);
    watchonlywidget->additem(singlecoloricon(":/icons/eye_plus"), "", transactionfilterproxy::watchonlyfilter_yes);
    watchonlywidget->additem(singlecoloricon(":/icons/eye_minus"), "", transactionfilterproxy::watchonlyfilter_no);
    hlayout->addwidget(watchonlywidget);

    datewidget = new qcombobox(this);
#ifdef q_os_mac
    datewidget->setfixedwidth(121);
#else
    datewidget->setfixedwidth(120);
#endif
    datewidget->additem(tr("all"), all);
    datewidget->additem(tr("today"), today);
    datewidget->additem(tr("this week"), thisweek);
    datewidget->additem(tr("this month"), thismonth);
    datewidget->additem(tr("last month"), lastmonth);
    datewidget->additem(tr("this year"), thisyear);
    datewidget->additem(tr("range..."), range);
    hlayout->addwidget(datewidget);

    typewidget = new qcombobox(this);
#ifdef q_os_mac
    typewidget->setfixedwidth(121);
#else
    typewidget->setfixedwidth(120);
#endif

    typewidget->additem(tr("all"), transactionfilterproxy::all_types);
    typewidget->additem(tr("received with"), transactionfilterproxy::type(transactionrecord::recvwithaddress) |
                        transactionfilterproxy::type(transactionrecord::recvfromother));
    typewidget->additem(tr("sent to"), transactionfilterproxy::type(transactionrecord::sendtoaddress) |
                        transactionfilterproxy::type(transactionrecord::sendtoother));
    typewidget->additem(tr("to yourself"), transactionfilterproxy::type(transactionrecord::sendtoself));
    typewidget->additem(tr("mined"), transactionfilterproxy::type(transactionrecord::generated));
    typewidget->additem(tr("other"), transactionfilterproxy::type(transactionrecord::other));

    hlayout->addwidget(typewidget);

    addresswidget = new qlineedit(this);
#if qt_version >= 0x040700
    addresswidget->setplaceholdertext(tr("enter address or label to search"));
#endif
    hlayout->addwidget(addresswidget);

    amountwidget = new qlineedit(this);
#if qt_version >= 0x040700
    amountwidget->setplaceholdertext(tr("min amount"));
#endif
#ifdef q_os_mac
    amountwidget->setfixedwidth(97);
#else
    amountwidget->setfixedwidth(100);
#endif
    amountwidget->setvalidator(new qdoublevalidator(0, 1e20, 8, this));
    hlayout->addwidget(amountwidget);

    qvboxlayout *vlayout = new qvboxlayout(this);
    vlayout->setcontentsmargins(0,0,0,0);
    vlayout->setspacing(0);

    qtableview *view = new qtableview(this);
    vlayout->addlayout(hlayout);
    vlayout->addwidget(createdaterangewidget());
    vlayout->addwidget(view);
    vlayout->setspacing(0);
    int width = view->verticalscrollbar()->sizehint().width();
    // cover scroll bar width with spacing
#ifdef q_os_mac
    hlayout->addspacing(width+2);
#else
    hlayout->addspacing(width);
#endif
    // always show scroll bar
    view->setverticalscrollbarpolicy(qt::scrollbaralwayson);
    view->settabkeynavigation(false);
    view->setcontextmenupolicy(qt::customcontextmenu);

    view->installeventfilter(this);

    transactionview = view;

    // actions
    qaction *copyaddressaction = new qaction(tr("copy address"), this);
    qaction *copylabelaction = new qaction(tr("copy label"), this);
    qaction *copyamountaction = new qaction(tr("copy amount"), this);
    qaction *copytxidaction = new qaction(tr("copy transaction id"), this);
    qaction *editlabelaction = new qaction(tr("edit label"), this);
    qaction *showdetailsaction = new qaction(tr("show transaction details"), this);

    contextmenu = new qmenu();
    contextmenu->addaction(copyaddressaction);
    contextmenu->addaction(copylabelaction);
    contextmenu->addaction(copyamountaction);
    contextmenu->addaction(copytxidaction);
    contextmenu->addaction(editlabelaction);
    contextmenu->addaction(showdetailsaction);

    mapperthirdpartytxurls = new qsignalmapper(this);

    // connect actions
    connect(mapperthirdpartytxurls, signal(mapped(qstring)), this, slot(openthirdpartytxurl(qstring)));

    connect(datewidget, signal(activated(int)), this, slot(choosedate(int)));
    connect(typewidget, signal(activated(int)), this, slot(choosetype(int)));
    connect(watchonlywidget, signal(activated(int)), this, slot(choosewatchonly(int)));
    connect(addresswidget, signal(textchanged(qstring)), this, slot(changedprefix(qstring)));
    connect(amountwidget, signal(textchanged(qstring)), this, slot(changedamount(qstring)));

    connect(view, signal(doubleclicked(qmodelindex)), this, signal(doubleclicked(qmodelindex)));
    connect(view, signal(customcontextmenurequested(qpoint)), this, slot(contextualmenu(qpoint)));

    connect(copyaddressaction, signal(triggered()), this, slot(copyaddress()));
    connect(copylabelaction, signal(triggered()), this, slot(copylabel()));
    connect(copyamountaction, signal(triggered()), this, slot(copyamount()));
    connect(copytxidaction, signal(triggered()), this, slot(copytxid()));
    connect(editlabelaction, signal(triggered()), this, slot(editlabel()));
    connect(showdetailsaction, signal(triggered()), this, slot(showdetails()));
}