Skip to content

Commit

Permalink
#5662: Move status bar definition to XRC file
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Jul 11, 2021
1 parent 6cbd6cb commit de4ed50
Show file tree
Hide file tree
Showing 6 changed files with 281 additions and 39 deletions.
211 changes: 211 additions & 0 deletions install/ui/vcsstatusbar.fbp
@@ -0,0 +1,211 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<wxFormBuilder_Project>
<FileVersion major="1" minor="15" />
<object class="Project" expanded="1">
<property name="class_decoration"></property>
<property name="code_generation">XRC</property>
<property name="disconnect_events">1</property>
<property name="disconnect_mode">source_name</property>
<property name="disconnect_php_events">0</property>
<property name="disconnect_python_events">0</property>
<property name="embedded_files_path">res</property>
<property name="encoding">UTF-8</property>
<property name="event_generation">connect</property>
<property name="file">vcsstatusbar</property>
<property name="first_id">1000</property>
<property name="help_provider">none</property>
<property name="indent_with_spaces"></property>
<property name="internationalize">0</property>
<property name="name">VcsStatusBar</property>
<property name="namespace"></property>
<property name="path">.</property>
<property name="precompiled_header"></property>
<property name="relative_path">1</property>
<property name="skip_lua_events">1</property>
<property name="skip_php_events">1</property>
<property name="skip_python_events">1</property>
<property name="ui_table">UI</property>
<property name="use_enum">0</property>
<property name="use_microsoft_bom">0</property>
<object class="Panel" expanded="1">
<property name="aui_managed">0</property>
<property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
<property name="bg"></property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property>
<property name="event_handler">impl_virtual</property>
<property name="fg"></property>
<property name="font"></property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="maximum_size"></property>
<property name="minimum_size">-1,-1</property>
<property name="name">VcsStatusBar</property>
<property name="pos"></property>
<property name="size">-1,-1</property>
<property name="subclass"></property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style">wxTAB_TRAVERSAL|wxWANTS_CHARS</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bSizer23</property>
<property name="orient">wxHORIZONTAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">1</property>
<property name="flag">wxALL</property>
<property name="proportion">1</property>
<object class="wxFlexGridSizer" expanded="1">
<property name="cols">2</property>
<property name="flexible_direction">wxBOTH</property>
<property name="growablecols">0,1</property>
<property name="growablerows"></property>
<property name="hgap">6</property>
<property name="minimum_size"></property>
<property name="name">fgSizer3</property>
<property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
<property name="permission">none</property>
<property name="rows">0</property>
<property name="vgap">0</property>
<object class="sizeritem" expanded="1">
<property name="border">0</property>
<property name="flag">wxALIGN_CENTER_VERTICAL</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Map</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">MapStatusLabel</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">0</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bSizer20</property>
<property name="orient">wxHORIZONTAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">0</property>
<property name="flag">wxALIGN_CENTER_VERTICAL</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">RemoteStatus</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">RemoteStatusLabel</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</wxFormBuilder_Project>
48 changes: 48 additions & 0 deletions install/ui/vcsstatusbar.xrc
@@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<resource xmlns="http://www.wxwindows.org/wxxrc" version="2.3.0.1">
<object class="wxPanel" name="VcsStatusBar">
<style>wxTAB_TRAVERSAL|wxWANTS_CHARS</style>
<object class="wxBoxSizer">
<orient>wxHORIZONTAL</orient>
<object class="sizeritem">
<option>1</option>
<flag>wxALL</flag>
<border>1</border>
<object class="wxFlexGridSizer">
<rows>0</rows>
<cols>2</cols>
<vgap>0</vgap>
<hgap>6</hgap>
<growablecols>0,1</growablecols>
<growablerows></growablerows>
<object class="sizeritem">
<option>0</option>
<flag>wxALIGN_CENTER_VERTICAL</flag>
<border>0</border>
<object class="wxStaticText" name="MapStatusLabel">
<label>Map</label>
<wrap>-1</wrap>
</object>
</object>
<object class="sizeritem">
<option>1</option>
<flag>wxEXPAND</flag>
<border>0</border>
<object class="wxBoxSizer">
<orient>wxHORIZONTAL</orient>
<object class="sizeritem">
<option>0</option>
<flag>wxALIGN_CENTER_VERTICAL</flag>
<border>0</border>
<object class="wxStaticText" name="RemoteStatusLabel">
<label>RemoteStatus</label>
<wrap>-1</wrap>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</resource>
25 changes: 3 additions & 22 deletions plugins/vcs/GitModule.cpp
Expand Up @@ -52,24 +52,10 @@ void GitModule::initialiseModule(const IApplicationContext& ctx)
_repository.reset();
}

