Skip to content

Commit 70ecdd1

Browse files
author
Eran Ifrah
committed
Tail plugin: the tail panel can now detach from the output notebook into a separatea frame
1 parent 3174cec commit 70ecdd1

17 files changed

+1058
-565
lines changed

Runtime/codelite-bitmaps.zip

1.51 KB
Binary file not shown.

Tail/Tail.project

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
<File Name="tail.cpp"/>
55
<File Name="TailPanel.h"/>
66
<File Name="TailPanel.cpp"/>
7+
<File Name="TailFrame.h"/>
8+
<File Name="TailFrame.cpp"/>
79
</VirtualDirectory>
810
<VirtualDirectory Name="include">
911
<File Name="tail.h"/>

Tail/TailFrame.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#include "TailFrame.h"
2+
#include "tail.h"
3+
4+
TailFrame::TailFrame(wxWindow* parent, Tail* plugin)
5+
: TailFrameBase(parent)
6+
, m_plugin(plugin)
7+
{
8+
}
9+
10+
TailFrame::~TailFrame() {}
11+
12+
void TailFrame::OnClose(wxCloseEvent& event)
13+
{
14+
m_plugin->CallAfter(&Tail::DockTailWindow);
15+
m_plugin->m_view = NULL;
16+
event.Skip();
17+
}

Tail/TailFrame.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#ifndef TAILFRAME_H
2+
#define TAILFRAME_H
3+
#include "TailUI.h"
4+
5+
class Tail;
6+
class TailFrame : public TailFrameBase
7+
{
8+
Tail* m_plugin;
9+
10+
public:
11+
TailFrame(wxWindow* parent, Tail* plugin);
12+
virtual ~TailFrame();
13+
protected:
14+
virtual void OnClose(wxCloseEvent& event);
15+
};
16+
#endif // TAILFRAME_H

Tail/TailPanel.cpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,20 @@
77
#include "lexer_configuration.h"
88
#include "ColoursAndFontsManager.h"
99
#include "cl_config.h"
10+
#include "tail.h"
1011

11-
TailPanel::TailPanel(wxWindow* parent)
12+
TailPanel::TailPanel(wxWindow* parent, Tail* plugin)
1213
: TailPanelBase(parent)
1314
, m_lastPos(0)
15+
, m_plugin(plugin)
16+
, m_isDetached(false)
1417
{
1518
m_fileWatcher.reset(new clFileSystemWatcher());
1619
m_fileWatcher->SetOwner(this);
1720
Bind(wxEVT_FILE_MODIFIED, &TailPanel::OnFileModified, this);
21+
22+
wxCommandEvent dummy;
23+
OnThemeChanged(dummy);
1824
EventNotifier::Get()->Bind(wxEVT_CL_THEME_CHANGED, &TailPanel::OnThemeChanged, this);
1925
}
2026

@@ -78,6 +84,7 @@ void TailPanel::OnThemeChanged(wxCommandEvent& event)
7884
lexer->Apply(m_stc);
7985
}
8086
}
87+
8188
void TailPanel::OnClear(wxCommandEvent& event)
8289
{
8390
m_stc->SetReadOnly(false);
@@ -149,3 +156,12 @@ void TailPanel::OnOpenRecentItem(wxCommandEvent& event)
149156
DoOpen(filepath);
150157
m_recentItemsMap.clear();
151158
}
159+
160+
void TailPanel::OnDetachWindow(wxCommandEvent& event)
161+
{
162+
wxUnusedVar(event);
163+
m_plugin->CallAfter(&Tail::DetachTailWindow);
164+
m_isDetached = true;
165+
}
166+
167+
void TailPanel::OnDetachWindowUI(wxUpdateUIEvent& event) { event.Enable(!m_isDetached); }

Tail/TailPanel.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,20 @@
99
#include "clEditorEditEventsHandler.h"
1010
#include <map>
1111

