summaryrefslogtreecommitdiff
path: root/src/ui/ui_projects.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/ui_projects.cpp')
-rw-r--r--src/ui/ui_projects.cpp175
1 files changed, 96 insertions, 79 deletions
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;
}