initial commit
This commit is contained in:
95
src/addtax.c
Normal file
95
src/addtax.c
Normal file
@@ -0,0 +1,95 @@
|
||||
#include <gtk/gtk.h>
|
||||
#include <math.h>
|
||||
#include <libintl.h>
|
||||
#include <locale.h>
|
||||
#include <stdbool.h>
|
||||
#include "misc.h"
|
||||
|
||||
#define _(STRING) gettext(STRING)
|
||||
#define TAX 1.111111111
|
||||
|
||||
GtkLabel *calculated_value = NULL;
|
||||
|
||||
void calculate_tax(GtkWidget *entry) {
|
||||
char *entry_text;
|
||||
float money;
|
||||
const gchar *label_text;
|
||||
entry_text = (char*) gtk_entry_get_text(GTK_ENTRY(entry));
|
||||
money = atof(entry_text);
|
||||
if (is_float(entry_text, money)) {
|
||||
g_print("$%d * %f = ", (int) round(money), TAX);
|
||||
money = money * TAX;
|
||||
g_print("$%d\n", (int) round(money));
|
||||
label_text = g_strconcat((const gchar *) "$", g_strdup_printf("%i", (int) round(money)), NULL);
|
||||
gtk_label_set_text(calculated_value, label_text);
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
int opt;
|
||||
|
||||
float money;
|
||||
|
||||
setlocale(LC_ALL, "");
|
||||
bindtextdomain("addtax", "/usr/share/locale/");
|
||||
textdomain("addtax");
|
||||
|
||||
if (argc > 1) {
|
||||
while ((opt = getopt(argc, argv, "")) != -1) {
|
||||
switch (opt) {
|
||||
default:
|
||||
fprintf(stderr, _("Usage: %s [prices...]\n"), argv[0]);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
for (opt = 1; opt < argc; opt++) {
|
||||
money = atof(argv[opt]);
|
||||
if (is_float(argv[opt], money)) {
|
||||
printf("$%d * %f = ", (int) round(money), TAX);
|
||||
money = money * TAX;
|
||||
printf("$%d\n", (int) round(money));
|
||||
}
|
||||
else {
|
||||
fprintf(stderr, _("Usage: %s [prices...]\n"), argv[0]);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
GtkBuilder *builder;
|
||||
GtkWidget *window;
|
||||
|
||||
gtk_init(&argc, &argv);
|
||||
|
||||
builder = gtk_builder_new();
|
||||
gtk_builder_add_from_resource(builder, "/cl/cromer/addtax/window_main.glade", NULL);
|
||||
|
||||
window = GTK_WIDGET(gtk_builder_get_object(builder, "window_main"));
|
||||
gtk_builder_connect_signals(builder, NULL);
|
||||
|
||||
calculated_value = (GtkLabel*) gtk_builder_get_object (builder, "calculated_value");
|
||||
|
||||
g_object_unref(builder);
|
||||
|
||||
gtk_widget_show(window);
|
||||
gtk_main();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Called when calculate is clicked
|
||||
void on_button_calculate_clicked(GtkWidget *button, GtkWidget *entry) {
|
||||
calculate_tax(entry);
|
||||
}
|
||||
|
||||
// Called when the user presses enter on the entry
|
||||
void on_entry_price_activate(GtkWidget *entry) {
|
||||
calculate_tax(entry);
|
||||
}
|
||||
|
||||
// Called when window is closed
|
||||
void on_window_main_destroy() {
|
||||
gtk_main_quit();
|
||||
}
|
||||
23
src/meson.build
Normal file
23
src/meson.build
Normal file
@@ -0,0 +1,23 @@
|
||||
gtk_dep = dependency('gtk+-3.0', version : '>=3.0.0')
|
||||
# gmodule-export-2.0 is needed to connect the handlers
|
||||
gmodule_dep = dependency('gmodule-export-2.0', version : '>=2.0')
|
||||
|
||||
# Check for the math library
|
||||
cc = meson.get_compiler('c')
|
||||
m_dep = cc.find_library('m', required : false)
|
||||
|
||||
# -no-pie so that the executable is double clickable in gui
|
||||
c_args = ['-no-pie']
|
||||
link_args = ['-no-pie']
|
||||
|
||||
sources = ['addtax.c']
|
||||
sources += ['misc.c']
|
||||
sources += ['misc.h']
|
||||
sources += [main_resource_c]
|
||||
|
||||
executable('addtax',
|
||||
sources,
|
||||
c_args : c_args,
|
||||
link_args : link_args,
|
||||
dependencies : [gtk_dep, m_dep, gmodule_dep],
|
||||
install : true)
|
||||
19
src/misc.c
Normal file
19
src/misc.c
Normal file
@@ -0,0 +1,19 @@
|
||||
#include <stdbool.h>
|
||||
#include <unistd.h>
|
||||
#include <ctype.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
bool is_float(const char *s, float dest) {
|
||||
if (s == NULL) {
|
||||
return false;
|
||||
}
|
||||
char *endptr;
|
||||
dest = (float) strtod(s, &endptr);
|
||||
if (s == endptr) {
|
||||
return false;
|
||||
}
|
||||
while (isspace((unsigned char ) *endptr)) {
|
||||
endptr++;
|
||||
}
|
||||
return *endptr == '\0';
|
||||
}
|
||||
1
src/misc.h
Normal file
1
src/misc.h
Normal file
@@ -0,0 +1 @@
|
||||
bool is_float(const char *s, float dest);
|
||||
Reference in New Issue
Block a user