12+
class Tail;
1213
class TailPanel : public TailPanelBase
1314
{
1415
clFileSystemWatcher::Ptr_t m_fileWatcher;
1516
wxFileName m_file;
1617
size_t m_lastPos;
1718
clEditEventsHandler::Ptr_t m_editEvents;
1819
std::map<int, wxString> m_recentItemsMap;
20+
Tail* m_plugin;
21+
bool m_isDetached;
1922

2023
protected:
24+
virtual void OnDetachWindow(wxCommandEvent& event);
25+
virtual void OnDetachWindowUI(wxUpdateUIEvent& event);
2126
virtual void OnOpen(wxAuiToolBarEvent& event);
2227
virtual void OnClear(wxCommandEvent& event);
2328
virtual void OnClearUI(wxUpdateUIEvent& event);
@@ -32,9 +37,12 @@ class TailPanel : public TailPanelBase
3237
void DoPrepareRecentItemsMenu(wxMenu& menu);
3338

3439
public:
35-
TailPanel(wxWindow* parent);
40+
TailPanel(wxWindow* parent, Tail* plugin);
3641
virtual ~TailPanel();
3742

43+
void SetIsDetached(bool isDetached) { this->m_isDetached = isDetached; }
44+
bool IsDetached() const { return m_isDetached; }
45+
3846
protected:
3947
virtual void OnPause(wxCommandEvent& event);
4048
virtual void OnPauseUI(wxUpdateUIEvent& event);

Tail/TailUI.cpp

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ TailPanelBase::TailPanelBase(wxWindow* parent, wxWindowID id, const wxPoint& pos
4848
m_auibar->AddSeparator();
4949

5050
m_auibar->AddTool(ID_TAIL_CLEAR, _("Clear"), wxXmlResource::Get()->LoadBitmap(wxT("16-clear")), wxNullBitmap, wxITEM_NORMAL, _("Clear"), wxT(""), NULL);
51+
52+
m_auibar->AddStretchSpacer(1);
53+
54+
m_auibar->AddTool(ID_TAIL_DETACH, _("Open in a separate window"), wxXmlResource::Get()->LoadBitmap(wxT("16-windows")), wxNullBitmap, wxITEM_NORMAL, _("Open in a separate window"), _("Open in a separate window"), NULL);
5155
m_auibar->Realize();
5256

5357
m_stc = new wxStyledTextCtrl(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
@@ -67,9 +71,8 @@ TailPanelBase::TailPanelBase(wxWindow* parent, wxWindowID id, const wxPoint& pos
6771
m_stc->SetMarginSensitive(2, true);
6872

6973
// Configure the line numbers margin
70-
int m_stc_PixelWidth = 4 + 5 *m_stc->TextWidth(wxSTC_STYLE_LINENUMBER, wxT("9"));
7174
m_stc->SetMarginType(0, wxSTC_MARGIN_NUMBER);
72-
m_stc->SetMarginWidth(0,m_stc_PixelWidth);
75+
m_stc->SetMarginWidth(0,0);
7376

7477
// Configure the line symbol margin
7578
m_stc->SetMarginType(3, wxSTC_MARGIN_FORE);
@@ -104,6 +107,8 @@ TailPanelBase::TailPanelBase(wxWindow* parent, wxWindowID id, const wxPoint& pos
104107
this->Connect(ID_TAIL_PLAY, wxEVT_UPDATE_UI, wxUpdateUIEventHandler(TailPanelBase::OnPlayUI), NULL, this);
105108
this->Connect(ID_TAIL_CLEAR, wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler(TailPanelBase::OnClear), NULL, this);
106109
this->Connect(ID_TAIL_CLEAR, wxEVT_UPDATE_UI, wxUpdateUIEventHandler(TailPanelBase::OnClearUI), NULL, this);
110+
this->Connect(ID_TAIL_DETACH, wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler(TailPanelBase::OnDetachWindow), NULL, this);
111+
this->Connect(ID_TAIL_DETACH, wxEVT_UPDATE_UI, wxUpdateUIEventHandler(TailPanelBase::OnDetachWindowUI), NULL, this);
107112

108113
this->Connect(wxID_ANY, wxEVT_COMMAND_AUITOOLBAR_TOOL_DROPDOWN, wxAuiToolBarEventHandler(TailPanelBase::ShowAuiToolMenu), NULL, this);
109114
}
@@ -119,6 +124,8 @@ TailPanelBase::~TailPanelBase()
119124
this->Disconnect(ID_TAIL_PLAY, wxEVT_UPDATE_UI, wxUpdateUIEventHandler(TailPanelBase::OnPlayUI), NULL, this);
120125
this->Disconnect(ID_TAIL_CLEAR, wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler(TailPanelBase::OnClear), NULL, this);
121126
this->Disconnect(ID_TAIL_CLEAR, wxEVT_UPDATE_UI, wxUpdateUIEventHandler(TailPanelBase::OnClearUI), NULL, this);
127+
this->Disconnect(ID_TAIL_DETACH, wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler(TailPanelBase::OnDetachWindow), NULL, this);
128+
this->Disconnect(ID_TAIL_DETACH, wxEVT_UPDATE_UI, wxUpdateUIEventHandler(TailPanelBase::OnDetachWindowUI), NULL, this);
122129

123130
std::map<int, wxMenu*>::iterator menuIter = m_dropdownMenus.begin();
124131
for( ; menuIter != m_dropdownMenus.end(); ++menuIter ) {
@@ -148,4 +155,44 @@ void TailPanelBase::ShowAuiToolMenu(wxAuiToolBarEvent& event)
148155
}
149156
}
150157
}
151-
}
158+
}
159+
TailFrameBase::TailFrameBase(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style)
160+
: wxFrame(parent, id, title, pos, size, style)
161+
{
162+
if ( !bBitmapLoaded ) {
163+
// We need to initialise the default bitmap handler
164+
wxXmlResource::Get()->AddHandler(new wxBitmapXmlHandler);
165+
wxCB60EInitBitmapResources();
166+
bBitmapLoaded = true;
167+
}
168+
169+
wxBoxSizer* boxSizer37 = new wxBoxSizer(wxVERTICAL);
170+
this->SetSizer(boxSizer37);
171+
172+
SetName(wxT("TailFrameBase"));
173+
SetSize(500,300);
174+
if (GetSizer()) {
175+
GetSizer()->Fit(this);
176+
}
177+
if(GetParent()) {
178+
CentreOnParent(wxBOTH);
179+
} else {
180+
CentreOnScreen(wxBOTH);
181+
}
182+
#if wxVERSION_NUMBER >= 2900
183+
if(!wxPersistenceManager::Get().Find(this)) {
184+
wxPersistenceManager::Get().RegisterAndRestore(this);
185+
} else {
186+
wxPersistenceManager::Get().Restore(this);
187+
}
188+
#endif
189+
// Connect events
190+
this->Connect(wxEVT_CLOSE_WINDOW, wxCloseEventHandler(TailFrameBase::OnClose), NULL, this);
191+
192+
}
193+
194+
TailFrameBase::~TailFrameBase()
195+
{
196+
this->Disconnect(wxEVT_CLOSE_WINDOW, wxCloseEventHandler(TailFrameBase::OnClose), NULL, this);
197+
198+
}

