Skip to content

Commit

Permalink
Merge branch 'master' into ui_improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
levonpetrosyan93 authored Nov 29, 2024
2 parents 24e2761 + 6da96d8 commit 4de8db1
Show file tree
Hide file tree
Showing 19 changed files with 300 additions and 83 deletions.
9 changes: 8 additions & 1 deletion .github/workflows/ci-master.yml
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,14 @@ jobs:
- name: Use Xcode instead of Command Line Tools
run: sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
- name: Install Required Packages
run: brew install automake coreutils pkg-config python-setuptools
run: |
if ! command -v pkg-config &> /dev/null; then
echo "pkg-config not found, installing..."
brew install pkg-config
else
echo "pkg-config is already installed"
fi
brew install automake coreutils python-setuptools
# Workaround for macOS: https://github.com/actions/runner/issues/2958
- name: Install setuptools
run: sudo -H pip install setuptools
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ Bootstrappable builds can [be achieved with Guix.](contrib/guix/README.md)

```sh
sudo apt-get update
sudo apt-get install git curl python build-essential libtool automake pkg-config cmake
sudo apt-get install python; sudo apt-get install git curl build-essential libtool automake pkg-config cmake
# Also needed for GUI wallet only:
sudo apt-get install qttools5-dev qttools5-dev-tools libxcb-xkb-dev bison
```
Expand Down
136 changes: 87 additions & 49 deletions doc/build-macos.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,56 +3,92 @@ macOS Build Instructions and Notes
The commands in this guide should be executed in a Terminal application.
The built-in one is located in `/Applications/Utilities/Terminal.app`.

Preparation
-----------
Install the macOS command line tools:

`xcode-select --install`

When the popup appears, click `Install`.