#if 0
git_commit* commit;
git_oid oid;
git_reference_name_to_id(&oid, repository, "refs/heads/master");

git_commit_lookup(&commit, repository, &oid);

const auto* author = git_commit_author(commit);
auto time = git_commit_time(commit);
rMessage() << "Last commit author: " << author->name << " at " << ctime(&time) << std::endl;

git_commit_free(commit);
#endif

GlobalMainFrame().signal_MainFrameConstructed().connect([&]()
{
_statusBarWidget = new ui::VcsStatus(GlobalStatusBarManager().getStatusBar());
GlobalStatusBarManager().addElement(ui::VcsStatus::Name, _statusBarWidget,
_statusBarWidget = std::make_unique<ui::VcsStatus>(GlobalStatusBarManager().getStatusBar());
GlobalStatusBarManager().addElement(ui::VcsStatus::Name, _statusBarWidget->getWidget(),
::ui::statusbar::StandardPosition::MapEditStopwatch + 10);

_statusBarWidget->setRepository(_repository);
Expand All @@ -80,12 +66,7 @@ void GitModule::shutdownModule()
{
rMessage() << getName() << "::shutdownModule called." << std::endl;

if (_statusBarWidget)
{
_statusBarWidget->Destroy();
_statusBarWidget = nullptr;
}

_statusBarWidget.reset();
_repository.reset();

git_libgit2_shutdown();
Expand Down
2 changes: 1 addition & 1 deletion plugins/vcs/GitModule.h
Expand Up @@ -18,7 +18,7 @@ class GitModule :
private:
std::shared_ptr<git::Repository> _repository;

ui::VcsStatus* _statusBarWidget = nullptr;
std::unique_ptr<ui::VcsStatus> _statusBarWidget;

public:
// RegisterableModule implementation
Expand Down
26 changes: 11 additions & 15 deletions plugins/vcs/ui/VcsStatus.cpp
Expand Up @@ -22,26 +22,15 @@ namespace ui
{

VcsStatus::VcsStatus(wxWindow* parent) :
wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxWANTS_CHARS, "VcsStatusBarPanel"),
_panel(loadNamedPanel(parent, "VcsStatusBar")),
_timer(this),
_fetchInProgress(false)
{
SetSizer(new wxBoxSizer(wxVERTICAL));

auto table = new wxFlexGridSizer(2);
table->AddGrowableCol(0);
table->AddGrowableCol(1);
table->SetHGap(6);
GetSizer()->Add(table, 0, wxALL | wxEXPAND, 1);

_mapStatus = new wxStaticText(this, wxID_ANY, "");
table->Add(_mapStatus, 0, wxLEFT, 6);

_remoteStatus = new wxStaticText(this, wxID_ANY, _("Not under Version Control"));
table->Add(_remoteStatus, 0, wxALIGN_RIGHT | wxRIGHT, 6);
_mapStatus = findNamedObject<wxStaticText>(_panel, "MapStatusLabel");
_remoteStatus = findNamedObject<wxStaticText>(_panel, "RemoteStatusLabel");

Bind(wxEVT_TIMER, &VcsStatus::onIntervalReached, this);
Bind(wxEVT_IDLE, &VcsStatus::onIdle, this);
_panel->Bind(wxEVT_IDLE, &VcsStatus::onIdle, this);

GlobalRegistry().signalForKey(RKEY_AUTO_FETCH_ENABLED).connect(
sigc::mem_fun(this, &VcsStatus::restartTimer)
Expand Down Expand Up @@ -70,6 +59,13 @@ VcsStatus::~VcsStatus()
{
_mapFileTask.get(); // Wait for the thread to complete
}

_panel->Destroy();
}

wxWindow* VcsStatus::getWidget()
{
return _panel;
}

void VcsStatus::setRepository(const std::shared_ptr<git::Repository>& repository)
Expand Down
8 changes: 7 additions & 1 deletion plugins/vcs/ui/VcsStatus.h
Expand Up @@ -9,6 +9,7 @@

#include "imap.h"
#include "../Repository.h"
#include "wxutil/XmlResourceBasedWidget.h"

namespace vcs
{
Expand All @@ -17,10 +18,13 @@ namespace ui
{

class VcsStatus final :
public wxPanel,
public wxEvtHandler,
public wxutil::XmlResourceBasedWidget,
public sigc::trackable
{
private:
wxPanel* _panel;

wxTimer _timer;
std::mutex _taskLock;
bool _fetchInProgress;
Expand All @@ -45,6 +49,8 @@ class VcsStatus final :
VcsStatus(wxWindow* parent);
~VcsStatus();

wxWindow* getWidget();

void setRepository(const std::shared_ptr<git::Repository>& repository);

private:
Expand Down

0 comments on commit de4ed50

Please sign in to comment.