Tweak widget display for more apparent speed on tab opening/closing, toggle menus based on the current tab, and make globals more obvious
This commit is contained in:
parent
ccb3de679a
commit
b87d73ec86
@ -6,12 +6,12 @@
|
||||
#include "widgets/widget.h"
|
||||
|
||||
#include <wx/app.h>
|
||||
#include <wx/debug.h>
|
||||
|
||||
|
||||
// Some global stuff
|
||||
wxConfigBase *Config;
|
||||
TyroMenu *mbar;
|
||||
MainFrame *main_frame;
|
||||
wxConfigBase *Glob_config;
|
||||
TyroMenu *Glob_menu_bar;
|
||||
MainFrame *Glob_main_frame;
|
||||
|
||||
/**
|
||||
* Class with main method
|
||||
@ -29,15 +29,17 @@ public:
|
||||
this->SetAppName(APP_NAME);
|
||||
this->SetVendorName(APP_VENDOR);
|
||||
|
||||
Config = wxConfigBase::Get();
|
||||
mbar = new TyroMenu();
|
||||
main_frame = new MainFrame(0L, APP_NAME);
|
||||
// Initialize globals
|
||||
Glob_config = wxConfigBase::Get();
|
||||
Glob_menu_bar = new TyroMenu();
|
||||
Glob_main_frame = new MainFrame(0L, APP_NAME);
|
||||
|
||||
SetTopWindow(main_frame);
|
||||
SetTopWindow(Glob_main_frame);
|
||||
|
||||
main_frame->Layout();
|
||||
main_frame->CenterOnScreen();
|
||||
main_frame->Show(true);
|
||||
// Setup Main Window
|
||||
Glob_main_frame->Layout();
|
||||
Glob_main_frame->CenterOnScreen();
|
||||
Glob_main_frame->Show(true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -11,6 +11,16 @@ LangConfig::LangConfig()
|
||||
{
|
||||
this->LoadJson(languages_json);
|
||||
this->lang = "";
|
||||
|
||||
// "cache" reverse map of languages to their keys
|
||||
JsonValue langList = this->GetRoot();
|
||||
JsonValue::iterator it;
|
||||
|
||||
for (it = langList.begin(); it != langList.end(); ++it)
|
||||
{
|
||||
JsonValue langObj = *it;
|
||||
reverseMap[langObj.get("name", JsonValue()).asString()] = it.key().asString();
|
||||
}
|
||||
}
|
||||
|
||||
LangConfig::~LangConfig()
|
||||
@ -99,22 +109,42 @@ void LangConfig::SetLang(string lang)
|
||||
this->lang = lang;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current language key
|
||||
*/
|
||||
string LangConfig::GetLang()
|
||||
{
|
||||
return this->lang;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the name attribute of the currently selected language
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
string LangConfig::GetCurrentLangName()
|
||||
{
|
||||
return this->GetRoot()
|
||||
.get(this->lang, JsonValue())
|
||||
.get("name", JsonValue())
|
||||
.asString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the list of languages available
|
||||
*
|
||||
* @return StringMap
|
||||
*/
|
||||
StringMap LangConfig::GetLangList()
|
||||
{
|
||||
JsonValue langList = this->GetRoot();
|
||||
JsonValue::iterator it;
|
||||
StringMap revList = this->reverseMap;
|
||||
StringMap::iterator it;
|
||||
|
||||
StringMap outputList;
|
||||
|
||||
for (it = langList.begin(); it != langList.end(); ++it)
|
||||
for (it = revList.begin(); it != revList.end(); ++it)
|
||||
{
|
||||
JsonValue langObj = *it;
|
||||
outputList[it.key().asString()] = langObj.get("name", JsonValue()).asString();
|
||||
outputList[it->second] = it->first;
|
||||
}
|
||||
|
||||
return outputList;
|
||||
|
@ -14,8 +14,10 @@ public:
|
||||
JsonValue GetKeywordList(string lang="none");
|
||||
JsonValue GetLexerMap(string lang="none");
|
||||
StringMap GetLangList();
|
||||
string GetCurrentLangName();
|
||||
private:
|
||||
string lang;
|
||||
StringMap reverseMap;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -417,3 +417,14 @@ void EditPane::_ApplyTheme(JsonValue &lexer_map)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the display name of the currently selected
|
||||
* language used for highlighting
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
string EditPane::GetCurrentLang()
|
||||
{
|
||||
return lang_config->GetCurrentLangName();
|
||||
}
|
||||
|
@ -20,6 +20,7 @@ public:
|
||||
bool SaveFile();
|
||||
bool SaveFile(const wxString &filename);
|
||||
void ApplyTheme(string lang, string theme="");
|
||||
string GetCurrentLang();
|
||||
private:
|
||||
StringConstMap lexerMap;
|
||||
StringConstMap::iterator lexerMapIt;
|
||||
@ -28,7 +29,6 @@ private:
|
||||
enum myMargins
|
||||
{
|
||||
MARGIN_FOLD,
|
||||
MARGIN_SYMBOL,
|
||||
MARGIN_LINE_NUMBERS
|
||||
};
|
||||
bool FileReadable();
|
||||
|
@ -4,7 +4,7 @@
|
||||
#include "widget.h"
|
||||
|
||||
// Nasty globals
|
||||
extern TyroMenu *mbar;
|
||||
extern TyroMenu *Glob_menu_bar;
|
||||
static TabContainer *notebook;
|
||||
|
||||
/**
|
||||
@ -13,24 +13,18 @@ static TabContainer *notebook;
|
||||
MainFrame::MainFrame(wxFrame *frame, const wxString &title)
|
||||
: wxFrame(frame, -1, title)
|
||||
{
|
||||
#include "../../resources/xpm/tyro.xpm"
|
||||
|
||||
findReplaceData = new wxFindReplaceData(wxFR_DOWN);
|
||||
|
||||
// Set the frame icon
|
||||
#include "../../resources/xpm/tyro.xpm"
|
||||
wxIcon app_icon(tyro_icon);
|
||||
this->SetIcon(app_icon);
|
||||
|
||||
// Apply the menu bar to the current frame
|
||||
#ifdef __WXMAC__
|
||||
wxMenuBar::MacSetCommonMenuBar(mbar);
|
||||
#endif // __WXMAC__
|
||||
SetMenuBar(mbar);
|
||||
this->SetMenuBar(Glob_menu_bar);
|
||||
|
||||
this->SetupStatusBar();
|
||||
|
||||
// Create the tab container
|
||||
notebook = new TabContainer(this);
|
||||
|
||||
this->DoLayout();
|
||||
this->BindEvents();
|
||||
}
|
||||
@ -53,6 +47,9 @@ MainFrame::~MainFrame()
|
||||
*/
|
||||
void MainFrame::DoLayout()
|
||||
{
|
||||
// Create the tab container
|
||||
notebook = new TabContainer(this);
|
||||
|
||||
this->manager = new wxAuiManager(this);
|
||||
this->SetupToolbar();
|
||||
|
||||
@ -81,9 +78,7 @@ void MainFrame::DoLayout()
|
||||
*/
|
||||
void MainFrame::SetupStatusBar()
|
||||
{
|
||||
CreateStatusBar(2);
|
||||
SetStatusText(_(""), 0);
|
||||
SetStatusText(_(""), 1);
|
||||
CreateStatusBar(3);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -94,7 +89,7 @@ void MainFrame::SetupStatusBar()
|
||||
void MainFrame::SetupToolbar()
|
||||
{
|
||||
// Icon files
|
||||
#ifdef __WXMAC__
|
||||
#ifndef __WXGTK__
|
||||
#include "../../resources/xpm/32/new.xpm"
|
||||
#include "../../resources/xpm/32/open.xpm"
|
||||
#include "../../resources/xpm/32/save.xpm"
|
||||
@ -108,23 +103,7 @@ void MainFrame::SetupToolbar()
|
||||
wxBitmap copy_icon(copy);
|
||||
wxBitmap cut_icon(cut);
|
||||
wxBitmap paste_icon(paste);
|
||||
#endif
|
||||
#ifdef __WXMSW__
|
||||
#include "../../resources/xpm/24/new.xpm"
|
||||
#include "../../resources/xpm/24/open.xpm"
|
||||
#include "../../resources/xpm/24/save.xpm"
|
||||
#include "../../resources/xpm/24/cut.xpm"
|
||||
#include "../../resources/xpm/24/copy.xpm"
|
||||
#include "../../resources/xpm/24/paste.xpm"
|
||||
|
||||
wxBitmap new_file_icon(new_file);
|
||||
wxBitmap open_file_icon(open);
|
||||
wxBitmap save_file_icon(save);
|
||||
wxBitmap copy_icon(copy);
|
||||
wxBitmap cut_icon(cut);
|
||||
wxBitmap paste_icon(paste);
|
||||
#endif
|
||||
#ifdef __WXGTK__
|
||||
#else
|
||||
wxBitmap new_file_icon = wxArtProvider::GetBitmap(wxART_NEW, wxART_TOOLBAR);
|
||||
wxBitmap open_file_icon = wxArtProvider::GetBitmap(wxART_FILE_OPEN, wxART_TOOLBAR);
|
||||
wxBitmap save_file_icon = wxArtProvider::GetBitmap(wxART_FILE_SAVE, wxART_TOOLBAR);
|
||||
@ -139,7 +118,6 @@ void MainFrame::SetupToolbar()
|
||||
toolBar->AddTool(wxID_OPEN, "Open", open_file_icon, "Open file");
|
||||
toolBar->AddTool(wxID_SAVE, "Save", save_file_icon, "Save file");
|
||||
|
||||
|
||||
toolBar->AddSeparator();
|
||||
|
||||
toolBar->AddTool(wxID_COPY, "Copy", copy_icon, "Copy");
|
||||
@ -225,10 +203,12 @@ void MainFrame::OnOpen(wxCommandEvent &WXUNUSED(event))
|
||||
listcount = filelist.GetCount();
|
||||
|
||||
// Open a new tab for each file
|
||||
notebook->Hide();
|
||||
for (int i = 0; i < listcount; i++)
|
||||
{
|
||||
notebook->AddTab(filelist[i]);
|
||||
}
|
||||
notebook->Show();
|
||||
|
||||
this->EnableEditControls(true);
|
||||
}
|
||||
@ -242,6 +222,7 @@ void MainFrame::OnCloseTab(wxCommandEvent &WXUNUSED(event))
|
||||
{
|
||||
int current_tab = notebook->GetSelection();
|
||||
|
||||
notebook->Hide();
|
||||
notebook->DeletePage(current_tab);
|
||||
|
||||
if (notebook->GetPageCount() == 0)
|
||||
@ -249,6 +230,7 @@ void MainFrame::OnCloseTab(wxCommandEvent &WXUNUSED(event))
|
||||
this->EnableEditControls(false);
|
||||
}
|
||||
|
||||
notebook->Show();
|
||||
this->manager->Update();
|
||||
}
|
||||
|
||||
@ -259,8 +241,10 @@ void MainFrame::OnCloseTab(wxCommandEvent &WXUNUSED(event))
|
||||
*/
|
||||
void MainFrame::OnCloseAll(wxCommandEvent &WXUNUSED(event))
|
||||
{
|
||||
notebook->Hide();
|
||||
notebook->DeleteAllPages();
|
||||
this->EnableEditControls(false);
|
||||
notebook->Show();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -598,7 +582,7 @@ void MainFrame::OnToggleLineEndings(wxCommandEvent &event)
|
||||
void MainFrame::EnableEditControls(bool enable)
|
||||
{
|
||||
// Update menu items
|
||||
mbar->EnableEditControls(enable);
|
||||
Glob_menu_bar->EnableEditControls(enable);
|
||||
|
||||
// Toggle toolbar items
|
||||
this->toolBar->EnableTool(wxID_SAVE, enable);
|
||||
|
@ -4,9 +4,19 @@
|
||||
|
||||
#include "widget.h"
|
||||
|
||||
extern MainFrame *main_frame;
|
||||
extern MainFrame *Glob_main_frame;
|
||||
extern TyroMenu *Glob_menu_bar;
|
||||
static unsigned long untitled_document_count = 0;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param wxWindow* parent
|
||||
* @param wxWindowID id
|
||||
* @param const wxPoint& pos
|
||||
* @param const wxSize& size
|
||||
* @param long style
|
||||
*/
|
||||
TabContainer::TabContainer(
|
||||
wxWindow* parent,
|
||||
wxWindowID id,
|
||||
@ -21,6 +31,9 @@ TabContainer::TabContainer(
|
||||
Bind(wxEVT_AUINOTEBOOK_PAGE_CHANGED, &TabContainer::OnTabSwitch, this, wxID_ANY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Destructor
|
||||
*/
|
||||
TabContainer::~TabContainer()
|
||||
{
|
||||
wxLogDebug("TabContainer destructor called");
|
||||
@ -63,6 +76,9 @@ void TabContainer::AddTab(wxString filePath)
|
||||
|
||||
this->SetPageToolTip(this->GetPageIndex(this->GetCurrentPage()), fileName.GetFullPath());
|
||||
|
||||
// Select the appropriate language in the language menu
|
||||
Glob_menu_bar->SetCurrentLanguage(editor->GetCurrentLang());
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@ -139,7 +155,7 @@ void TabContainer::OnClosed(wxAuiNotebookEvent &WXUNUSED(event))
|
||||
{
|
||||
if (this->GetPageCount() == 0)
|
||||
{
|
||||
main_frame->EnableEditControls(false);
|
||||
Glob_main_frame->EnableEditControls(false);
|
||||
}
|
||||
}
|
||||
|
||||
@ -166,7 +182,7 @@ void TabContainer::OnTabContextMenu(wxAuiNotebookEvent &WXUNUSED(event))
|
||||
void TabContainer::OnCloseAll(wxCommandEvent &WXUNUSED(event))
|
||||
{
|
||||
this->DeleteAllPages();
|
||||
main_frame->EnableEditControls(false);
|
||||
Glob_main_frame->EnableEditControls(false);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -175,9 +191,15 @@ void TabContainer::OnCloseAll(wxCommandEvent &WXUNUSED(event))
|
||||
* @param wxAuiNotebookEvent& event
|
||||
* @return void
|
||||
*/
|
||||
void TabContainer::OnTabSwitch(wxAuiNotebookEvent &WXUNUSED(event))
|
||||
void TabContainer::OnTabSwitch(wxAuiNotebookEvent &event)
|
||||
{
|
||||
//EditPane *editor = this->GetEditor(event.GetSelection());
|
||||
EditPane *editor = this->GetEditor(event.GetSelection());
|
||||
|
||||
// @TODO: Update menu item checkboxes based on the state of the current editor
|
||||
// Update view menu options
|
||||
Glob_menu_bar->SetIdChecked(myID_VIEW_WHITESPACE, (editor->GetViewWhiteSpace() == wxSTC_WS_VISIBLEALWAYS));
|
||||
Glob_menu_bar->SetIdChecked(myID_VIEW_LINE_ENDINGS, editor->GetViewEOL());
|
||||
Glob_menu_bar->SetIdChecked(myID_LINE_WRAP, (editor->GetWrapMode() == wxSTC_WRAP_WORD));
|
||||
|
||||
// Update language menu selection
|
||||
Glob_menu_bar->SetCurrentLanguage(editor->GetCurrentLang());
|
||||
}
|
@ -27,6 +27,7 @@ TyroMenu::TyroMenu()
|
||||
TyroMenu::~TyroMenu()
|
||||
{
|
||||
wxLogDebug("TyroMenu Destructor Called.");
|
||||
delete lang_config;
|
||||
}
|
||||
|
||||
void TyroMenu::SetupMainMenus()
|
||||
@ -71,9 +72,11 @@ void TyroMenu::SetupLangMenu()
|
||||
|
||||
StringMap::iterator last = langs.end();
|
||||
|
||||
langMenu->Append(wxID_ANY, "Plain Text", "Don't highlight file", wxITEM_CHECK);
|
||||
|
||||
for (it = langs.begin(); it != last; ++it)
|
||||
{
|
||||
langMenu->Append(wxID_ANY, it->second, "Hightlight file as " + it->second, wxITEM_CHECK);
|
||||
langMenu->Append(wxID_ANY, it->second, "Highlight file as " + it->second, wxITEM_CHECK);
|
||||
}
|
||||
}
|
||||
|
||||
@ -90,6 +93,18 @@ void TyroMenu::EnableEditControls(bool enable)
|
||||
this->EnableEntireMenu(myLANG_MENU, this->langMenu, enable);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check the menu item associated with the specified id
|
||||
*
|
||||
* @param int id
|
||||
* @param bool checked
|
||||
* @return void
|
||||
*/
|
||||
void TyroMenu::SetIdChecked(int id, bool checked)
|
||||
{
|
||||
this->FindItem(id)->Check(checked);
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable/disable all the items in the menu, for environments
|
||||
* that don't properly support disabling the menu by the parent label (like Ubuntu's Unity)
|
||||
@ -112,5 +127,30 @@ void TyroMenu::EnableEntireMenu(size_t menuId, wxMenu *menu, bool enable)
|
||||
{
|
||||
wxMenuItem *current = *iter;
|
||||
current->Enable(enable);
|
||||
|
||||
// Uncheck all the items
|
||||
if (current->IsCheckable())
|
||||
{
|
||||
current->Check(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Change the language used for highlighting
|
||||
*
|
||||
* @param string lang
|
||||
* @return void
|
||||
*/
|
||||
void TyroMenu::SetCurrentLanguage(string lang)
|
||||
{
|
||||
if (lang == "")
|
||||
{
|
||||
lang = "Plain Text";
|
||||
}
|
||||
|
||||
// Clear checks in the current menu
|
||||
this->EnableEntireMenu(myLANG_MENU, langMenu, true);
|
||||
|
||||
this->Check(this->FindMenuItem("&Language", lang), true);
|
||||
}
|
@ -11,6 +11,8 @@ public:
|
||||
TyroMenu();
|
||||
~TyroMenu();
|
||||
void EnableEditControls(bool enable);
|
||||
void SetIdChecked(int id, bool checked);
|
||||
void SetCurrentLanguage(string lang);
|
||||
private:
|
||||
wxMenu *fileMenu;
|
||||
wxMenu *editMenu;
|
||||
|
@ -1,10 +1,6 @@
|
||||
/*
|
||||
* File: widget.h
|
||||
* Author: twarren
|
||||
*
|
||||
* Created on May 7, 2015, 2:35 PM
|
||||
/**
|
||||
* Common header for widgets
|
||||
*/
|
||||
|
||||
#ifndef TYRO_WIDGET_H
|
||||
#define TYRO_WIDGET_H
|
||||
|
||||
@ -12,9 +8,6 @@
|
||||
#include "../wx_common.h"
|
||||
|
||||
// Base widgets
|
||||
#include <wx/cmdline.h>
|
||||
#include <wx/config.h>
|
||||
#include <wx/filename.h>
|
||||
#include <wx/aboutdlg.h>
|
||||
#include <wx/fdrepdlg.h>
|
||||
#include <wx/aui/aui.h>
|
||||
|
@ -14,10 +14,15 @@
|
||||
#include <wx/wx.h>
|
||||
#endif
|
||||
|
||||
// Common helpers/functionality
|
||||
#include <wx/debug.h>
|
||||
#include <wx/cmdline.h>
|
||||
#include <wx/config.h>
|
||||
#include <wx/stdpaths.h>
|
||||
#include <wx/filename.h>
|
||||
#include <wx/artprov.h>
|
||||
|
||||
// Tyro-specific variables
|
||||
#include "definitions.h"
|
||||
|
||||
#endif /* WX_COMMON_H */
|
||||
|
Loading…
Reference in New Issue
Block a user