Skip to content

Commit

Permalink
tab width; view whitespaces, line numbers, end of line
Browse files Browse the repository at this point in the history
  • Loading branch information
lumixbot committed May 29, 2010
1 parent b851002 commit 48f5e58
Show file tree
Hide file tree
Showing 8 changed files with 226 additions and 20 deletions.
Binary file modified data/feditor.sql
Binary file not shown.
69 changes: 60 additions & 9 deletions src/dbconnector.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ bool DbConnector::query(wxString sql)
int rows, cols;
char** result;
int rc = sqlite3_get_table(db, (const char*)sql.ToAscii(), &result, &rows, &cols, NULL);

head.clear();
data.clear();
if ( rc == SQLITE_OK ) {
Expand All @@ -25,10 +24,13 @@ bool DbConnector::query(wxString sql)
}

wxString DbConnector::getString(int row, wxString col) {
for(int i = head.size()-1; i >= 0; --i)
if(head[i] == col) {
return data[row*head.size()+i];
if(row < getRowCount()) {
for(int i = head.size()-1; i >= 0; --i) {
if(head[i] == col) {
return data[row*head.size()+i];
}
}
}
return wxT("");
}

Expand Down Expand Up @@ -67,12 +69,15 @@ int DbConnector::getRowCount()

int DbConnector::getInt(int row, wxString col)
{
for(int i = head.size()-1; i >= 0; --i)
if(head[i] == col) {
long l;
data[row*head.size()+i].ToLong(&l, 0);
return l;
if(row < getRowCount()) {
for(int i = head.size()-1; i >= 0; --i) {
if(head[i] == col) {
long l;
data[row*head.size()+i].ToLong(&l, 0);
return l;
}
}
}
return 0;
}

Expand All @@ -88,3 +93,49 @@ wxString DbConnector::getString(int row, const char* col)
return getString(row, c);
}


DbConnector& DbConnector::operator <<(const wxString& str) {
internalBuffer += str;
return *this;
}

DbConnector& DbConnector::operator <<(const char* str) {
internalBuffer += wxString(str, wxConvUTF8);
return *this;
}


DbConnector& DbConnector::operator <<(const Execute& e) {
query(internalBuffer);
internalBuffer = wxT("");
return *this;
}

DbConnector& DbConnector::operator << (int i) {
internalBuffer << i;
return *this;
}


void DbConnector::select(const wxString& table, const wxString& key, const wxString& value) {
(*this) << "select * from " << table << " where " << key << "= \"" << value << "\"" << Execute();
}


int DbConnector::getSettingInt(const wxString& key) {
(*this) << "select * from settings where key = \"" << key << "\"" << Execute();
return getInt(0, "value");
}

wxString DbConnector::getSettingString(const wxString& key) {
(*this) << "select * from settings where key = \"" << key << "\"" << Execute();
return getString(0, "value");
}

void DbConnector::updateSettings(const wxString key, const wxString& value) {
(*this) << "update settings set value = \"" << value << "\" where key = \"" << key << "\"" << Execute();
}

void DbConnector::updateSettings(const wxString key, int value) {
(*this) << "update settings set value = \"" << value << "\" where key = \"" << key << "\"" << Execute();
}
29 changes: 20 additions & 9 deletions src/dbconnector.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,23 +10,34 @@

class DbConnector
{
public:
struct Execute {};
private:
sqlite3 *db;

wxString internalBuffer;
public:
std::vector<wxString> head;
std::vector<wxString> data;

DbConnector();
bool open(wxString filename);
void close();
bool query(wxString sql);
int getRowCount();
int getInt(int row, const char* col);
int getInt(int row, wxString col);
wxString getString(int row, wxString col);
wxString getString(int row, const char* col);
~DbConnector();
bool open(wxString filename);
void close();
bool query(wxString sql);
int getRowCount();
int getInt(int row, const char* col);
int getInt(int row, wxString col);
wxString getString(int row, wxString col);
wxString getString(int row, const char* col);
void select(const wxString& table, const wxString& key, const wxString& value);
int getSettingInt(const wxString& key);
wxString getSettingString(const wxString& key);
void updateSettings(const wxString key, const wxString& value);
void updateSettings(const wxString key, int value);
DbConnector& operator <<(const char* str);
DbConnector& operator <<(const wxString& str);
DbConnector& operator <<(const Execute& e);
DbConnector& operator <<(int i);
};


Expand Down
52 changes: 51 additions & 1 deletion src/editor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,21 @@ void FloEditor::initMenuBar() {

wxMenu* view = new wxMenu();
view->Append(VIEW_FTP, wxT("FTP"));
view->AppendSeparator();
view->Append(VIEW_LINENUMBERS, wxT("Line numbers"));
view->Append(VIEW_EOL, wxT("End of line"));
view->Append(VIEW_WHITESPACES, wxT("Whitespaces"));
wxMenu* viewAs = new wxMenu();
view->AppendSeparator();
view->AppendSubMenu(viewAs, wxT("View as"));
viewAs->Append(VIEWAS_CSS, wxT("CSS"));
viewAs->Append(VIEWAS_HTML, wxT("HTML (+JS, PHP, ...)"));
mMenuBar->Append(view, wxT("&View"));

wxMenu* settings = new wxMenu();
settings->Append(GLOBAL_SETTINGS, wxT("Global"));
mMenuBar->Append(settings, wxT("Settings"));

Connect(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSE, (wxObjectEventFunction)&FloEditor::onPageClose);
Connect(COMPLETE_WORD, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(FloEditor::onCompleteWord));
Connect(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(FloEditor::onMenuSelected));
Expand Down Expand Up @@ -91,6 +99,22 @@ void FloEditor::onClose(wxCloseEvent& event) {
event.Veto();
}

void FloEditor::toggleEol() {
wxStyledTextCtrl* ctrl = getSelectedFileTextCtrl();
if(!ctrl)
return;
ctrl->SetViewEOL(!ctrl->GetViewEOL());
}


void FloEditor::toggleWhiteSpaces() {
wxStyledTextCtrl* ctrl = getSelectedFileTextCtrl();
if(!ctrl)
return;
ctrl->SetViewWhiteSpace(ctrl->GetViewWhiteSpace() == 0?1:0);
}


void FloEditor::toggleLineNumbers() {
wxStyledTextCtrl* ctrl = getSelectedFileTextCtrl();
if(!ctrl)
Expand All @@ -107,9 +131,20 @@ void FloEditor::toggleLineNumbers() {

void FloEditor::onMenuSelected(wxCommandEvent& event) {
switch(event.GetId()) {
case GLOBAL_SETTINGS: {
GlobalSettingsDialog* d = new GlobalSettingsDialog(this, this);
d->Show();
}
break;
case VIEW_LINENUMBERS:
toggleLineNumbers();
break;
case VIEW_EOL:
toggleEol();
break;
case VIEW_WHITESPACES:
toggleWhiteSpaces();
break;
case VIEWAS_CSS:
viewAs(wxT("css"));
break;
Expand Down Expand Up @@ -224,8 +259,8 @@ void FloEditor::addFileTextCtrl(FileTextCtrlBase* ctrl)
mNotebook->SetSelection(mNotebook->GetPageCount()-1);
Connect(wxEVT_STC_SAVEPOINTREACHED, (wxObjectEventFunction)&FloEditor::onSavePointReached);
Connect(wxEVT_STC_SAVEPOINTLEFT, (wxObjectEventFunction)&FloEditor::onSavePointLeft);
ctrl->SetTabWidth(4);
viewAs(ctrl->getExtension());
ctrl->SetTabWidth(mDb->getSettingInt(wxT("scintilla.tabwidth")));
}


Expand Down Expand Up @@ -263,3 +298,18 @@ void FloEditor::viewAs(wxString lang)
styleset.apply(ctrl);
}
}


SharedPtr<DbConnector> FloEditor::getDb()
{
return mDb;
}


void FloEditor::setTabWidth(int w)
{
for(int i = mNotebook->GetPageCount()-1; i>= 0; --i) {
((wxStyledTextCtrl*)mNotebook->GetPage(i))->SetTabWidth(w);
}
}

8 changes: 8 additions & 0 deletions src/editor.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#include "localfiletextctrl.h"
#include "ftpctrl.h"
#include "quickfindpanel.h"
#include "globalsettings.h"

class QuickFindPanel;

Expand All @@ -19,6 +20,8 @@ enum {
COMPLETE_WORD = wxID_HIGHEST,
VIEW_FTP,
VIEW_LINENUMBERS,
VIEW_EOL,
VIEW_WHITESPACES,
FTP_NEW_ACCOUNT,
FTP_REMOVE_ACCOUNT,
FTP_EDIT_ACCOUNT,
Expand All @@ -31,6 +34,7 @@ enum {
FTP_DISCONNECT,
VIEWAS_CSS,
VIEWAS_HTML,
GLOBAL_SETTINGS,
LAST_ID
};

Expand All @@ -55,12 +59,16 @@ class FloEditor : public wxFrame {
void createNewFile();
void viewAs(wxString lang);
void toggleLineNumbers();
void toggleEol();
void toggleWhiteSpaces();
public:
FloEditor();
~FloEditor();
SharedPtr<DbConnector> getDb();
wxAuiNotebook* getNotebook() { return mNotebook; }
void addFileTextCtrl(FileTextCtrlBase* ctrl);
wxStyledTextCtrl* getSelectedFileTextCtrl();
void setTabWidth(int w);
};

#endif // EDITOR_H
64 changes: 64 additions & 0 deletions src/globalsettings.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
#include "globalsettings.h"

GlobalSettingsDialog::GlobalSettingsDialog(wxWindow* parent, FloEditor* editor):wxDialog(parent, wxID_ANY, wxT("Global settings")),mEditor(editor)
{
wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL);
mNotebook = new wxNotebook(this, wxID_ANY);
sizer->Add(mNotebook, 1, wxEXPAND);
addGeneralPage();
wxBoxSizer* subsizer = new wxBoxSizer(wxHORIZONTAL);
sizer->Add(subsizer, 0, wxALL | wxALIGN_CENTER_HORIZONTAL);
subsizer->Add(new wxButton(this, wxID_OK, wxT("OK")));
subsizer->Add(new wxButton(this, wxID_CANCEL, wxT("Cancel")));
subsizer->Add(new wxButton(this, wxID_APPLY, wxT("Apply")));
this->SetSizerAndFit(sizer);
SetSize(500, 400);
Connect(wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&GlobalSettingsDialog::onButtonClick);
}

GlobalSettingsDialog::~GlobalSettingsDialog()
{
}

void GlobalSettingsDialog::addGeneralPage() {
wxPanel* panel = new wxPanel(mNotebook);
wxFlexGridSizer* sizer = new wxFlexGridSizer(2);

sizer->Add(new wxStaticText(panel, wxID_ANY, wxT("Tab width:")), 1, wxALIGN_CENTER_VERTICAL | wxALL);
mTabWidthCtrl = new wxTextCtrl(panel, wxID_ANY);
mTabWidthCtrl->SetValue(mEditor->getDb()->getSettingString(wxT("scintilla.tabwidth")));
sizer->Add(mTabWidthCtrl);


sizer->AddGrowableCol(0);
sizer->AddGrowableCol(1);
panel->SetSizerAndFit(sizer);
mNotebook->AddPage(panel, wxT("General"));
}

void GlobalSettingsDialog::apply() {
wxString pageLabel = mNotebook->GetPageText(mNotebook->GetSelection());
SharedPtr<DbConnector> db = mEditor->getDb();
if(pageLabel == wxT("General")) {
db->updateSettings(wxT("scintilla.tabwidth"), mTabWidthCtrl->GetValue());
long l;
mTabWidthCtrl->GetValue().ToLong(&l);
mEditor->setTabWidth(l);
}
}

void GlobalSettingsDialog::onButtonClick(wxCommandEvent& event)
{
if(event.GetId() == wxID_APPLY) {
apply();
}
else if(event.GetId() == wxID_OK) {
apply();
Destroy();
}
else if(event.GetId() == wxID_CANCEL) {
Destroy();
}
}


22 changes: 22 additions & 0 deletions src/globalsettings.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#ifndef GLOBALSETTINGS_H
#define GLOBALSETTINGS_H

#include <wx/wx.h>
#include <wx/notebook.h>
#include "editor.h"

class FloEditor;

class GlobalSettingsDialog : public wxDialog {
wxNotebook* mNotebook;
wxTextCtrl* mTabWidthCtrl;
FloEditor* mEditor;
void addGeneralPage();
void onButtonClick(wxCommandEvent& event);
void apply();
public:
GlobalSettingsDialog(wxWindow* parent, FloEditor* editor);
~GlobalSettingsDialog();
};

#endif // GLOBALSETTINGS_H
2 changes: 1 addition & 1 deletion src/sharedptr.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class SharedPtr {
SharedPtr(T* src):ref(new int),value(src) {
*ref = 1;
}
SharedPtr(SharedPtr<T>& src):ref(src.ref),value(src.value) {
SharedPtr(const SharedPtr<T>& src):ref(src.ref),value(src.value) {
++(*ref);
}
void operator =(T* src) {
Expand Down

0 comments on commit 48f5e58

Please sign in to comment.