summaryrefslogtreecommitdiffhomepage
path: root/Stars45/EngDlg.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Stars45/EngDlg.cpp')
-rw-r--r--Stars45/EngDlg.cpp1566
1 files changed, 783 insertions, 783 deletions
diff --git a/Stars45/EngDlg.cpp b/Stars45/EngDlg.cpp
index 810f29a..3ceae84 100644
--- a/Stars45/EngDlg.cpp
+++ b/Stars45/EngDlg.cpp
@@ -1,15 +1,15 @@
/* Project Starshatter 4.5
- Destroyer Studios LLC
- Copyright © 1997-2004. All Rights Reserved.
+ Destroyer Studios LLC
+ Copyright © 1997-2004. All Rights Reserved.
- SUBSYSTEM: Stars.exe
- FILE: EngDlg.cpp
- AUTHOR: John DiCamillo
+ SUBSYSTEM: Stars.exe
+ FILE: EngDlg.cpp
+ AUTHOR: John DiCamillo
- OVERVIEW
- ========
- Engineering (Power/Maint) Dialog Active Window class
+ OVERVIEW
+ ========
+ Engineering (Power/Maint) Dialog Active Window class
*/
#include "MemDebug.h"
@@ -53,11 +53,11 @@ DEF_MAP_CLIENT(EngDlg, OnClose);
// +--------------------------------------------------------------------+
EngDlg::EngDlg(Screen* s, FormDef& def, GameScreen* mgr)
- : FormWindow(s, 0, 0, s->Width(), s->Height()), manager(mgr),
- ship(0), route_source(0), selected_source(0),
- selected_repair(0), selected_component(0)
+: FormWindow(s, 0, 0, s->Width(), s->Height()), manager(mgr),
+ship(0), route_source(0), selected_source(0),
+selected_repair(0), selected_component(0)
{
- Init(def);
+ Init(def);
}
EngDlg::~EngDlg()
@@ -69,102 +69,102 @@ EngDlg::~EngDlg()
void
EngDlg::RegisterControls()
{
- for (int i = 0; i < 4; i++) {
- sources[i] = (Button*) FindControl(201 + i);
- REGISTER_CLIENT(EID_CLICK, sources[i], EngDlg, OnSource);
+ for (int i = 0; i < 4; i++) {
+ sources[i] = (Button*) FindControl(201 + i);
+ REGISTER_CLIENT(EID_CLICK, sources[i], EngDlg, OnSource);
- source_levels[i] = (Slider*) FindControl(211 + i);
+ source_levels[i] = (Slider*) FindControl(211 + i);
- clients[i] = (ListBox*) FindControl(301 + i);
+ clients[i] = (ListBox*) FindControl(301 + i);
- if (clients[i]) {
- clients[i]->SetSelectedStyle(ListBox::LIST_ITEM_STYLE_FILLED_BOX);
- clients[i]->SetSortColumn(0);
+ if (clients[i]) {
+ clients[i]->SetSelectedStyle(ListBox::LIST_ITEM_STYLE_FILLED_BOX);
+ clients[i]->SetSortColumn(0);
- REGISTER_CLIENT(EID_SELECT, clients[i], EngDlg, OnClient);
- REGISTER_CLIENT(EID_DRAG_START, clients[i], EngDlg, OnRouteStart);
- REGISTER_CLIENT(EID_DRAG_DROP, clients[i], EngDlg, OnRouteComplete);
- }
- }
+ REGISTER_CLIENT(EID_SELECT, clients[i], EngDlg, OnClient);
+ REGISTER_CLIENT(EID_DRAG_START, clients[i], EngDlg, OnRouteStart);
+ REGISTER_CLIENT(EID_DRAG_DROP, clients[i], EngDlg, OnRouteComplete);
+ }
+ }
- close_btn = (Button*) FindControl(1);
- selected_name = (ActiveWindow*) FindControl(401);
- power_off = (Button*) FindControl(402);
- power_on = (Button*) FindControl(403);
- override = (Button*) FindControl(410);
- power_level = (Slider*) FindControl(404);
- capacity = (Slider*) FindControl(405);
+ close_btn = (Button*) FindControl(1);
+ selected_name = (ActiveWindow*) FindControl(401);
+ power_off = (Button*) FindControl(402);
+ power_on = (Button*) FindControl(403);
+ override = (Button*) FindControl(410);
+ power_level = (Slider*) FindControl(404);
+ capacity = (Slider*) FindControl(405);
- if (close_btn)
- REGISTER_CLIENT(EID_CLICK, close_btn, EngDlg, OnClose);
+ if (close_btn)
+ REGISTER_CLIENT(EID_CLICK, close_btn, EngDlg, OnClose);
- if (power_off)
- REGISTER_CLIENT(EID_CLICK, power_off, EngDlg, OnPowerOff);
+ if (power_off)
+ REGISTER_CLIENT(EID_CLICK, power_off, EngDlg, OnPowerOff);
- if (power_on)
- REGISTER_CLIENT(EID_CLICK, power_on, EngDlg, OnPowerOn);
+ if (power_on)
+ REGISTER_CLIENT(EID_CLICK, power_on, EngDlg, OnPowerOn);
- if (override)
- REGISTER_CLIENT(EID_CLICK, override, EngDlg, OnOverride);
+ if (override)
+ REGISTER_CLIENT(EID_CLICK, override, EngDlg, OnOverride);
- if (power_level)
- REGISTER_CLIENT(EID_CLICK, power_level, EngDlg, OnPowerLevel);
+ if (power_level)
+ REGISTER_CLIENT(EID_CLICK, power_level, EngDlg, OnPowerLevel);
- components = (ListBox*) FindControl(501);
+ components = (ListBox*) FindControl(501);
- if (components) {
- components->SetSelectedStyle(ListBox::LIST_ITEM_STYLE_FILLED_BOX);
- components->SetSortColumn(0);
- REGISTER_CLIENT(EID_SELECT, components, EngDlg, OnComponent);
- }
+ if (components) {
+ components->SetSelectedStyle(ListBox::LIST_ITEM_STYLE_FILLED_BOX);
+ components->SetSortColumn(0);
+ REGISTER_CLIENT(EID_SELECT, components, EngDlg, OnComponent);
+ }
- auto_repair = (Button*) FindControl(700);
- repair = (Button*) FindControl(502);
- replace = (Button*) FindControl(503);
- repair_time = FindControl(512);
- replace_time = FindControl(513);
- priority_increase = (Button*) FindControl(602);
- priority_decrease = (Button*) FindControl(603);
+ auto_repair = (Button*) FindControl(700);
+ repair = (Button*) FindControl(502);
+ replace = (Button*) FindControl(503);
+ repair_time = FindControl(512);
+ replace_time = FindControl(513);
+ priority_increase = (Button*) FindControl(602);
+ priority_decrease = (Button*) FindControl(603);
- if (auto_repair)
- REGISTER_CLIENT(EID_CLICK, auto_repair, EngDlg, OnAutoRepair);
+ if (auto_repair)
+ REGISTER_CLIENT(EID_CLICK, auto_repair, EngDlg, OnAutoRepair);
- if (repair)
- REGISTER_CLIENT(EID_CLICK, repair, EngDlg, OnRepair);
+ if (repair)
+ REGISTER_CLIENT(EID_CLICK, repair, EngDlg, OnRepair);
- if (replace)
- REGISTER_CLIENT(EID_CLICK, replace, EngDlg, OnReplace);
+ if (replace)
+ REGISTER_CLIENT(EID_CLICK, replace, EngDlg, OnReplace);
- if (repair_time)
- repair_time->Hide();
+ if (repair_time)
+ repair_time->Hide();
- if (replace_time)
- replace_time->Hide();
+ if (replace_time)
+ replace_time->Hide();
- if (priority_increase) {
- char up_arrow[2];
- up_arrow[0] = Font::ARROW_UP;
- up_arrow[1] = 0;
- priority_increase->SetText(up_arrow);
+ if (priority_increase) {
+ char up_arrow[2];
+ up_arrow[0] = Font::ARROW_UP;
+ up_arrow[1] = 0;
+ priority_increase->SetText(up_arrow);
- REGISTER_CLIENT(EID_CLICK, priority_increase, EngDlg, OnPriorityIncrease);
- }
+ REGISTER_CLIENT(EID_CLICK, priority_increase, EngDlg, OnPriorityIncrease);
+ }
- if (priority_decrease) {
- char dn_arrow[2];
- dn_arrow[0] = Font::ARROW_DOWN;
- dn_arrow[1] = 0;
- priority_decrease->SetText(dn_arrow);
+ if (priority_decrease) {
+ char dn_arrow[2];
+ dn_arrow[0] = Font::ARROW_DOWN;
+ dn_arrow[1] = 0;
+ priority_decrease->SetText(dn_arrow);
- REGISTER_CLIENT(EID_CLICK, priority_decrease, EngDlg, OnPriorityDecrease);
- }
+ REGISTER_CLIENT(EID_CLICK, priority_decrease, EngDlg, OnPriorityDecrease);
+ }
- repair_queue = (ListBox*) FindControl(601);
+ repair_queue = (ListBox*) FindControl(601);
- if (repair_queue) {
- repair_queue->SetSelectedStyle(ListBox::LIST_ITEM_STYLE_FILLED_BOX);
- REGISTER_CLIENT(EID_SELECT, repair_queue, EngDlg, OnQueue);
- }
+ if (repair_queue) {
+ repair_queue->SetSelectedStyle(ListBox::LIST_ITEM_STYLE_FILLED_BOX);
+ REGISTER_CLIENT(EID_SELECT, repair_queue, EngDlg, OnQueue);
+ }
}
// +--------------------------------------------------------------------+
@@ -172,25 +172,25 @@ EngDlg::RegisterControls()
void
EngDlg::Show()
{
- FormWindow::Show();
-
- if (ship) {
- int nsources = ship->Reactors().size();
-
- for (int i = 0; i < 4; i++) {
- if (i >= nsources) {
- sources[i]->Hide();
- source_levels[i]->Hide();
- clients[i]->Hide();
- }
- }
- }
+ FormWindow::Show();
+
+ if (ship) {
+ int nsources = ship->Reactors().size();
+
+ for (int i = 0; i < 4; i++) {
+ if (i >= nsources) {
+ sources[i]->Hide();
+ source_levels[i]->Hide();
+ clients[i]->Hide();
+ }
+ }
+ }
}
void
EngDlg::Hide()
{
- FormWindow::Hide();
+ FormWindow::Hide();
}
// +--------------------------------------------------------------------+
@@ -198,89 +198,89 @@ EngDlg::Hide()
void
EngDlg::SetShip(Ship* s)
{
- if (IsShown() && ship != s) {
- selected_source = 0;
- selected_repair = 0;
- selected_component = 0;
- selected_clients.clear();
-
- ship = s;
-
- UpdateRouteTables();
- ExecFrame();
- }
-
- // make sure we clear the ship, even if not shown:
- else if (!s) {
- ship = 0;
- }
+ if (IsShown() && ship != s) {
+ selected_source = 0;
+ selected_repair = 0;
+ selected_component = 0;
+ selected_clients.clear();
+
+ ship = s;
+
+ UpdateRouteTables();
+ ExecFrame();
+ }
+
+ // make sure we clear the ship, even if not shown:
+ else if (!s) {
+ ship = 0;
+ }
}
void
EngDlg::UpdateRouteTables()
{
- for (int i = 0; i < 4; i++)
- clients[i]->ClearSelection();
+ for (int i = 0; i < 4; i++)
+ clients[i]->ClearSelection();
- if (components)
- components->ClearItems();
+ if (components)
+ components->ClearItems();
- if (priority_increase)
- priority_increase->SetEnabled(false);
+ if (priority_increase)
+ priority_increase->SetEnabled(false);
- if (priority_decrease)
- priority_decrease->SetEnabled(false);
+ if (priority_decrease)
+ priority_decrease->SetEnabled(false);
- if (ship) {
- for (int i = 0; i < 4; i++) {
- if (sources[i])
- sources[i]->Hide();
+ if (ship) {
+ for (int i = 0; i < 4; i++) {
+ if (sources[i])
+ sources[i]->Hide();
- if (source_levels[i])
- source_levels[i]->Hide();
+ if (source_levels[i])
+ source_levels[i]->Hide();
- if (clients[i]) {
- clients[i]->ClearItems();
- clients[i]->Hide();
- }
- }
+ if (clients[i]) {
+ clients[i]->ClearItems();
+ clients[i]->Hide();
+ }
+ }
- int reactor_index = 0;
- ListIter<PowerSource> reactor_iter = ship->Reactors();
+ int reactor_index = 0;
+ ListIter<PowerSource> reactor_iter = ship->Reactors();
- while (++reactor_iter) {
- PowerSource* reactor = reactor_iter.value();
+ while (++reactor_iter) {
+ PowerSource* reactor = reactor_iter.value();
- if (sources[reactor_index] && clients[reactor_index]) {
- sources[reactor_index]->SetText(Game::GetText(reactor->Abbreviation()));
- sources[reactor_index]->Show();
+ if (sources[reactor_index] && clients[reactor_index]) {
+ sources[reactor_index]->SetText(Game::GetText(reactor->Abbreviation()));
+ sources[reactor_index]->Show();
- source_levels[reactor_index]->Show();
- source_levels[reactor_index]->SetValue((int) reactor->GetPowerLevel());
+ source_levels[reactor_index]->Show();
+ source_levels[reactor_index]->SetValue((int) reactor->GetPowerLevel());
- clients[reactor_index]->Show();
+ clients[reactor_index]->Show();
- int index = 0;
- ListIter<System> client = reactor->Clients();
- while (++client) {
- char abrv[64], num[20];
- FormatNumber(num, client->GetPowerLevel());
- strcpy(abrv, Game::GetText(client->Name()));
+ int index = 0;
+ ListIter<System> client = reactor->Clients();
+ while (++client) {
+ char abrv[64], num[20];
+ FormatNumber(num, client->GetPowerLevel());
+ strcpy(abrv, Game::GetText(client->Name()));
- clients[reactor_index]->AddItemWithData(Game::GetText(abrv), index);
- clients[reactor_index]->SetItemText(index, 1, num);
- clients[reactor_index]->SetItemData(index, 1, (DWORD) client->GetPowerLevel());
+ clients[reactor_index]->AddItemWithData(Game::GetText(abrv), index);
+ clients[reactor_index]->SetItemText(index, 1, num);
+ clients[reactor_index]->SetItemData(index, 1, (DWORD) client->GetPowerLevel());
- index++;
- }
+ index++;
+ }
- clients[reactor_index]->SortItems();
- }
+ clients[reactor_index]->SortItems();
+ }
- reactor->RouteScanned();
- reactor_index++;
- }
- }
+ reactor->RouteScanned();
+ reactor_index++;
+ }
+ }
}
// +--------------------------------------------------------------------+
@@ -288,328 +288,328 @@ EngDlg::UpdateRouteTables()
void
EngDlg::ExecFrame()
{
- if (IsShown())
- UpdateSelection();
+ if (IsShown())
+ UpdateSelection();
}
void
EngDlg::UpdateSelection()
{
- if (!ship) return;
-
- char num[20];
- int nsources = ship->Reactors().size();
-
- // update the route tables:
- for (int source_index = 0; source_index < nsources; source_index++) {
- PowerSource* reac = ship->Reactors()[source_index];
-
- if (reac->RouteChanged())
- UpdateRouteTables();
-
- Color c(62,106,151);
-
- if (reac->IsPowerOn()) {
- switch (reac->Status()) {
- default:
- case System::NOMINAL: break;
- case System::DEGRADED: c = Color::Yellow; break;
- case System::CRITICAL: c = Color::BrightRed; break;
- case System::DESTROYED: c = Color::DarkRed; break;
- }
- }
- else {
- c = Color::Gray;
- }
-
- sources[source_index]->SetBackColor(c);
- source_levels[source_index]->SetEnabled(reac->IsPowerOn());
- source_levels[source_index]->SetValue((int) reac->GetPowerLevel());
-
- ListBox* client_list = clients[source_index];
-
- for (int i = 0; i < client_list->NumItems(); i++) {
- int index = client_list->GetItemData(i);
-
- System* client = reac->Clients()[index];
- FormatNumber(num, client->GetPowerLevel());
- client_list->SetItemText(i, 1, num);
- client_list->SetItemData(i, 1, (DWORD) client->GetPowerLevel());
-
- if (client->IsPowerOn()) {
- Color c;
-
- switch (client->Status()) {
- default:
- case System::NOMINAL: c = Color::White; break;
- case System::DEGRADED: c = Color::Yellow; break;
- case System::CRITICAL: c = Color::BrightRed; break;
- case System::DESTROYED: c = Color::DarkRed; break;
- }
-
- client_list->SetItemColor(i, c);
- }
- else {
- client_list->SetItemColor(i, Color::Gray);
- }
-
- }
- }
-
- // update the detail info:
- if (selected_source) {
- selected_name->SetText(Game::GetText(selected_source->Name()));
- power_off->SetEnabled(true);
- power_on->SetEnabled(true);
- override->SetEnabled(true);
- if (override->GetButtonState() != 2)
- override->SetButtonState(selected_source->GetPowerLevel() > 100 ? 1 : 0);
- power_level->SetEnabled(selected_source->IsPowerOn());
- power_level->SetValue((int) selected_source->GetPowerLevel());
-
- if (selected_source->Safety() < 100) {
- power_level->SetMarker((int) selected_source->Safety(), 0);
- power_level->SetMarker((int) selected_source->Safety(), 1);
- }
- else {
- power_level->SetMarker(-1, 0);
- power_level->SetMarker(-1, 1);
- }
-
- capacity->SetEnabled(true);
- capacity->SetValue((int) selected_source->Charge());
-
- if (selected_source->IsPowerOn()) {
- if (power_on->GetButtonState() != 2)
- power_on->SetButtonState(1);
- if (power_off->GetButtonState() != 2)
- power_off->SetButtonState(0);
- }
- else {
- if (power_on->GetButtonState() != 2)
- power_on->SetButtonState(0);
- if (power_off->GetButtonState() != 2)
- power_off->SetButtonState(1);
- }
-
- if (components) {
- for (int i = 0; i < components->NumItems(); i++) {
- int index = components->GetItemData(i);
-
- Component* comp = selected_source->GetComponents()[index];
-
- Text stat = "OK";
- Color c;
-
- switch (comp->Status()) {
- case Component::DESTROYED:
- case Component::CRITICAL: stat = "FAIL"; c = Color::BrightRed; break;
- case Component::DEGRADED: stat = "WARN"; c = Color::Yellow; break;
- case Component::NOMINAL: stat = "OK"; c = Color::White; break;
- case Component::REPLACE:
- case Component::REPAIR: stat = "MAINT"; c = Color::Cyan; break;
- }
-
- stat = Game::GetText(Text("EngDlg.") + stat);
- components->SetItemText(i, 1, stat);
- components->SetItemData(i, 1, (int) comp->Status());
-
- FormatNumber(num, comp->SpareCount());
- components->SetItemText(i, 2, num);
- components->SetItemData(i, 2, comp->SpareCount());
- components->SetItemColor(i, c);
- }
- }
- }
-
- else if (selected_clients.size() == 1) {
- System* sink = selected_clients[0];
-
- selected_name->SetText(Game::GetText(sink->Name()));
- power_off->SetEnabled(true);
- power_on->SetEnabled(true);
- override->SetEnabled(true);
- if (override->GetButtonState() != 2)
- override->SetButtonState(sink->GetPowerLevel() > 100 ? 1 : 0);
- power_level->SetEnabled(sink->IsPowerOn());
- power_level->SetValue((int) sink->GetPowerLevel());
-
- if (sink->Safety() < 100) {
- power_level->SetMarker((int) sink->Safety(), 0);
- power_level->SetMarker((int) sink->Safety(), 1);
- }
- else {
- power_level->SetMarker(-1, 0);
- power_level->SetMarker(-1, 1);
- }
-
- capacity->SetEnabled(true);
- capacity->SetValue((int) sink->Charge());
-
- if (sink->IsPowerOn()) {
- if (power_on->GetButtonState() != 2)
- power_on->SetButtonState(1);
- if (power_off->GetButtonState() != 2)
- power_off->SetButtonState(0);
- }
- else {
- if (power_on->GetButtonState() != 2)
- power_on->SetButtonState(0);
- if (power_off->GetButtonState() != 2)
- power_off->SetButtonState(1);
- }
-
- if (components) {
- for (int i = 0; i < components->NumItems(); i++) {
- int index = components->GetItemData(i);
-
- Component* comp = sink->GetComponents()[index];
-
- Text stat = "OK";
- Color c;
-
- switch (comp->Status()) {
- case Component::DESTROYED:
- case Component::CRITICAL: stat = "FAIL"; c = Color::BrightRed; break;
- case Component::DEGRADED: stat = "WARN"; c = Color::Yellow; break;
- case Component::NOMINAL: stat = "OK"; c = Color::White; break;
- case Component::REPLACE:
- case Component::REPAIR: stat = "MAINT"; c = Color::Cyan; break;
- }
-
- stat = Game::GetText(Text("EngDlg.") + stat);
- components->SetItemText(i, 1, stat);
- components->SetItemData(i, 1, (int) comp->Status());
-
- FormatNumber(num, comp->SpareCount());
- components->SetItemText(i, 2, num);
- components->SetItemData(i, 2, comp->SpareCount());
- components->SetItemColor(i, c);
- }
- }
- }
-
- else if (selected_clients.size() > 1) {
- System* sink = selected_clients[0];
-
- selected_name->SetText(Game::GetText("[Multiple]"));
- power_off->SetEnabled(true);
- power_on->SetEnabled(true);
- override->SetEnabled(true);
- if (override->GetButtonState() != 2)
- override->SetButtonState(sink->GetPowerLevel() > 100 ? 1 : 0);
- power_level->SetEnabled(true);
- power_level->SetValue((int) sink->GetPowerLevel());
-
- if (sink->Safety() < 100) {
- power_level->SetMarker((int) sink->Safety(), 0);
- power_level->SetMarker((int) sink->Safety(), 1);
- }
- else {
- power_level->SetMarker(-1, 0);
- power_level->SetMarker(-1, 1);
- }
-
- capacity->SetEnabled(true);
- capacity->SetValue((int) sink->Charge());
-
- if (sink->IsPowerOn()) {
- if (power_on->GetButtonState() != 2)
- power_on->SetButtonState(1);
- if (power_off->GetButtonState() != 2)
- power_off->SetButtonState(0);
- }
- else {
- if (power_on->GetButtonState() != 2)
- power_on->SetButtonState(0);
- if (power_off->GetButtonState() != 2)
- power_off->SetButtonState(1);
- }
- }
-
- else {
- selected_name->SetText(Game::GetText("No Selection"));
- power_off->SetEnabled(false);
- power_off->SetButtonState(0);
- power_on->SetEnabled(false);
- power_on->SetButtonState(0);
- override->SetEnabled(false);
- override->SetButtonState(0);
- power_level->SetEnabled(false);
- power_level->SetValue(0);
- power_level->SetMarker(-1, 0);
- power_level->SetMarker(-1, 1);
- capacity->SetEnabled(false);
- capacity->SetValue(0);
- }
-
- // display the repair queue:
- if (repair_queue) {
- // if adding to the queue, dump and reload:
- if (repair_queue->NumItems() < ship->RepairQueue().size()) {
- repair_queue->ClearItems();
-
- int i = 0;
- ListIter<System> iter = ship->RepairQueue();
- while (++iter) {
- double time_remaining = 0;
- char etr[20];
-
- System* sys = iter.value();
-
- ListIter<Component> comp = sys->GetComponents();
- while (++comp) {
- Component* c = comp.value();
- if (c->TimeRemaining() > time_remaining)
- time_remaining = c->TimeRemaining();
- }
-
- FormatTime(etr, (int) (time_remaining / ship->RepairSpeed()));
- repair_queue->AddItem(Game::GetText(sys->Name()));
- repair_queue->SetItemText(i, 1, etr);
- i++;
- }
- }
-
- // otherwise, update in place:
- else {
- while (repair_queue->NumItems() > ship->RepairQueue().size())
- repair_queue->RemoveItem(0);
-
- bool found = false;
-
- for (int i = 0; i < repair_queue->NumItems(); i++) {
- double time_remaining = 0;
- char etr[20];
-
- System* sys = ship->RepairQueue().at(i);
-
- ListIter<Component> comp = sys->GetComponents();
- while (++comp) {
- Component* c = comp.value();
- if (c->TimeRemaining() > time_remaining)
- time_remaining = c->TimeRemaining();
- }
-
- FormatTime(etr, (int) time_remaining);
- repair_queue->SetItemText(i, sys->Name());
- repair_queue->SetItemText(i, 1, etr);
-
- if (sys == selected_repair) {
- found = true;
-
- if (!Mouse::LButton())
- repair_queue->SetSelected(i);
- }
- }
-
- if (!found)
- selected_repair = 0;
- }
- }
-
- if (auto_repair && auto_repair->GetButtonState() != 2)
- auto_repair->SetButtonState(ship->AutoRepair() ? 1 : 0);
+ if (!ship) return;
+
+ char num[20];
+ int nsources = ship->Reactors().size();
+
+ // update the route tables:
+ for (int source_index = 0; source_index < nsources; source_index++) {
+ PowerSource* reac = ship->Reactors()[source_index];
+
+ if (reac->RouteChanged())
+ UpdateRouteTables();
+
+ Color c(62,106,151);
+
+ if (reac->IsPowerOn()) {
+ switch (reac->Status()) {
+ default:
+ case System::NOMINAL: break;
+ case System::DEGRADED: c = Color::Yellow; break;
+ case System::CRITICAL: c = Color::BrightRed; break;
+ case System::DESTROYED: c = Color::DarkRed; break;
+ }
+ }
+ else {
+ c = Color::Gray;
+ }
+
+ sources[source_index]->SetBackColor(c);
+ source_levels[source_index]->SetEnabled(reac->IsPowerOn());
+ source_levels[source_index]->SetValue((int) reac->GetPowerLevel());
+
+ ListBox* client_list = clients[source_index];
+
+ for (int i = 0; i < client_list->NumItems(); i++) {
+ int index = client_list->GetItemData(i);
+
+ System* client = reac->Clients()[index];
+ FormatNumber(num, client->GetPowerLevel());
+ client_list->SetItemText(i, 1, num);
+ client_list->SetItemData(i, 1, (DWORD) client->GetPowerLevel());
+
+ if (client->IsPowerOn()) {
+ Color c;
+
+ switch (client->Status()) {
+ default:
+ case System::NOMINAL: c = Color::White; break;
+ case System::DEGRADED: c = Color::Yellow; break;
+ case System::CRITICAL: c = Color::BrightRed; break;
+ case System::DESTROYED: c = Color::DarkRed; break;
+ }
+
+ client_list->SetItemColor(i, c);
+ }
+ else {
+ client_list->SetItemColor(i, Color::Gray);
+ }
+
+ }
+ }
+
+ // update the detail info:
+ if (selected_source) {
+ selected_name->SetText(Game::GetText(selected_source->Name()));
+ power_off->SetEnabled(true);
+ power_on->SetEnabled(true);
+ override->SetEnabled(true);
+ if (override->GetButtonState() != 2)
+ override->SetButtonState(selected_source->GetPowerLevel() > 100 ? 1 : 0);
+ power_level->SetEnabled(selected_source->IsPowerOn());
+ power_level->SetValue((int) selected_source->GetPowerLevel());
+
+ if (selected_source->Safety() < 100) {
+ power_level->SetMarker((int) selected_source->Safety(), 0);
+ power_level->SetMarker((int) selected_source->Safety(), 1);
+ }
+ else {
+ power_level->SetMarker(-1, 0);
+ power_level->SetMarker(-1, 1);
+ }
+
+ capacity->SetEnabled(true);
+ capacity->SetValue((int) selected_source->Charge());
+
+ if (selected_source->IsPowerOn()) {
+ if (power_on->GetButtonState() != 2)
+ power_on->SetButtonState(1);
+ if (power_off->GetButtonState() != 2)
+ power_off->SetButtonState(0);
+ }
+ else {
+ if (power_on->GetButtonState() != 2)
+ power_on->SetButtonState(0);
+ if (power_off->GetButtonState() != 2)
+ power_off->SetButtonState(1);
+ }
+
+ if (components) {
+ for (int i = 0; i < components->NumItems(); i++) {
+ int index = components->GetItemData(i);
+
+ Component* comp = selected_source->GetComponents()[index];
+
+ Text stat = "OK";
+ Color c;
+
+ switch (comp->Status()) {
+ case Component::DESTROYED:
+ case Component::CRITICAL: stat = "FAIL"; c = Color::BrightRed; break;
+ case Component::DEGRADED: stat = "WARN"; c = Color::Yellow; break;
+ case Component::NOMINAL: stat = "OK"; c = Color::White; break;
+ case Component::REPLACE:
+ case Component::REPAIR: stat = "MAINT"; c = Color::Cyan; break;
+ }
+
+ stat = Game::GetText(Text("EngDlg.") + stat);
+ components->SetItemText(i, 1, stat);
+ components->SetItemData(i, 1, (int) comp->Status());
+
+ FormatNumber(num, comp->SpareCount());
+ components->SetItemText(i, 2, num);
+ components->SetItemData(i, 2, comp->SpareCount());
+ components->SetItemColor(i, c);
+ }
+ }
+ }
+
+ else if (selected_clients.size() == 1) {
+ System* sink = selected_clients[0];
+
+ selected_name->SetText(Game::GetText(sink->Name()));
+ power_off->SetEnabled(true);
+ power_on->SetEnabled(true);
+ override->SetEnabled(true);
+ if (override->GetButtonState() != 2)
+ override->SetButtonState(sink->GetPowerLevel() > 100 ? 1 : 0);
+ power_level->SetEnabled(sink->IsPowerOn());
+ power_level->SetValue((int) sink->GetPowerLevel());
+
+ if (sink->Safety() < 100) {
+ power_level->SetMarker((int) sink->Safety(), 0);
+ power_level->SetMarker((int) sink->Safety(), 1);
+ }
+ else {
+ power_level->SetMarker(-1, 0);
+ power_level->SetMarker(-1, 1);
+ }
+
+ capacity->SetEnabled(true);
+ capacity->SetValue((int) sink->Charge());
+
+ if (sink->IsPowerOn()) {
+ if (power_on->GetButtonState() != 2)
+ power_on->SetButtonState(1);
+ if (power_off->GetButtonState() != 2)
+ power_off->SetButtonState(0);
+ }
+ else {
+ if (power_on->GetButtonState() != 2)
+ power_on->SetButtonState(0);
+ if (power_off->GetButtonState() != 2)
+ power_off->SetButtonState(1);
+ }
+
+ if (components) {
+ for (int i = 0; i < components->NumItems(); i++) {
+ int index = components->GetItemData(i);
+
+ Component* comp = sink->GetComponents()[index];
+
+ Text stat = "OK";
+ Color c;
+
+ switch (comp->Status()) {
+ case Component::DESTROYED:
+ case Component::CRITICAL: stat = "FAIL"; c = Color::BrightRed; break;
+ case Component::DEGRADED: stat = "WARN"; c = Color::Yellow; break;
+ case Component::NOMINAL: stat = "OK"; c = Color::White; break;
+ case Component::REPLACE:
+ case Component::REPAIR: stat = "MAINT"; c = Color::Cyan; break;
+ }
+
+ stat = Game::GetText(Text("EngDlg.") + stat);
+ components->SetItemText(i, 1, stat);
+ components->SetItemData(i, 1, (int) comp->Status());
+
+ FormatNumber(num, comp->SpareCount());
+ components->SetItemText(i, 2, num);
+ components->SetItemData(i, 2, comp->SpareCount());
+ components->SetItemColor(i, c);
+ }
+ }
+ }
+
+ else if (selected_clients.size() > 1) {
+ System* sink = selected_clients[0];
+
+ selected_name->SetText(Game::GetText("[Multiple]"));
+ power_off->SetEnabled(true);
+ power_on->SetEnabled(true);
+ override->SetEnabled(true);
+ if (override->GetButtonState() != 2)
+ override->SetButtonState(sink->GetPowerLevel() > 100 ? 1 : 0);
+ power_level->SetEnabled(true);
+ power_level->SetValue((int) sink->GetPowerLevel());
+
+ if (sink->Safety() < 100) {
+ power_level->SetMarker((int) sink->Safety(), 0);
+ power_level->SetMarker((int) sink->Safety(), 1);
+ }
+ else {
+ power_level->SetMarker(-1, 0);
+ power_level->SetMarker(-1, 1);
+ }
+
+ capacity->SetEnabled(true);
+ capacity->SetValue((int) sink->Charge());
+
+ if (sink->IsPowerOn()) {
+ if (power_on->GetButtonState() != 2)
+ power_on->SetButtonState(1);
+ if (power_off->GetButtonState() != 2)
+ power_off->SetButtonState(0);
+ }
+ else {
+ if (power_on->GetButtonState() != 2)
+ power_on->SetButtonState(0);
+ if (power_off->GetButtonState() != 2)
+ power_off->SetButtonState(1);
+ }
+ }
+
+ else {
+ selected_name->SetText(Game::GetText("No Selection"));
+ power_off->SetEnabled(false);
+ power_off->SetButtonState(0);
+ power_on->SetEnabled(false);
+ power_on->SetButtonState(0);
+ override->SetEnabled(false);
+ override->SetButtonState(0);
+ power_level->SetEnabled(false);
+ power_level->SetValue(0);
+ power_level->SetMarker(-1, 0);
+ power_level->SetMarker(-1, 1);
+ capacity->SetEnabled(false);
+ capacity->SetValue(0);
+ }
+
+ // display the repair queue:
+ if (repair_queue) {
+ // if adding to the queue, dump and reload:
+ if (repair_queue->NumItems() < ship->RepairQueue().size()) {
+ repair_queue->ClearItems();
+
+ int i = 0;
+ ListIter<System> iter = ship->RepairQueue();
+ while (++iter) {
+ double time_remaining = 0;
+ char etr[20];
+
+ System* sys = iter.value();
+
+ ListIter<Component> comp = sys->GetComponents();
+ while (++comp) {
+ Component* c = comp.value();
+ if (c->TimeRemaining() > time_remaining)
+ time_remaining = c->TimeRemaining();
+ }
+
+ FormatTime(etr, (int) (time_remaining / ship->RepairSpeed()));
+ repair_queue->AddItem(Game::GetText(sys->Name()));
+ repair_queue->SetItemText(i, 1, etr);
+ i++;
+ }
+ }
+
+ // otherwise, update in place:
+ else {
+ while (repair_queue->NumItems() > ship->RepairQueue().size())
+ repair_queue->RemoveItem(0);
+
+ bool found = false;
+
+ for (int i = 0; i < repair_queue->NumItems(); i++) {
+ double time_remaining = 0;
+ char etr[20];
+
+ System* sys = ship->RepairQueue().at(i);
+
+ ListIter<Component> comp = sys->GetComponents();
+ while (++comp) {
+ Component* c = comp.value();
+ if (c->TimeRemaining() > time_remaining)
+ time_remaining = c->TimeRemaining();
+ }
+
+ FormatTime(etr, (int) time_remaining);
+ repair_queue->SetItemText(i, sys->Name());
+ repair_queue->SetItemText(i, 1, etr);
+
+ if (sys == selected_repair) {
+ found = true;
+
+ if (!Mouse::LButton())
+ repair_queue->SetSelected(i);
+ }
+ }
+
+ if (!found)
+ selected_repair = 0;
+ }
+ }
+
+ if (auto_repair && auto_repair->GetButtonState() != 2)
+ auto_repair->SetButtonState(ship->AutoRepair() ? 1 : 0);
}
// +--------------------------------------------------------------------+
@@ -617,96 +617,96 @@ EngDlg::UpdateSelection()
void
EngDlg::OnSource(AWEvent* event)
{
- selected_source = 0;
- selected_clients.clear();
- selected_component = 0;
-
- if (!ship) return;
-
- int source_index = -1;
-
- for (int i = 0; i < 4; i++)
- if (event->window == sources[i])
- source_index = i;
-
- // found the source list:
- if (source_index >= 0) {
- selected_source = ship->Reactors()[source_index];
- }
-
- for (int i = 0; i < 4; i++) {
- clients[i]->ClearSelection();
- }
-
- if (components) {
- components->ClearItems();
-
- if (repair) repair->SetEnabled(false);
- if (replace) replace->SetEnabled(false);
- if (repair_time) repair_time->Hide();
- if (replace_time) replace_time->Hide();
-
- if (selected_source && selected_source->GetComponents().size()) {
- int index = 0;
- ListIter<Component> comp = selected_source->GetComponents();
- while (++comp)
- components->AddItemWithData(Game::GetText(comp->Abbreviation()), index++);
- }
- }
+ selected_source = 0;
+ selected_clients.clear();
+ selected_component = 0;
+
+ if (!ship) return;
+
+ int source_index = -1;
+
+ for (int i = 0; i < 4; i++)
+ if (event->window == sources[i])
+ source_index = i;
+
+ // found the source list:
+ if (source_index >= 0) {
+ selected_source = ship->Reactors()[source_index];
+ }
+
+ for (int i = 0; i < 4; i++) {
+ clients[i]->ClearSelection();
+ }
+
+ if (components) {
+ components->ClearItems();
+
+ if (repair) repair->SetEnabled(false);
+ if (replace) replace->SetEnabled(false);
+ if (repair_time) repair_time->Hide();
+ if (replace_time) replace_time->Hide();
+
+ if (selected_source && selected_source->GetComponents().size()) {
+ int index = 0;
+ ListIter<Component> comp = selected_source->GetComponents();
+ while (++comp)
+ components->AddItemWithData(Game::GetText(comp->Abbreviation()), index++);
+ }
+ }
}
void
EngDlg::OnClient(AWEvent* event)
{
- selected_source = 0;
- selected_clients.clear();
- selected_component = 0;
-
- if (!ship) return;
-
- int source_index = -1;
-
- for (int i = 0; i < 4; i++) {
- if (event->window == clients[i])
- source_index = i;
- else
- clients[i]->ClearSelection();
- }
-
- // found the source list:
- if (source_index >= 0) {
- // find the power source:
- PowerSource* src = ship->Reactors()[source_index];
-
- // build a list of the clients to be manipulated:
- List<System>& client_list = src->Clients();
- for (int i = 0; i < clients[source_index]->NumItems(); i++) {
- if (clients[source_index]->IsSelected(i)) {
- int index = clients[source_index]->GetItemData(i);
- selected_clients.append(client_list[index]);
- }
- }
- }
-
- if (components) {
- components->ClearItems();
-
- if (repair) repair->SetEnabled(false);
- if (replace) replace->SetEnabled(false);
- if (repair_time) repair_time->Hide();
- if (replace_time) replace_time->Hide();
-
- if (selected_clients.size() == 1) {
- System* sink = selected_clients[0];
-
- if (sink->GetComponents().size()) {
- int index = 0;
- ListIter<Component> comp = sink->GetComponents();
- while (++comp)
- components->AddItemWithData(Game::GetText(comp->Abbreviation()), index++);
- }
- }
- }
+ selected_source = 0;
+ selected_clients.clear();
+ selected_component = 0;
+
+ if (!ship) return;
+
+ int source_index = -1;
+
+ for (int i = 0; i < 4; i++) {
+ if (event->window == clients[i])
+ source_index = i;
+ else
+ clients[i]->ClearSelection();
+ }
+
+ // found the source list:
+ if (source_index >= 0) {
+ // find the power source:
+ PowerSource* src = ship->Reactors()[source_index];
+
+ // build a list of the clients to be manipulated:
+ List<System>& client_list = src->Clients();
+ for (int i = 0; i < clients[source_index]->NumItems(); i++) {
+ if (clients[source_index]->IsSelected(i)) {
+ int index = clients[source_index]->GetItemData(i);
+ selected_clients.append(client_list[index]);
+ }
+ }
+ }
+
+ if (components) {
+ components->ClearItems();
+
+ if (repair) repair->SetEnabled(false);
+ if (replace) replace->SetEnabled(false);
+ if (repair_time) repair_time->Hide();
+ if (replace_time) replace_time->Hide();
+
+ if (selected_clients.size() == 1) {
+ System* sink = selected_clients[0];
+
+ if (sink->GetComponents().size()) {
+ int index = 0;
+ ListIter<Component> comp = sink->GetComponents();
+ while (++comp)
+ components->AddItemWithData(Game::GetText(comp->Abbreviation()), index++);
+ }
+ }
+ }
}
// +--------------------------------------------------------------------+
@@ -714,29 +714,29 @@ EngDlg::OnClient(AWEvent* event)
void
EngDlg::OnRouteStart(AWEvent* event)
{
- if (!ship) return;
-
- int source_index = -1;
-
- for (int i = 0; i < 4; i++)
- if (event->window == clients[i])
- source_index = i;
-
- // found the source list:
- if (source_index >= 0) {
- // remember the power source:
- route_source = ship->Reactors()[source_index];
- route_list.clear();
-
- // build a list of the clients to be moved:
- List<System>& rsc = route_source->Clients();
- for (int i = 0; i < clients[source_index]->NumItems(); i++) {
- if (clients[source_index]->IsSelected(i)) {
- int index = clients[source_index]->GetItemData(i);
- route_list.append(rsc[index]);
- }
- }
- }
+ if (!ship) return;
+
+ int source_index = -1;
+
+ for (int i = 0; i < 4; i++)
+ if (event->window == clients[i])
+ source_index = i;
+
+ // found the source list:
+ if (source_index >= 0) {
+ // remember the power source:
+ route_source = ship->Reactors()[source_index];
+ route_list.clear();
+
+ // build a list of the clients to be moved:
+ List<System>& rsc = route_source->Clients();
+ for (int i = 0; i < clients[source_index]->NumItems(); i++) {
+ if (clients[source_index]->IsSelected(i)) {
+ int index = clients[source_index]->GetItemData(i);
+ route_list.append(rsc[index]);
+ }
+ }
+ }
}
// +--------------------------------------------------------------------+
@@ -744,29 +744,29 @@ EngDlg::OnRouteStart(AWEvent* event)
void
EngDlg::OnRouteComplete(AWEvent* event)
{
- if (!ship || !route_source) return;
+ if (!ship || !route_source) return;
- int dest_index = -1;
+ int dest_index = -1;
- for (int i = 0; i < 4; i++)
- if (event->window == clients[i])
- dest_index = i;
+ for (int i = 0; i < 4; i++)
+ if (event->window == clients[i])
+ dest_index = i;
- // found the destination list, copy the clients over:
- if (dest_index >= 0) {
- PowerSource* route_dest = ship->Reactors()[dest_index];
+ // found the destination list, copy the clients over:
+ if (dest_index >= 0) {
+ PowerSource* route_dest = ship->Reactors()[dest_index];
- if (!route_dest)
- return;
+ if (!route_dest)
+ return;
- ListIter<System> iter = route_list;
- while (++iter) {
- System* client = iter.value();
+ ListIter<System> iter = route_list;
+ while (++iter) {
+ System* client = iter.value();
- route_source->RemoveClient(client);
- route_dest->AddClient(client);
- }
- }
+ route_source->RemoveClient(client);
+ route_dest->AddClient(client);
+ }
+ }
}
// +--------------------------------------------------------------------+
@@ -774,92 +774,92 @@ EngDlg::OnRouteComplete(AWEvent* event)
void
EngDlg::OnPowerOff(AWEvent* event)
{
- if (selected_source) {
- selected_source->PowerOff();
-
- power_off->SetButtonState(1);
- power_on->SetButtonState(0);
- override->SetButtonState(0);
- }
-
- else if (selected_clients.size() > 0) {
- ListIter<System> iter = selected_clients;
- while (++iter)
- iter->PowerOff();
-
- power_off->SetButtonState(1);
- power_on->SetButtonState(0);
- override->SetButtonState(0);
- }
+ if (selected_source) {
+ selected_source->PowerOff();
+
+ power_off->SetButtonState(1);
+ power_on->SetButtonState(0);
+ override->SetButtonState(0);
+ }
+
+ else if (selected_clients.size() > 0) {
+ ListIter<System> iter = selected_clients;
+ while (++iter)
+ iter->PowerOff();
+
+ power_off->SetButtonState(1);
+ power_on->SetButtonState(0);
+ override->SetButtonState(0);
+ }
}
void
EngDlg::OnPowerOn(AWEvent* event)
{
- if (selected_source) {
- selected_source->PowerOn();
-
- power_off->SetButtonState(0);
- power_on->SetButtonState(1);
- override->SetButtonState(0);
- }
-
- else if (selected_clients.size() > 0) {
- ListIter<System> iter = selected_clients;
- while (++iter)
- iter->PowerOn();
-
- power_off->SetButtonState(0);
- power_on->SetButtonState(1);
- override->SetButtonState(0);
- }
+ if (selected_source) {
+ selected_source->PowerOn();
+
+ power_off->SetButtonState(0);
+ power_on->SetButtonState(1);
+ override->SetButtonState(0);
+ }
+
+ else if (selected_clients.size() > 0) {
+ ListIter<System> iter = selected_clients;
+ while (++iter)
+ iter->PowerOn();
+
+ power_off->SetButtonState(0);
+ power_on->SetButtonState(1);
+ override->SetButtonState(0);
+ }
}
void
EngDlg::OnOverride(AWEvent* event)
{
- bool over = false;
+ bool over = false;
- if (override->GetButtonState() > 0)
- over = true;
+ if (override->GetButtonState() > 0)
+ over = true;
- if (selected_source) {
- selected_source->SetOverride(over);
- }
+ if (selected_source) {
+ selected_source->SetOverride(over);
+ }
- else if (selected_clients.size() > 0) {
- ListIter<System> iter = selected_clients;
- while (++iter)
- iter->SetOverride(over);
- }
+ else if (selected_clients.size() > 0) {
+ ListIter<System> iter = selected_clients;
+ while (++iter)
+ iter->SetOverride(over);
+ }
- if (over) {
- power_off->SetButtonState(0);
- power_on->SetButtonState(1);
- }
+ if (over) {
+ power_off->SetButtonState(0);
+ power_on->SetButtonState(1);
+ }
}
void
EngDlg::OnPowerLevel(AWEvent* event)
{
- int level = power_level->GetValue();
+ int level = power_level->GetValue();
- if (level < 0)
- level = 0;
- else if (level > 100)
- level = 100;
+ if (level < 0)
+ level = 0;
+ else if (level > 100)
+ level = 100;
- if (selected_source)
- selected_source->SetPowerLevel(level);
+ if (selected_source)
+ selected_source->SetPowerLevel(level);
- else if (selected_clients.size() > 0) {
- ListIter<System> iter = selected_clients;
- while (++iter)
- iter->SetPowerLevel(level);
- }
+ else if (selected_clients.size() > 0) {
+ ListIter<System> iter = selected_clients;
+ while (++iter)
+ iter->SetPowerLevel(level);
+ }
- if (override)
- override->SetButtonState(0);
+ if (override)
+ override->SetButtonState(0);
}
// +--------------------------------------------------------------------+
@@ -867,79 +867,79 @@ EngDlg::OnPowerLevel(AWEvent* event)
void
EngDlg::OnComponent(AWEvent* event)
{
- selected_component = 0;
-
- if (repair) repair->SetEnabled(false);
- if (replace) replace->SetEnabled(false);
- if (repair_time) repair_time->Hide();
- if (replace_time) replace_time->Hide();
-
- // find index of selected component:
- int component_index = -1;
-
- if (components) {
- int n = components->GetSelection();
- if (n >= 0)
- component_index = components->GetItemData(n);
- }
-
- // now examine the component info:
- if (component_index >= 0) {
- repair->SetEnabled(true);
-
- if (selected_source) {
- List<Component>& comps = selected_source->GetComponents();
- selected_component = comps[component_index];
-
- if (repair_time) {
- char t[32];
- int s = (int) (selected_component->RepairTime() /
- ship->RepairSpeed());
- FormatTime(t, s);
- repair_time->SetText(t);
- repair_time->Show();
- }
-
- if (selected_component->SpareCount() > 0) {
- if (replace) replace->SetEnabled(true);
-
- if (replace_time) {
- char t[32];
- int s = (int) (selected_component->ReplaceTime() /
- ship->RepairSpeed());
- FormatTime(t, s);
- replace_time->SetText(t);
- replace_time->Show();
- }
- }
- }
- else if (selected_clients.size() > 0) {
- List<Component>& comps = selected_clients[0]->GetComponents();
- selected_component = comps[component_index];
-
- if (repair_time) {
- char t[32];
- int s = (int) (selected_component->RepairTime() /
- ship->RepairSpeed());
- FormatTime(t, s);
- repair_time->SetText(t);
- repair_time->Show();
- }
-
- if (selected_component->SpareCount() > 0) {
- if (replace) replace->SetEnabled(true);
-
- if (replace_time) {
- char t[32];
- int s = (int) (selected_component->ReplaceTime() /
- ship->RepairSpeed());
- FormatTime(t, s);
- replace_time->SetText(t);
- replace_time->Show();
- }
- }
- }
- }
+ selected_component = 0;
+
+ if (repair) repair->SetEnabled(false);
+ if (replace) replace->SetEnabled(false);
+ if (repair_time) repair_time->Hide();
+ if (replace_time) replace_time->Hide();
+
+ // find index of selected component:
+ int component_index = -1;
+
+ if (components) {
+ int n = components->GetSelection();
+ if (n >= 0)
+ component_index = components->GetItemData(n);
+ }
+
+ // now examine the component info:
+ if (component_index >= 0) {
+ repair->SetEnabled(true);
+
+ if (selected_source) {
+ List<Component>& comps = selected_source->GetComponents();
+ selected_component = comps[component_index];
+
+ if (repair_time) {
+ char t[32];
+ int s = (int) (selected_component->RepairTime() /
+ ship->RepairSpeed());
+ FormatTime(t, s);
+ repair_time->SetText(t);
+ repair_time->Show();
+ }
+
+ if (selected_component->SpareCount() > 0) {
+ if (replace) replace->SetEnabled(true);
+
+ if (replace_time) {
+ char t[32];
+ int s = (int) (selected_component->ReplaceTime() /
+ ship->RepairSpeed());
+ FormatTime(t, s);
+ replace_time->SetText(t);
+ replace_time->Show();
+ }
+ }
+ }
+ else if (selected_clients.size() > 0) {
+ List<Component>& comps = selected_clients[0]->GetComponents();
+ selected_component = comps[component_index];
+
+ if (repair_time) {
+ char t[32];
+ int s = (int) (selected_component->RepairTime() /
+ ship->RepairSpeed());
+ FormatTime(t, s);
+ repair_time->SetText(t);
+ repair_time->Show();
+ }
+
+ if (selected_component->SpareCount() > 0) {
+ if (replace) replace->SetEnabled(true);
+
+ if (replace_time) {
+ char t[32];
+ int s = (int) (selected_component->ReplaceTime() /
+ ship->RepairSpeed());
+ FormatTime(t, s);
+ replace_time->SetText(t);
+ replace_time->Show();
+ }
+ }
+ }
+ }
}
// +--------------------------------------------------------------------+
@@ -947,8 +947,8 @@ EngDlg::OnComponent(AWEvent* event)
void
EngDlg::OnAutoRepair(AWEvent* event)
{
- if (ship)
- ship->EnableRepair(auto_repair->GetButtonState() > 0);
+ if (ship)
+ ship->EnableRepair(auto_repair->GetButtonState() > 0);
}
// +--------------------------------------------------------------------+
@@ -956,78 +956,78 @@ EngDlg::OnAutoRepair(AWEvent* event)
void
EngDlg::OnRepair(AWEvent* event)
{
- if (selected_component) {
- selected_component->Repair();
+ if (selected_component) {
+ selected_component->Repair();
- if (ship)
- ship->RepairSystem(selected_component->GetSystem());
- }
+ if (ship)
+ ship->RepairSystem(selected_component->GetSystem());
+ }
}
void
EngDlg::OnReplace(AWEvent* event)
{
- if (selected_component) {
- selected_component->Replace();
+ if (selected_component) {
+ selected_component->Replace();
- if (ship)
- ship->RepairSystem(selected_component->GetSystem());
- }
+ if (ship)
+ ship->RepairSystem(selected_component->GetSystem());
+ }
}
void
EngDlg::OnQueue(AWEvent* event)
{
- selected_repair = 0;
+ selected_repair = 0;
- if (priority_increase) priority_increase->SetEnabled(false);
- if (priority_decrease) priority_decrease->SetEnabled(false);
+ if (priority_increase) priority_increase->SetEnabled(false);
+ if (priority_decrease) priority_decrease->SetEnabled(false);
- if (repair_queue) {
- int n = repair_queue->GetSelection();
+ if (repair_queue) {
+ int n = repair_queue->GetSelection();
- if (n >= 0)
- selected_repair = ship->RepairQueue().at(n);
- }
+ if (n >= 0)
+ selected_repair = ship->RepairQueue().at(n);
+ }
- if (!selected_repair)
- return;
+ if (!selected_repair)
+ return;
- selected_clients.clear();
- selected_clients.append(selected_repair);
+ selected_clients.clear();
+ selected_clients.append(selected_repair);
- if (components) {
- components->ClearItems();
+ if (components) {
+ components->ClearItems();
- if (repair) repair->SetEnabled(false);
- if (replace) replace->SetEnabled(false);
- if (repair_time) repair_time->Hide();
- if (replace_time) replace_time->Hide();
+ if (repair) repair->SetEnabled(false);
+ if (replace) replace->SetEnabled(false);
+ if (repair_time) repair_time->Hide();
+ if (replace_time) replace_time->Hide();
- if (selected_repair->GetComponents().size()) {
- int index = 0;
- ListIter<Component> comp = selected_repair->GetComponents();
- while (++comp)
- components->AddItemWithData(Game::GetText(comp->Abbreviation()), index++);
- }
- }
+ if (selected_repair->GetComponents().size()) {
+ int index = 0;
+ ListIter<Component> comp = selected_repair->GetComponents();
+ while (++comp)
+ components->AddItemWithData(Game::GetText(comp->Abbreviation()), index++);
+ }
+ }
- if (priority_increase) priority_increase->SetEnabled(true);
- if (priority_decrease) priority_decrease->SetEnabled(true);
+ if (priority_increase) priority_increase->SetEnabled(true);
+ if (priority_decrease) priority_decrease->SetEnabled(true);
}
void
EngDlg::OnPriorityIncrease(AWEvent* event)
{
- if (ship && repair_queue)
- ship->IncreaseRepairPriority(repair_queue->GetSelection());
+ if (ship && repair_queue)
+ ship->IncreaseRepairPriority(repair_queue->GetSelection());
}
void
EngDlg::OnPriorityDecrease(AWEvent* event)
{
- if (ship && repair_queue)
- ship->DecreaseRepairPriority(repair_queue->GetSelection());
+ if (ship && repair_queue)
+ ship->DecreaseRepairPriority(repair_queue->GetSelection());
}
// +--------------------------------------------------------------------+
@@ -1035,8 +1035,8 @@ EngDlg::OnPriorityDecrease(AWEvent* event)
void
EngDlg::OnClose(AWEvent* event)
{
- if (manager)
- manager->CloseTopmost();
+ if (manager)
+ manager->CloseTopmost();
}