summaryrefslogtreecommitdiff
path: root/src/ui
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/ui_contacts.cpp4
-rw-r--r--src/ui/ui_earnings.cpp4
-rw-r--r--src/ui/ui_expenses.cpp21
-rw-r--r--src/ui/ui_invoices.cpp21
-rw-r--r--src/ui/ui_main.cpp119
-rw-r--r--src/ui/ui_projects.cpp4
-rw-r--r--src/ui/ui_settings.cpp6
-rw-r--r--src/ui/ui_start.cpp50
8 files changed, 158 insertions, 71 deletions
diff --git a/src/ui/ui_contacts.cpp b/src/ui/ui_contacts.cpp
index ca73ac3..e1e9d5e 100644
--- a/src/ui/ui_contacts.cpp
+++ b/src/ui/ui_contacts.cpp
@@ -207,7 +207,7 @@ static void draw_contact_list()
ImGui::SameLine();
bool enable_prev = current_page > 0;
if (!enable_prev) ImGui::BeginDisabled();
- if (ImGui::Button("<< Prev") && current_page > 0) current_page--;
+ if (ImGui::Button(localize("ui.prev")) && current_page > 0) current_page--;
if (!enable_prev) ImGui::EndDisabled();
ImGui::SameLine();
@@ -217,7 +217,7 @@ static void draw_contact_list()
ImGui::SameLine();
bool enable_next = current_page < max_page-1;
if (!enable_next) ImGui::BeginDisabled();
- if (ImGui::Button("Next >>") && current_page < max_page-1) current_page++;
+ if (ImGui::Button(localize("ui.next")) && current_page < max_page-1) current_page++;
if (!enable_next) ImGui::EndDisabled();
ImGui::Spacing();
diff --git a/src/ui/ui_earnings.cpp b/src/ui/ui_earnings.cpp
index aed31f4..f85a54c 100644
--- a/src/ui/ui_earnings.cpp
+++ b/src/ui/ui_earnings.cpp
@@ -29,7 +29,7 @@ void ui_draw_earnings()
bool enable_prev = current_page > 0;
if (!enable_prev) ImGui::BeginDisabled();
- if (ImGui::Button("<< Prev") && current_page > 0) current_page--;
+ if (ImGui::Button(localize("ui.prev")) && current_page > 0) current_page--;
if (!enable_prev) ImGui::EndDisabled();
ImGui::SameLine();
@@ -38,7 +38,7 @@ void ui_draw_earnings()
ImGui::SameLine();
bool enable_next = current_page < max_page-1;
if (!enable_next) ImGui::BeginDisabled();
- if (ImGui::Button("Next >>") && current_page < max_page-1) current_page++;
+ if (ImGui::Button(localize("ui.next")) && current_page < max_page-1) current_page++;
if (!enable_next) ImGui::EndDisabled();
ImGui::Spacing();
diff --git a/src/ui/ui_expenses.cpp b/src/ui/ui_expenses.cpp
index bb23ba9..6c02a74 100644
--- a/src/ui/ui_expenses.cpp
+++ b/src/ui/ui_expenses.cpp
@@ -339,6 +339,23 @@ static void draw_expense_form(invoice* buffer, bool viewing_only = false)
static void ui_draw_expenses_list()
{
+ if (!administration_can_create_invoices()) {
+ ImGui::PushStyleColor(ImGuiCol_Text, IM_COL32(0, 102, 204, 255)); // blue
+ ImGui::Text(localize("ui.invoiceRequirementP1"));
+ ImGui::PopStyleColor();
+
+ if (ImGui::IsItemHovered()) {
+ ImGui::SetMouseCursor(ImGuiMouseCursor_Hand);
+ if (ImGui::IsMouseClicked(ImGuiMouseButton_Left)) {
+ ui_set_state(main_state::UI_SETTINGS);
+ }
+ }
+
+ ImGui::SameLine();
+ ImGui::Text(localize("ui.invoiceRequirementP2"));
+ return;
+ }
+
const u32 items_per_page = 50;
static s32 current_page = 0;
@@ -366,7 +383,7 @@ static void ui_draw_expenses_list()
ImGui::SameLine();
bool enable_prev = current_page > 0;
if (!enable_prev) ImGui::BeginDisabled();
- if (ImGui::Button("<< Prev") && current_page > 0) current_page--;
+ if (ImGui::Button(localize("ui.prev")) && current_page > 0) current_page--;
if (!enable_prev) ImGui::EndDisabled();
ImGui::SameLine();
@@ -376,7 +393,7 @@ static void ui_draw_expenses_list()
ImGui::SameLine();
bool enable_next = current_page < max_page-1;
if (!enable_next) ImGui::BeginDisabled();
- if (ImGui::Button("Next >>") && current_page < max_page-1) current_page++;
+ if (ImGui::Button(localize("ui.next")) && current_page < max_page-1) current_page++;
if (!enable_next) ImGui::EndDisabled();
ImGui::Spacing();
diff --git a/src/ui/ui_invoices.cpp b/src/ui/ui_invoices.cpp
index d64147f..146d298 100644
--- a/src/ui/ui_invoices.cpp
+++ b/src/ui/ui_invoices.cpp
@@ -369,6 +369,23 @@ static void draw_invoice_form(invoice* buffer, bool viewing_only = false)
static void ui_draw_invoices_list()
{
+ if (!administration_can_create_invoices()) {
+ ImGui::PushStyleColor(ImGuiCol_Text, IM_COL32(0, 102, 204, 255)); // blue
+ ImGui::Text(localize("ui.invoiceRequirementP1"));
+ ImGui::PopStyleColor();
+
+ if (ImGui::IsItemHovered()) {
+ ImGui::SetMouseCursor(ImGuiMouseCursor_Hand);
+ if (ImGui::IsMouseClicked(ImGuiMouseButton_Left)) {
+ ui_set_state(main_state::UI_SETTINGS);
+ }
+ }
+
+ ImGui::SameLine();
+ ImGui::Text(localize("ui.invoiceRequirementP2"));
+ return;
+ }
+
const u32 items_per_page = 50;
static s32 current_page = 0;
@@ -396,7 +413,7 @@ static void ui_draw_invoices_list()
ImGui::SameLine();
bool enable_prev = current_page > 0;
if (!enable_prev) ImGui::BeginDisabled();
- if (ImGui::Button("<< Prev") && current_page > 0) current_page--;
+ if (ImGui::Button(localize("ui.prev")) && current_page > 0) current_page--;
if (!enable_prev) ImGui::EndDisabled();
ImGui::SameLine();
@@ -406,7 +423,7 @@ static void ui_draw_invoices_list()
ImGui::SameLine();
bool enable_next = current_page < max_page-1;
if (!enable_next) ImGui::BeginDisabled();
- if (ImGui::Button("Next >>") && current_page < max_page-1) current_page++;
+ if (ImGui::Button(localize("ui.next")) && current_page < max_page-1) current_page++;
if (!enable_next) ImGui::EndDisabled();
ImGui::Spacing();
diff --git a/src/ui/ui_main.cpp b/src/ui/ui_main.cpp
index 61c4784..bc02243 100644
--- a/src/ui/ui_main.cpp
+++ b/src/ui/ui_main.cpp
@@ -2,23 +2,11 @@
#include "imgui.h"
#include "administration.hpp"
#include "locales.hpp"
+#include "tinyfiledialogs.h"
+#include "administration_writer.hpp"
-typedef enum
-{
- INVOICES = 0,
- EXPENSES = 1,
- CONTACTS = 2,
- REPORT_RESULTS = 3,
- REPORT_TAX = 4,
- PROJECTS = 5,
- SETTINGS = 6,
- LOG = 7,
-
- END
-} dashboard_view_state;
-
-static dashboard_view_state dashboard_state = dashboard_view_state::END;
-void (*drawcalls[dashboard_view_state::END])(void) = {
+static main_state ui_state = main_state::UI_END;
+void (*drawcalls[main_state::UI_END])(void) = {
ui_draw_invoices,
ui_draw_expenses,
ui_draw_contacts,
@@ -27,9 +15,10 @@ void (*drawcalls[dashboard_view_state::END])(void) = {
ui_draw_projects,
ui_draw_settings,
ui_draw_log,
+ ui_draw_start,
};
-void (*setupcalls[dashboard_view_state::END])(void) = {
+void (*setupcalls[main_state::UI_END])(void) = {
ui_setup_invoices,
ui_setup_expenses,
ui_setup_contacts,
@@ -38,9 +27,10 @@ void (*setupcalls[dashboard_view_state::END])(void) = {
ui_setup_projects,
ui_setup_settings,
0,
+ 0,
};
-void (*destroycalls[dashboard_view_state::END])(void) = {
+void (*destroycalls[main_state::UI_END])(void) = {
ui_destroy_invoices,
ui_destroy_expenses,
0,
@@ -49,33 +39,36 @@ void (*destroycalls[dashboard_view_state::END])(void) = {
0,
ui_destroy_settings,
0,
+ 0,
};
-static void set_dashboard_state(dashboard_view_state state)
+void ui_set_state(main_state state)
{
- if (dashboard_state != dashboard_view_state::END && destroycalls[dashboard_state]) destroycalls[dashboard_state]();
- dashboard_state = state;
- if (setupcalls[dashboard_state]) setupcalls[dashboard_state]();
+ if (ui_state != main_state::UI_END && destroycalls[ui_state]) destroycalls[ui_state]();
+ ui_state = state;
+ if (setupcalls[ui_state]) setupcalls[ui_state]();
}
+void create_new_administration();
+
void ui_draw_main()
{
- if (dashboard_state == dashboard_view_state::END) set_dashboard_state(dashboard_view_state::INVOICES);
+ if (ui_state == main_state::UI_END) ui_set_state(main_state::UI_START);
// @localize
if (ImGui::BeginMainMenuBar())
{
if (ImGui::BeginMenu("File"))
{
- if (ImGui::MenuItem("Open", "Ctrl+O")) { /* Handle Open */ }
- if (ImGui::MenuItem("Save", "Ctrl+S")) { /* Handle Save */ }
+ if (ImGui::MenuItem("New")) { create_new_administration(); }
+ if (ImGui::MenuItem("Open")) { /* Handle Save */ }
ImGui::EndMenu();
}
if (ImGui::BeginMenu("Help"))
{
- if (ImGui::MenuItem("Event Log")) { set_dashboard_state(dashboard_view_state::LOG); }
+ if (ImGui::MenuItem("Event Log")) { ui_set_state(main_state::UI_LOG); }
ImGui::EndMenu();
}
@@ -89,47 +82,53 @@ void ui_draw_main()
ImGui::SetNextWindowPos(ImVec2(0, menuBarHeight));
ImGui::SetNextWindowSize(ImVec2(sidePanelWidth, io.DisplaySize.y - menuBarHeight - statusBarHeight));
- // Side panel
- ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0, 0));
- ImGui::Begin("SidePanel", nullptr, ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse);
- {
- // Navigation buttons with custom styling
- ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.0f, 0.0f, 0.0f, 0.0f)); // Transparent background
- ImGui::PushStyleVar(ImGuiStyleVar_ButtonTextAlign, ImVec2(0.0f, 0.5f));
- ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0, 0)); // Reduce spacing between buttons
- ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(10.0f, 0.0f));
-
- float buttonWidth = sidePanelWidth;
-
- if (ImGui::Button(localize("nav.invoices"), ImVec2(buttonWidth, 24))) set_dashboard_state(dashboard_view_state::INVOICES);
- if (ImGui::Button(localize("nav.expenses"), ImVec2(buttonWidth, 24))) set_dashboard_state(dashboard_view_state::EXPENSES);
- if (ImGui::Button(localize("nav.contacts"), ImVec2(buttonWidth, 24))) set_dashboard_state(dashboard_view_state::CONTACTS);
-
- static bool reports_opened = true;
- if (ImGui::Button(localize("nav.reports"), ImVec2(buttonWidth, 24))) reports_opened = !reports_opened;
- if (reports_opened)
+ if (ui_state != main_state::UI_START) {
+ // Side panel
+ ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0, 0));
+ ImGui::Begin("SidePanel", nullptr, ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse);
{
- ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(20.0f, 0.0f));
- if (ImGui::Button(localize("nav.reports.results"), ImVec2(buttonWidth, 24))) set_dashboard_state(dashboard_view_state::REPORT_RESULTS);
- if (ImGui::Button(localize("nav.reports.tax"), ImVec2(buttonWidth, 24))) set_dashboard_state(dashboard_view_state::REPORT_TAX);
- ImGui::PopStyleVar();
+ // Navigation buttons with custom styling
+ ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.0f, 0.0f, 0.0f, 0.0f)); // Transparent background
+ ImGui::PushStyleVar(ImGuiStyleVar_ButtonTextAlign, ImVec2(0.0f, 0.5f));
+ ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0, 0)); // Reduce spacing between buttons
+ ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(10.0f, 0.0f));
+
+ float buttonWidth = sidePanelWidth;
+
+ if (ImGui::Button(localize("nav.invoices"), ImVec2(buttonWidth, 24))) ui_set_state(main_state::UI_INVOICES);
+ if (ImGui::Button(localize("nav.expenses"), ImVec2(buttonWidth, 24))) ui_set_state(main_state::UI_EXPENSES);
+ if (ImGui::Button(localize("nav.contacts"), ImVec2(buttonWidth, 24))) ui_set_state(main_state::UI_CONTACTS);
+
+ static bool reports_opened = true;
+ if (ImGui::Button(localize("nav.reports"), ImVec2(buttonWidth, 24))) reports_opened = !reports_opened;
+ if (reports_opened)
+ {
+ ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(20.0f, 0.0f));
+ if (ImGui::Button(localize("nav.reports.results"), ImVec2(buttonWidth, 24))) ui_set_state(main_state::UI_REPORT_RESULTS);
+ if (ImGui::Button(localize("nav.reports.tax"), ImVec2(buttonWidth, 24))) ui_set_state(main_state::UI_REPORT_TAX);
+ ImGui::PopStyleVar();
+ }
+
+ if (ImGui::Button(localize("nav.projects"), ImVec2(buttonWidth, 24))) ui_set_state(main_state::UI_PROJECTS);
+ if (ImGui::Button(localize("nav.settings"), ImVec2(buttonWidth, 24))) ui_set_state(main_state::UI_SETTINGS);
+
+ ImGui::PopStyleColor(1);
+ ImGui::PopStyleVar(3);
}
+ ImGui::End();
+ ImGui::PopStyleVar();
- if (ImGui::Button(localize("nav.projects"), ImVec2(buttonWidth, 24))) set_dashboard_state(dashboard_view_state::PROJECTS);
- if (ImGui::Button(localize("nav.settings"), ImVec2(buttonWidth, 24))) set_dashboard_state(dashboard_view_state::SETTINGS);
-
- ImGui::PopStyleColor(1);
- ImGui::PopStyleVar(3);
+ ImGui::SetNextWindowPos(ImVec2(sidePanelWidth, menuBarHeight));
+ ImGui::SetNextWindowSize(ImVec2(io.DisplaySize.x - sidePanelWidth, io.DisplaySize.y - menuBarHeight - statusBarHeight));
+ }
+ else {
+ ImGui::SetNextWindowPos(ImVec2(0, 0));
+ ImGui::SetNextWindowSize(ImVec2(io.DisplaySize.x, io.DisplaySize.y - statusBarHeight));
}
- ImGui::End();
- ImGui::PopStyleVar();
-
- ImGui::SetNextWindowPos(ImVec2(sidePanelWidth, menuBarHeight));
- ImGui::SetNextWindowSize(ImVec2(io.DisplaySize.x - sidePanelWidth, io.DisplaySize.y - menuBarHeight - statusBarHeight));
// Main content
ImGui::Begin("AccountingMainWindow", nullptr, ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse);
- if (drawcalls[dashboard_state]) drawcalls[dashboard_state]();
+ if (drawcalls[ui_state]) drawcalls[ui_state]();
ImGui::End();
// Status bar.
diff --git a/src/ui/ui_projects.cpp b/src/ui/ui_projects.cpp
index ca9b845..d736cf5 100644
--- a/src/ui/ui_projects.cpp
+++ b/src/ui/ui_projects.cpp
@@ -102,7 +102,7 @@ static void draw_project_list()
ImGui::SameLine();
bool enable_prev = current_page > 0;
if (!enable_prev) ImGui::BeginDisabled();
- if (ImGui::Button("<< Prev") && current_page > 0) current_page--;
+ if (ImGui::Button(localize("ui.prev")) && current_page > 0) current_page--;
if (!enable_prev) ImGui::EndDisabled();
ImGui::SameLine();
@@ -111,7 +111,7 @@ static void draw_project_list()
ImGui::SameLine();
bool enable_next = current_page < max_page-1;
if (!enable_next) ImGui::BeginDisabled();
- if (ImGui::Button("Next >>") && current_page < max_page-1) current_page++;
+ if (ImGui::Button(localize("ui.next")) && current_page < max_page-1) current_page++;
if (!enable_next) ImGui::EndDisabled();
ImGui::Spacing();
diff --git a/src/ui/ui_settings.cpp b/src/ui/ui_settings.cpp
index 1746111..77d2a45 100644
--- a/src/ui/ui_settings.cpp
+++ b/src/ui/ui_settings.cpp
@@ -18,6 +18,8 @@ country_tax_bracket* tax_brackets = 0;
u32 cost_center_count;
cost_center* cost_centers = 0;
+static int select_company_tab = 0;
+
void ui_destroy_settings()
{
free(tax_brackets);
@@ -26,6 +28,7 @@ void ui_destroy_settings()
void ui_setup_settings()
{
+ select_company_tab = 1;
company_info = administration_company_info_get();
tax_bracket_count = administration_tax_bracket_count();
@@ -339,8 +342,9 @@ void ui_draw_settings()
{
if (ImGui::BeginTabBar("SettingsTabBar"))
{
- if (ImGui::BeginTabItem(localize("settings.table.company")))
+ if (ImGui::BeginTabItem(localize("settings.table.company"), nullptr, select_company_tab == 1 ? ImGuiTabItemFlags_SetSelected : 0))
{
+ select_company_tab = 0;
draw_contact_form(&company_info);
// Save button.
diff --git a/src/ui/ui_start.cpp b/src/ui/ui_start.cpp
new file mode 100644
index 0000000..f1377ec
--- /dev/null
+++ b/src/ui/ui_start.cpp
@@ -0,0 +1,50 @@
+#include "ui.hpp"
+#include "imgui.h"
+#include "administration.hpp"
+#include "locales.hpp"
+#include "tinyfiledialogs.h"
+#include "administration_writer.hpp"
+
+void create_new_administration()
+{
+ // @localize
+ char const * lFilterPatterns[1] = { "*.openbook" };
+ char* save_path = tinyfd_saveFileDialog("Select destination", NULL, 1, lFilterPatterns, NULL);
+
+ if (!save_path) return;
+
+ administration_create_empty(save_path);
+
+ administration_writer_save_all_cost_centers_blocking();
+ administration_writer_save_all_tax_brackets_blocking();
+ administration_writer_save_all_administration_info_blocking();
+
+ ui_set_state(main_state::UI_SETTINGS);
+}
+
+void ui_draw_start()
+{
+ // Get the window size
+ ImVec2 windowSize = ImGui::GetContentRegionAvail();
+
+ // Calculate half the width for each button
+ ImVec2 buttonSize(windowSize.x * 0.5f, windowSize.y);
+
+ ImGui::Columns(2, nullptr, false); // 2 columns, no border
+
+ // Left button
+ if (ImGui::Button("Create", buttonSize))
+ {
+ create_new_administration();
+ }
+
+ ImGui::NextColumn();
+
+ // Right button
+ if (ImGui::Button("Load", buttonSize))
+ {
+ // Handle Load action
+ }
+
+ ImGui::Columns(1); // Reset columns
+} \ No newline at end of file