Then install [Homebrew](http://brew.sh).

Dependencies
----------------------

brew install automake berkeley-db4 libtool boost miniupnpc openssl pkg-config protobuf python qt libevent qrencode

In case you want to build the disk image with `make deploy` (.dmg / optional), you need RSVG

brew install librsvg
Berkley DB
------------------------
## Preparation
1. Install macOS Command Line Tools (if not already installed):
```bash
xcode-select --install
```
When the popup appears, click `Install`.


2. Install Homebrew (if not already installed):
```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```


## Dependencies
Install the required dependencies using Homebrew:
```bash
brew install automake berkeley-db4 libtool boost miniupnpc openssl protobuf python qt libevent qrencode python-setuptools m4
```

In case you want to build the disk image with `make deploy` (.dmg / optional), you need RSVG:
```bash
brew install librsvg
```

### Ensure `m4` is Found
After installing `m4`, it is important to note that `m4` is a `keg-only` formula in Homebrew. This means it is not symlinked into `/usr/local` by default. To make sure `m4` is available in your PATH, you'll need to link it manually with the `--force` flag:
```bash
brew link m4 --force
```
You can verify that `m4` is properly linked and available by running:
```bash
which m4
```
This should output the path to the `m4` binary, typically `/opt/homebrew/bin/m4` on Apple Silicon Macs. If you do not use the `--force` flag, `which m4` will likely output `/usr/bin/m4`, which is the system version and not the one installed via Homebrew.
### Troubleshooting `m4` Issues
If `m4` is not found even after installation and linking with `--force`, you may need to install Xcode to ensure that `m4` is recognized:
1. Install Xcode from the Mac App Store.
2. Once installed, open Xcode at least once to complete the setup.
#### Berkeley DB
It is recommended to use Berkeley DB 4.8. If you have to build it yourself, you can use [the installation script included in contrib/](https://github.com/bitcoin/bitcoin/blob/master/contrib/install_db4.sh) like so:
./contrib/install_db4.sh .

```bash
./contrib/install_db4.sh
```
from the root of the repository.
Note: You only need Berkeley DB if the wallet is enabled (see Disable-wallet mode).


Build Firo Core
------------------------
1. Build Firo-core:

Configure and build the headless Firo binaries as well as the GUI (if Qt is found).

In case you want to build the disk image with `make deploy` (.dmg / optional), by passing `--with-gui` to configure.

You can disable the GUI build by passing `--without-gui` to configure.

./autogen.sh
./configure
make

2. It is recommended to build and run the unit tests:

` make check`
*Note*: You only need Berkeley DB if the wallet is enabled (see Disable-wallet mode).
## Build Instructions
#### Download the Source
Before building, download the Firo source code:
```bash
git clone https://github.com/firoorg/firo
cd firo
```
#### Build Firo Core
1. **Prepare the build environment**:
```bash
cd depends
make
cd ..
```
2. **Configure and build Firo-core**:
```bash
./autogen.sh
./configure --prefix=`pwd`/depends/`depends/config.guess`
make
```
3. (optional) **It is recommended to build and run the unit tests**:
```bash
./configure --prefix=`pwd`/depends/`depends/config.guess` --enable-tests
make check
```
3. You can also create a .dmg that contains the .app bundle (optional):

` make deploy`
4. (optional) **You can also create a .dmg that contains the .app bundle**:
```bash
make deploy
```
Running
Expand Down Expand Up @@ -86,7 +122,10 @@ Download and install the community edition of [Qt Creator](https://www.qt.io/dow
Uncheck everything except Qt Creator during the installation process.

1. Make sure you installed everything through Homebrew mentioned above
2. Do a proper `./configure --enable-debug`
2. Properly configure the build environment:
```bash
./configure --prefix=`pwd`/depends/`depends/config.guess` --enable-debug
```
3. In Qt Creator do "New Project" -> Import Project -> Import Existing Project
4. Enter "bitcoin-qt" as project name, enter `src/qt` as location
5. Leave the file selection as it is
Expand All @@ -99,7 +138,6 @@ Uncheck everything except Qt Creator during the installation process.
Notes
-----

* Tested on macOS 10.11 through 10.14 on 64-bit Intel processors only.
* Tested on macOS 10.11 through 10.14 on 64-bit Intel processors, and on macOS 14.5 on an M2 chip.

* Building with downloaded Qt binaries is not officially supported. See the notes in [#7714](https://github.com/bitcoin/bitcoin/issues/7714)

2 changes: 1 addition & 1 deletion doc/build-osx.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Then install [Homebrew](https://brew.sh).
Dependencies
----------------------

brew install automake berkeley-db4 libtool boost --c++11 miniupnpc openssl pkg-config protobuf qt libevent
brew install automake berkeley-db4 libtool boost --c++11 miniupnpc openssl protobuf qt libevent

If you want to build the disk image with `make deploy` (.dmg / optional), you need RSVG

Expand Down
4 changes: 4 additions & 0 deletions src/qt/bitcoinaddressvalidator.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@
#define BITCOIN_QT_BITCOINADDRESSVALIDATOR_H

#include <QValidator>

#ifdef ENABLE_WALLET
#include "../spark/sparkwallet.h"
#endif

#include "../spark/state.h"

/** Base58 entry widget validator, checks for valid characters and
Expand Down
27 changes: 14 additions & 13 deletions src/qt/bitcoingui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1439,19 +1439,20 @@ void BitcoinGUI::resizeEvent(QResizeEvent* event) {

// Retrieve new dimensions from the resize event
int newWidth = event->size().width();
int newHeight = event->size().height();
int actionWidth = newWidth / 6;

// Set widths for each action dynamically
QWidget* overviewWidget = toolbar->widgetForAction(overviewAction);
QWidget* receiveWidget = toolbar->widgetForAction(receiveCoinsAction);
QWidget* historyWidget = toolbar->widgetForAction(historyAction);
QWidget* sendCoinsWidget = toolbar->widgetForAction(sendCoinsAction);
QWidget* masternodeWidget = toolbar->widgetForAction(masternodeAction);

overviewWidget->setMinimumWidth(actionWidth);
receiveWidget->setMinimumWidth(actionWidth);
historyWidget->setMinimumWidth(actionWidth);
sendCoinsWidget->setMinimumWidth(actionWidth);
masternodeWidget->setMinimumWidth(actionWidth);
if (toolbar) {
// Set widths for each action dynamically
QWidget* overviewWidget = overviewAction ? toolbar->widgetForAction(overviewAction) : nullptr;
QWidget* receiveWidget = receiveCoinsAction ? toolbar->widgetForAction(receiveCoinsAction) : nullptr;
QWidget* historyWidget = historyAction ? toolbar->widgetForAction(historyAction) : nullptr;
QWidget* sendCoinsWidget = sendCoinsAction ? toolbar->widgetForAction(sendCoinsAction) : nullptr;
QWidget* masternodeWidget = masternodeAction ? toolbar->widgetForAction(masternodeAction) : nullptr;

if (overviewWidget) overviewWidget->setMinimumWidth(actionWidth);
if (receiveWidget) receiveWidget->setMinimumWidth(actionWidth);
if (historyWidget) historyWidget->setMinimumWidth(actionWidth);
if (sendCoinsWidget) sendCoinsWidget->setMinimumWidth(actionWidth);
if (masternodeWidget) masternodeWidget->setMinimumWidth(actionWidth);
}
}
53 changes: 46 additions & 7 deletions src/qt/forms/sendcoinsentry.ui
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@
</item>
</layout>
</item>
<item row="4" column="0">
<item row="6" column="0">
<widget class="QLabel" name="messageLabel">
<property name="text">
<string>Message:</string>
Expand All @@ -231,15 +231,54 @@
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QLabel" name="messageTextLabel">
<item row="6" column="1">
<widget class="QLineEdit" name="messageTextLabel">
<property name="toolTip">
<string>A message that was attached to the firo: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Firo network.</string>
<string>Optional message for this transaction</string>
</property>
<property name="textFormat">
<enum>Qt::PlainText</enum>
</widget>
</item>
<item row="7" column="1">
<layout class="QHBoxLayout" name="horizontalLayoutWarning" stretch="0,1">
<property name="spacing">
<number>0</number>
</property>
</widget>
<item>
<widget class="QLabel" name="iconMessageWarning">
<property name="toolTip">
<string></string>
</property>
<property name="text">
<string></string>
</property>
<property name="minimumWidth">
5
</property>
<property name="minimumHeight">
5
</property>
<property name="fixedWidth">
10
</property>
<property name="fixedHeight">
10
</property>
<property name="styleSheet">
<string>margin-left:-30px;margin-right:-10px;margin-top:2px;</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="messageWarning">
<property name="text">
<string></string>
</property>
<property name="styleSheet">
<string>color: #FFA800; margin-left:-10px;</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="5" column="0" colspan="2">
<widget class="Line" name="line">
Expand Down
12 changes: 12 additions & 0 deletions src/qt/sendcoinsdialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -511,6 +511,18 @@ void SendCoinsDialog::on_sendButton_clicked()
QString questionString = tr("Are you sure you want to send?");
questionString.append(warningMessage);
questionString.append("<br /><br />%1");
bool firstMessage = true;
for (const auto& rec : recipients) {
if (!rec.message.isEmpty()) {
if (firstMessage) {
questionString.append("<hr><b>" + tr("Messages") + ":</b><br>");
firstMessage = false;
}
QString sanitizedMsg = GUIUtil::HtmlEscape(rec.message, true);
questionString.append("" + sanitizedMsg + "<br>");
}
}

double txSize;
if ((fAnonymousMode == false) && (recipients.size() == sparkAddressCount) && spark::IsSparkAllowed())
{
Expand Down
Loading

0 comments on commit 4de8db1

Please sign in to comment.