Tail/TailUI.h

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
#include <wx/menu.h>
2020
#include <wx/toolbar.h>
2121
#include <wx/stc/stc.h>
22+
#include <wx/frame.h>
23+
#include <wx/iconbndl.h>
2224
#if wxVERSION_NUMBER >= 2900
2325
#include <wx/persist.h>
2426
#include <wx/persist/toplevel.h>
@@ -42,9 +44,10 @@ class TailPanelBase : public wxPanel
4244
enum {
4345
ID_TAIL_CLEAR = 10001,
4446
ID_TAIL_CLOSE = 10002,
45-
ID_TAIL_OPEN = 10003,
46-
ID_TAIL_PAUSE = 10004,
47-
ID_TAIL_PLAY = 10005,
47+
ID_TAIL_DETACH = 10003,
48+
ID_TAIL_OPEN = 10004,
49+
ID_TAIL_PAUSE = 10005,
50+
ID_TAIL_PLAY = 10006,
4851
};
4952
protected:
5053
wxAuiToolBar* m_auibar;
@@ -61,6 +64,8 @@ class TailPanelBase : public wxPanel
6164
virtual void OnPlayUI(wxUpdateUIEvent& event) { event.Skip(); }
6265
virtual void OnClear(wxCommandEvent& event) { event.Skip(); }
6366
virtual void OnClearUI(wxUpdateUIEvent& event) { event.Skip(); }
67+
virtual void OnDetachWindow(wxCommandEvent& event) { event.Skip(); }
68+
virtual void OnDetachWindowUI(wxUpdateUIEvent& event) { event.Skip(); }
6469

6570
public:
6671

@@ -71,4 +76,17 @@ class TailPanelBase : public wxPanel
7176
virtual ~TailPanelBase();
7277
};
7378

79+
80+
class TailFrameBase : public wxFrame
81+
{
82+
protected:
83+
84+
protected:
85+
virtual void OnClose(wxCloseEvent& event) { event.Skip(); }
86+
87+
public:
88+
TailFrameBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxT(""), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(500,300), long style = wxDEFAULT_FRAME_STYLE|wxFRAME_FLOAT_ON_PARENT);
89+
virtual ~TailFrameBase();
90+
};
91+
7492
#endif

0 commit comments

Comments
 (0)