summaryrefslogtreecommitdiff
path: root/src/ui
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/imgui_extensions.cpp16
-rw-r--r--src/ui/ui_contacts.cpp12
-rw-r--r--src/ui/ui_invoices.cpp2
-rw-r--r--src/ui/ui_projects.cpp175
-rw-r--r--src/ui/ui_settings.cpp6
5 files changed, 131 insertions, 80 deletions
diff --git a/src/ui/imgui_extensions.cpp b/src/ui/imgui_extensions.cpp
index dee36a7..9ce5bf9 100644
--- a/src/ui/imgui_extensions.cpp
+++ b/src/ui/imgui_extensions.cpp
@@ -472,6 +472,22 @@ namespace ImGui
}
}
+ void ProjectForm(project* buffer, bool viewing_only)
+ {
+ float widthAvailable = ImGui::GetContentRegionAvail().x;
+ ImGui::BeginDisabled();
+
+ a_err last_err = administration::project_is_valid(*buffer);
+
+ ImGui::SetNextItemWidth(widthAvailable*0.5f);
+ ImGui::InputText(locale::get("project.form.identifier"), buffer->id, IM_ARRAYSIZE(buffer->id));
+ if (!viewing_only) ImGui::EndDisabled();
+
+ ImGui::InputTextWithErrorHint(locale::get("project.form.description"), buffer->description, IM_ARRAYSIZE(buffer->description), last_err & A_ERR_MISSING_DESCRIPTION);
+
+ if (viewing_only) ImGui::EndDisabled();
+ }
+
void ContactForm(contact* buffer, bool viewing_only, bool with_autocomplete, bool active_countries_only)
{
a_err last_err = administration::contact_is_valid(*buffer);
diff --git a/src/ui/ui_contacts.cpp b/src/ui/ui_contacts.cpp
index b41180e..7b8c21c 100644
--- a/src/ui/ui_contacts.cpp
+++ b/src/ui/ui_contacts.cpp
@@ -155,6 +155,10 @@ static void draw_contacts_create()
}
if (!can_save) ImGui::EndDisabled();
+ ImGui::Spacing();
+ ImGui::Separator(1.0f);
+ ImGui::Spacing();
+
ImGui::ContactForm(&active_contact, false, false);
}
@@ -182,6 +186,10 @@ static void draw_contacts_update()
ImGui::OpenPopup("ConfirmDeletePopup");
}
+ ImGui::Spacing();
+ ImGui::Separator(1.0f);
+ ImGui::Spacing();
+
ImGui::ContactForm(&active_contact, false, false);
// Confirmation popup before contact is deleted permanently.
@@ -211,6 +219,10 @@ static void draw_contact_view()
if (ImGui::Button(locale::get("form.change"))) {
current_view_state = ui::view_state::EDIT_EXISTING;
}
+
+ ImGui::Spacing();
+ ImGui::Separator(1.0f);
+ ImGui::Spacing();
ImGui::ContactForm(&active_contact, true, false);
}
diff --git a/src/ui/ui_invoices.cpp b/src/ui/ui_invoices.cpp
index 16dcc52..70db412 100644
--- a/src/ui/ui_invoices.cpp
+++ b/src/ui/ui_invoices.cpp
@@ -324,7 +324,7 @@ static void draw_invoices_list()
if (ImGui::BeginTable("TableInvoices", 6, ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg)) {
- ImGui::TableSetupColumn(locale::get("invoice.table.invoicenumber"), ImGuiTableColumnFlags_WidthFixed, 130);
+ ImGui::TableSetupColumn(locale::get("invoice.table.invoicenumber"), ImGuiTableColumnFlags_WidthFixed, 120);
ImGui::TableSetupColumn(locale::get("invoice.table.customer"));
ImGui::TableSetupColumn(locale::get("invoice.table.addressee"));
ImGui::TableSetupColumn(locale::get("invoice.table.issuedat"), ImGuiTableColumnFlags_WidthFixed, 90);
diff --git a/src/ui/ui_projects.cpp b/src/ui/ui_projects.cpp
index a43cd9b..55125de 100644
--- a/src/ui/ui_projects.cpp
+++ b/src/ui/ui_projects.cpp
@@ -38,51 +38,93 @@ void ui::setup_projects()
_reset_to_default_view();
}
-static void draw_project_form()
+static void draw_project_create()
{
- float widthAvailable = ImGui::GetContentRegionAvail().x;
- bool viewing_only = (current_view_state == ui::view_state::VIEW_EXISTING);
-
if (ImGui::Button(locale::get("form.back"), true, false)) {
_reset_to_default_view();
- return;
}
- ImGui::Spacing();
- ImGui::BeginDisabled();
-
- a_err last_err = administration::project_is_valid(active_project);
-
- ImGui::SetNextItemWidth(widthAvailable*0.2f);
- ImGui::InputText(locale::get("project.form.identifier"), active_project.id, IM_ARRAYSIZE(active_project.id));
- if (!viewing_only) ImGui::EndDisabled();
+
+ ImGui::SameLine();
- ImGui::InputTextWithErrorHint(locale::get("project.form.description"), active_project.description, IM_ARRAYSIZE(active_project.description), last_err & A_ERR_MISSING_DESCRIPTION);
+ bool can_save = administration::project_is_valid(active_project) == A_ERR_SUCCESS;
+ if (!can_save) ImGui::BeginDisabled();
+ if (ImGui::Button(locale::get("form.save"), true)) {
+ administration_writer::set_write_completed_event_callback(0);
+ administration::project_add(active_project);
+ current_view_state = ui::view_state::EDIT_EXISTING;
+ }
+ if (!can_save) ImGui::EndDisabled();
- if (viewing_only) ImGui::EndDisabled();
+ ImGui::Spacing();
+ ImGui::Separator(1.0f);
+ ImGui::Spacing();
- if (!viewing_only) {
- bool can_save = administration::project_is_valid(active_project) == A_ERR_SUCCESS;
+ ImGui::ProjectForm(&active_project, false);
+}
- if (!can_save) ImGui::BeginDisabled();
- // Save button
- ImGui::Spacing();
- if (ImGui::Button(locale::get("form.save"), true)) {
+static void draw_project_update()
+{
+ if (ImGui::Button(locale::get("form.back"), true, false)) {
+ current_view_state = ui::view_state::VIEW_EXISTING;
+ }
- administration_writer::set_write_completed_event_callback(_reset_to_default_view);
+ ImGui::SameLine();
+
+ bool can_save = administration::project_is_valid(active_project) == A_ERR_SUCCESS;
+ if (!can_save) ImGui::BeginDisabled();
+ if (ImGui::Button(locale::get("form.save"), true)) {
+ administration_writer::set_write_completed_event_callback(0);
+ administration::project_update(active_project);
+ }
+ if (!can_save) ImGui::EndDisabled();
- if (current_view_state == ui::view_state::CREATE) {
- administration::project_add(active_project);
- }
+ if (active_project.state == project_state::PROJECT_RUNNING)
+ {
+ ImGui::SameLine();
+ if (ImGui::Button(locale::get("form.cancel"))) {
+ selected_for_cancellation = active_project;
+ ImGui::OpenPopup("ConfirmCancelProject");
+ }
+ }
- else if (current_view_state == ui::view_state::EDIT_EXISTING) {
- administration::project_update(active_project);
- }
+ if (ImGui::BeginPopupModal("ConfirmCancelProject", nullptr, ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoTitleBar)) {
+ ImGui::Text(locale::get("form.confirmCancelProject"));
+ ImGui::Separator();
+
+ if (ImGui::Button(locale::get("form.yes"), ImVec2(120, 0))) {
+ administration::project_cancel(selected_for_cancellation);
+ ImGui::CloseCurrentPopup();
+ _reset_to_default_view();
}
- if (!can_save) ImGui::EndDisabled();
+ ImGui::SameLine();
+ if (ImGui::Button(locale::get("form.no"), ImVec2(120, 0))) {
+ ImGui::CloseCurrentPopup();
+ }
+ ImGui::EndPopup();
+ }
+
+ ImGui::Spacing();
+ ImGui::Separator(1.0f);
+ ImGui::Spacing();
+
+ ImGui::ProjectForm(&active_project, false);
+}
+
+static void draw_project_view()
+{
+ if (ImGui::Button(locale::get("form.back"), true, false)) {
+ _reset_to_default_view();
}
- else {
- // TODO list invoices connected to project.
+ ImGui::SameLine();
+ if (ImGui::Button(locale::get("form.change"))) {
+ current_view_state = ui::view_state::EDIT_EXISTING;
}
+
+ ImGui::Spacing();
+ ImGui::Separator(1.0f);
+ ImGui::Spacing();
+
+ ImGui::ProjectForm(&active_project, true);
}
static void draw_project_list()
@@ -120,22 +162,38 @@ static void draw_project_list()
ImGui::Spacing();
- if (ImGui::BeginTable("TableProjects", 4, ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg)) {
+ if (ImGui::BeginTable("TableProjects", 3, ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg)) {
ImGui::TableSetupColumn(locale::get("project.table.identifier"), ImGuiTableColumnFlags_WidthFixed, 80);
ImGui::TableSetupColumn(locale::get("project.table.status"), ImGuiTableColumnFlags_WidthFixed, 140);
ImGui::TableSetupColumn(locale::get("project.table.description"), ImGuiTableColumnFlags_WidthStretch);
- ImGui::TableSetupColumn("", ImGuiTableColumnFlags_WidthFixed, 175);
+ ImGui::PushFont(ui::fontBold);
ImGui::TableHeadersRow();
+ ImGui::PopFont();
project project_list[items_per_page];
u32 project_count = administration::project_get_partial_list(current_page, items_per_page, project_list);
+ ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0, 0));
for (u32 i = 0; i < project_count; i++) {
project c = project_list[i];
ImGui::TableNextRow();
- ImGui::TableSetColumnIndex(0); ImGui::Text(c.id);
+ ImGui::TableSetColumnIndex(0);
+
+ ImGui::PushID(i);
+ ImGuiSelectableFlags selectable_flags = ImGuiSelectableFlags_SpanAllColumns | ImGuiSelectableFlags_AllowOverlap;
+ bool selected = false;
+ if (ImGui::Selectable("##invisible_selectable", selected, selectable_flags, ImVec2(0, ImGui::GetFrameHeight()+2.0f)))
+ {
+ active_project = c;
+ current_view_state = ui::view_state::VIEW_EXISTING;
+ }
+ ImGui::SetItemAllowOverlap();
+ ImGui::SameLine();
+ ImGui::PopID();
+
+ ImGui::Text(c.id);
if (administration::project_is_valid(c) != A_ERR_SUCCESS)
{
@@ -146,49 +204,8 @@ static void draw_project_list()
ImGui::TableSetColumnIndex(1); ImGui::Text(locale::get(administration::project_get_status_string(c)));
ImGui::TableSetColumnIndex(2); ImGui::Text(c.description);
-
- ImGui::TableSetColumnIndex(3);
-
- char btn_name[20];
- strops::format(btn_name, sizeof(btn_name), "%s##%d", locale::get("form.view"), i);
- if (ImGui::Button(btn_name)) {
- active_project = c;
- current_view_state = ui::view_state::VIEW_EXISTING;
- }
-
- if (c.state == project_state::PROJECT_RUNNING)
- {
- ImGui::SameLine();
- strops::format(btn_name, sizeof(btn_name), "%s##%d", locale::get("form.change"), i);
- if (ImGui::Button(btn_name)) {
- active_project = c;
- current_view_state = ui::view_state::EDIT_EXISTING;
- }
-
- ImGui::SameLine();
- strops::format(btn_name, sizeof(btn_name), "%s##%d", locale::get("form.cancel"), i);
- if (ImGui::Button(btn_name)) {
- selected_for_cancellation = c;
- ImGui::OpenPopup("ConfirmCancelProject");
- }
- }
}
-
- if (ImGui::BeginPopupModal("ConfirmCancelProject", nullptr, ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoTitleBar)) {
- ImGui::Text(locale::get("form.confirmCancelProject"));
- ImGui::Separator();
-
- if (ImGui::Button(locale::get("form.yes"), ImVec2(120, 0))) {
- administration::project_cancel(selected_for_cancellation);
- ImGui::CloseCurrentPopup();
- }
- ImGui::SameLine();
- if (ImGui::Button(locale::get("form.no"), ImVec2(120, 0))) {
- ImGui::CloseCurrentPopup();
- }
- ImGui::EndPopup();
- }
-
+ ImGui::PopStyleVar();
ImGui::EndTable();
}
}
@@ -198,9 +215,9 @@ void ui::draw_projects()
switch(current_view_state)
{
case ui::view_state::LIST_ALL: draw_project_list(); break;
- case ui::view_state::CREATE: draw_project_form(); break;
- case ui::view_state::EDIT_EXISTING: draw_project_form(); break;
- case ui::view_state::VIEW_EXISTING: draw_project_form(); break;
+ case ui::view_state::CREATE: draw_project_create(); break;
+ case ui::view_state::EDIT_EXISTING: draw_project_update(); break;
+ case ui::view_state::VIEW_EXISTING: draw_project_view(); break;
default: break;
}
diff --git a/src/ui/ui_settings.cpp b/src/ui/ui_settings.cpp
index ab3664a..4644001 100644
--- a/src/ui/ui_settings.cpp
+++ b/src/ui/ui_settings.cpp
@@ -93,7 +93,9 @@ static void draw_vat_rates()
ImGui::TableSetupColumn(locale::get("settings.vat.table.outgoing"), ImGuiTableColumnFlags_WidthStretch);
ImGui::TableSetupColumn(locale::get("settings.vat.table.rates"), ImGuiTableColumnFlags_WidthFixed, 120);
ImGui::TableSetupColumn(locale::get("settings.vat.table.section"), ImGuiTableColumnFlags_WidthFixed, 200);
+ ImGui::PushFont(ui::fontBold);
ImGui::TableHeadersRow();
+ ImGui::PopFont();
for (u32 i = 0; i < tax_rate_count; i++) {
tax_rate c = tax_rates[i];
@@ -160,7 +162,9 @@ static void draw_cost_centers()
ImGui::TableSetupColumn(locale::get("settings.costcenters.table.code"), ImGuiTableColumnFlags_WidthFixed, 140);
ImGui::TableSetupColumn(locale::get("settings.costcenters.table.description"));
+ ImGui::PushFont(ui::fontBold);
ImGui::TableHeadersRow();
+ ImGui::PopFont();
for (u32 i = 0; i < cost_center_count; i++) {
cost_center c = cost_centers[i];
@@ -466,11 +470,13 @@ void ui::draw_settings()
draw_vat_rates();
ImGui::EndTabItem();
}
+
if (ImGui::BeginTabItem(locale::get("settings.table.costcenters")))
{
draw_cost_centers();
ImGui::EndTabItem();
}
+
if (ImGui::BeginTabItem(locale::get("settings.table.services")))
{
draw_services();