[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kate] kate: Show number of characters in the status bar.
From:       Christian Loose <christian.loose () hamburg ! de>
Date:       2011-08-21 15:15:35
Message-ID: 20110821151535.86F9FA6078 () git ! kde ! org
[Download RAW message or body]

Git commit bc6359e81d72c482dcfaf70665a79545fb14aab4 by Christian Loose.
Committed on 18/08/2011 at 20:09.
Pushed by cloose into branch 'master'.

Show number of characters in the status bar.

Add a label to the status bar that displays the number of
characters in the current document.

Also extend the context menu of the status bar with menu actions
to change the visibility of the status bar items.

FEATURE: 188466
FIXED-IN: 4.8.0
REVIEW: 102370

M  +8    -0    kate/app/kateviewspace.h
M  +20   -0    kate/app/kateviewmanager.h
M  +8    -0    kate/data/kateui.rc
M  +96   -0    kate/app/kateviewmanager.cpp
M  +61   -0    kate/app/kateviewspace.cpp

http://commits.kde.org/kate/bc6359e81d72c482dcfaf70665a79545fb14aab4

diff --git a/kate/app/kateviewmanager.cpp b/kate/app/kateviewmanager.cpp
index 513dd98..6449777 100644
--- a/kate/app/kateviewmanager.cpp
+++ b/kate/app/kateviewmanager.cpp
@@ -176,6 +176,39 @@ void KateViewManager::setupActions ()
   connect(a, SIGNAL(triggered()), this, SLOT(moveSplitterDown()));
 
   a->setWhatsThis(i18n("Move the splitter of the current view down"));
+
+  /*
+   * Status Bar Items menu
+   */
+  m_cursorPosToggle = new KToggleAction(i18n("Show Cursor Position"), this);
+  m_mainWindow->actionCollection()->addAction( "show_cursor_pos", m_cursorPosToggle );
+  connect(m_cursorPosToggle, SIGNAL(toggled(bool)), 
+          this, SIGNAL(cursorPositionItemVisibilityChanged(bool)));
+
+  m_charCountToggle = new KToggleAction(i18n("Show Characters Count"), this);
+  m_mainWindow->actionCollection()->addAction( "show_char_count", m_charCountToggle );
+  connect(m_charCountToggle, SIGNAL(toggled(bool)), 
+          this, SIGNAL(charactersCountItemVisibilityChanged(bool)));
+
+  m_insertModeToggle = new KToggleAction(i18n("Show Insertion Mode"), this);
+  m_mainWindow->actionCollection()->addAction( "show_insert_mode", m_insertModeToggle );
+  connect(m_insertModeToggle, SIGNAL(toggled(bool)), 
+          this, SIGNAL(insertModeItemVisibilityChanged(bool)));
+
+  m_selectModeToggle = new KToggleAction(i18n("Show Selection Mode"), this);
+  m_mainWindow->actionCollection()->addAction( "show_select_mode", m_selectModeToggle );
+  connect(m_selectModeToggle, SIGNAL(toggled(bool)), 
+          this, SIGNAL(selectModeItemVisibilityChanged(bool)));
+
+  m_encodingToggle = new KToggleAction(i18n("Show Encoding"), this);
+  m_mainWindow->actionCollection()->addAction( "show_encoding", m_encodingToggle );
+  connect(m_encodingToggle, SIGNAL(toggled(bool)), 
+          this, SIGNAL(encodingItemVisibilityChanged(bool)));
+
+  m_docNameToggle = new KToggleAction(i18n("Show Document Name"), this);
+  m_mainWindow->actionCollection()->addAction( "show_doc_name", m_docNameToggle );
+  connect(m_docNameToggle, SIGNAL(toggled(bool)), 
+          this, SIGNAL(documentNameItemVisibilityChanged(bool)));
 }
 
 void KateViewManager::updateViewSpaceActions ()
@@ -287,6 +320,36 @@ KateMainWindow *KateViewManager::mainWindow()
   return m_mainWindow;
 }
 
+bool KateViewManager::isCursorPositionVisible() const
+{
+  return m_cursorPosToggle->isChecked();
+}
+
+bool KateViewManager::isCharactersCountVisible() const
+{
+  return m_charCountToggle->isChecked();
+}
+
+bool KateViewManager::isInsertModeVisible() const
+{
+  return m_insertModeToggle->isChecked();
+}
+
+bool KateViewManager::isSelectModeVisible() const
+{
+  return m_selectModeToggle->isChecked();
+}
+
+bool KateViewManager::isEncodingVisible() const
+{
+  return m_encodingToggle->isChecked();
+}
+
+bool KateViewManager::isDocumentNameVisible() const
+{
+  return m_docNameToggle->isChecked();
+}
+
 // VIEWSPACE
 
 void KateViewManager::documentCreated (KTextEditor::Document *doc)
@@ -731,6 +794,14 @@ void KateViewManager::saveViewConfiguration(KConfigGroup& config)
 
   m_splitterIndex = 0;
   saveSplitterConfig(this, config.config(), config.name());
+
+  // Status Bar Items
+  config.writeEntry("Cursor Position Visible", m_cursorPosToggle->isChecked());
+  config.writeEntry("Characters Count Visible", m_charCountToggle->isChecked());
+  config.writeEntry("Insertion Mode Visible", m_insertModeToggle->isChecked());
+  config.writeEntry("Selection Mode Visible", m_selectModeToggle->isChecked());
+  config.writeEntry("Encoding Visible", m_encodingToggle->isChecked());
+  config.writeEntry("Document Name Visible", m_docNameToggle->isChecked());
 }
 
 void KateViewManager::restoreViewConfiguration (const KConfigGroup& config)
@@ -773,6 +844,31 @@ void KateViewManager::restoreViewConfiguration (const KConfigGroup& config)
     m_viewSpaceList.append(vs);
   }
 
+  // Status Bar Items
+  bool cursorPosVisible = config.readEntry("Cursor Position Visible", true);
+  m_cursorPosToggle->setChecked(cursorPosVisible);
+  emit cursorPositionItemVisibilityChanged(cursorPosVisible);
+
+  bool charCountVisible = config.readEntry("Characters Count Visible", false);
+  m_charCountToggle->setChecked(charCountVisible);
+  emit charactersCountItemVisibilityChanged(charCountVisible);
+
+  bool insertModeVisible = config.readEntry("Insertion Mode Visible", true);
+  m_insertModeToggle->setChecked(insertModeVisible);
+  emit insertModeItemVisibilityChanged(insertModeVisible);
+
+  bool selectModeVisible = config.readEntry("Selection Mode Visible", true);
+  m_selectModeToggle->setChecked(selectModeVisible);
+  emit selectModeItemVisibilityChanged(selectModeVisible);
+
+  bool encodingVisible = config.readEntry("Encoding Visible", true);
+  m_encodingToggle->setChecked(encodingVisible);
+  emit encodingItemVisibilityChanged(encodingVisible);
+
+  bool docNameVisible = config.readEntry("Document Name Visible", true);
+  m_docNameToggle->setChecked(docNameVisible);
+  emit documentNameItemVisibilityChanged(docNameVisible);
+
   updateViewSpaceActions();
 }
 
diff --git a/kate/app/kateviewmanager.h b/kate/app/kateviewmanager.h
index 0278ee4..af3ee33 100644
--- a/kate/app/kateviewmanager.h
+++ b/kate/app/kateviewmanager.h
@@ -89,6 +89,13 @@ class KateViewManager : public QSplitter
     void closeViews(KTextEditor::Document *doc);
     KateMainWindow *mainWindow();
 
+    bool isCursorPositionVisible() const;
+    bool isCharactersCountVisible() const;
+    bool isInsertModeVisible() const;
+    bool isSelectModeVisible() const;
+    bool isEncodingVisible() const;
+    bool isDocumentNameVisible() const;
+
   private Q_SLOTS:
     void activateView ( KTextEditor::View *view );
     void activateSpace ( KTextEditor::View* v );
@@ -113,6 +120,13 @@ class KateViewManager : public QSplitter
     void viewChanged ();
     void viewCreated (KTextEditor::View *);
 
+    void cursorPositionItemVisibilityChanged(bool);
+    void charactersCountItemVisibilityChanged(bool);
+    void insertModeItemVisibilityChanged(bool);
+    void selectModeItemVisibilityChanged(bool);
+    void encodingItemVisibilityChanged(bool);
+    void documentNameItemVisibilityChanged(bool);
+
   public:
     inline QList<KTextEditor::View*> &viewList ()
     {
@@ -234,6 +248,12 @@ class KateViewManager : public QSplitter
     KAction *m_closeView;
     KAction *goNext;
     KAction *goPrev;
+    KAction *m_cursorPosToggle;
+    KAction *m_charCountToggle;
+    KAction *m_insertModeToggle;
+    KAction *m_selectModeToggle;
+    KAction *m_encodingToggle;
+    KAction *m_docNameToggle;
 
     QList<KateViewSpace*> m_viewSpaceList;
     QList<KTextEditor::View*> m_viewList;
diff --git a/kate/app/kateviewspace.cpp b/kate/app/kateviewspace.cpp
index 226f044..1644634 100644
--- a/kate/app/kateviewspace.cpp
+++ b/kate/app/kateviewspace.cpp
@@ -64,6 +64,27 @@ KateViewSpace::KateViewSpace( KateViewManager *viewManager,
   // connect signal to hide/show statusbar
   connect (m_viewManager->mainWindow(), SIGNAL(statusBarToggled()), this, SLOT(statusBarToggled()));
 
+  connect (m_viewManager, SIGNAL(cursorPositionItemVisibilityChanged(bool)),
+           mStatusBar, SLOT(cursorPositionItemVisibilityChanged(bool)));
+  connect (m_viewManager, SIGNAL(charactersCountItemVisibilityChanged(bool)),
+           mStatusBar, SLOT(charactersCountItemVisibilityChanged(bool)));
+  connect (m_viewManager, SIGNAL(insertModeItemVisibilityChanged(bool)),
+           mStatusBar, SLOT(insertModeItemVisibilityChanged(bool)));
+  connect (m_viewManager, SIGNAL(selectModeItemVisibilityChanged(bool)),
+           mStatusBar, SLOT(selectModeItemVisibilityChanged(bool)));
+  connect (m_viewManager, SIGNAL(encodingItemVisibilityChanged(bool)),
+           mStatusBar, SLOT(encodingItemVisibilityChanged(bool)));
+  connect (m_viewManager, SIGNAL(documentNameItemVisibilityChanged(bool)),
+           mStatusBar, SLOT(documentNameItemVisibilityChanged(bool)));
+
+  // init the visibility of the statusbar items
+  mStatusBar->cursorPositionItemVisibilityChanged(m_viewManager->isCursorPositionVisible());
+  mStatusBar->charactersCountItemVisibilityChanged(m_viewManager->isCharactersCountVisible());
+  mStatusBar->insertModeItemVisibilityChanged(m_viewManager->isInsertModeVisible());
+  mStatusBar->selectModeItemVisibilityChanged(m_viewManager->isSelectModeVisible());
+  mStatusBar->encodingItemVisibilityChanged(m_viewManager->isEncodingVisible());
+  mStatusBar->documentNameItemVisibilityChanged(m_viewManager->isDocumentNameVisible());
+
   // init the statusbar...
   statusBarToggled ();
 }
@@ -261,6 +282,13 @@ KateVSStatusBar::KateVSStatusBar ( KateViewSpace *parent)
   addWidget( m_lineColLabel, 0 );
   m_lineColLabel->installEventFilter( this );
 
+  QString charsText = i18n(" Characters: %1 ", KGlobal::locale()->formatNumber(4444, 0));
+
+  m_charsLabel = new QLabel( this );
+  m_charsLabel->setMinimumWidth( m_charsLabel->fontMetrics().width( charsText ) );
+  addWidget( m_charsLabel, 0 );
+  m_charsLabel->installEventFilter( this );
+
   m_modifiedLabel = new QLabel( this );
   m_modifiedLabel->setFixedSize( 16, 16 );
   addWidget( m_modifiedLabel, 0 );
@@ -360,6 +388,9 @@ void KateVSStatusBar::cursorPositionChanged ( KTextEditor::View *view )
   m_lineColLabel->setText(
     i18n(" Line: %1 Col: %2 ", KGlobal::locale()->formatNumber(position.line() + 1, 0),
          KGlobal::locale()->formatNumber(position.column() + 1, 0)) );
+  
+  m_charsLabel->setText(
+    i18n(" Characters: %1 ", KGlobal::locale()->formatNumber(view->document()->totalCharacters(), 0)));
 }
 
 void KateVSStatusBar::selectionChanged (KTextEditor::View *view)
@@ -422,6 +453,36 @@ void KateVSStatusBar::documentConfigChanged ()
     m_encodingLabel->setText( v->document()->encoding() );
 }
 
+void KateVSStatusBar::cursorPositionItemVisibilityChanged(bool visible)
+{
+  m_lineColLabel->setVisible(visible);
+}
+
+void KateVSStatusBar::charactersCountItemVisibilityChanged(bool visible)
+{
+  m_charsLabel->setVisible(visible);
+}
+
+void KateVSStatusBar::insertModeItemVisibilityChanged(bool visible)
+{
+  m_insertModeLabel->setVisible(visible);
+}
+
+void KateVSStatusBar::selectModeItemVisibilityChanged(bool visible)
+{
+  m_selectModeLabel->setVisible(visible);
+}
+
+void KateVSStatusBar::encodingItemVisibilityChanged(bool visible)
+{
+  m_encodingLabel->setVisible(visible);
+}
+
+void KateVSStatusBar::documentNameItemVisibilityChanged(bool visible)
+{
+  m_fileNameLabel->setVisible(visible);
+}
+
 //END KateVSStatusBar
 
 // kate: space-indent on; indent-width 2; replace-tabs on;
diff --git a/kate/app/kateviewspace.h b/kate/app/kateviewspace.h
index 3cc29f5..00314da 100644
--- a/kate/app/kateviewspace.h
+++ b/kate/app/kateviewspace.h
@@ -69,12 +69,20 @@ class KateVSStatusBar : public KStatusBar
 
     void informationMessage (KTextEditor::View *view, const QString &message);
 
+    void cursorPositionItemVisibilityChanged(bool visible);
+    void charactersCountItemVisibilityChanged(bool visible);
+    void insertModeItemVisibilityChanged(bool visible);
+    void selectModeItemVisibilityChanged(bool visible);
+    void encodingItemVisibilityChanged(bool visible);
+    void documentNameItemVisibilityChanged(bool visible);
+
   protected:
     virtual bool eventFilter (QObject*, QEvent *);
     virtual void showMenu ();
 
   private:
     QLabel* m_lineColLabel;
+    QLabel* m_charsLabel;
     QLabel* m_modifiedLabel;
     QLabel* m_insertModeLabel;
     QLabel* m_selectModeLabel;
diff --git a/kate/data/kateui.rc b/kate/data/kateui.rc
index 93735f0..42bfa53 100644
--- a/kate/data/kateui.rc
+++ b/kate/data/kateui.rc
@@ -135,6 +135,14 @@
   <Action name="go_back"/>
   <Action name="go_forward"/>
   <Action name="doc_list"/>
+  <Menu name="viewspace_popup_statusbar"><text>&amp;Status Bar Items</text>
+    <Action name="show_cursor_pos"/>
+    <Action name="show_char_count"/>
+    <Action name="show_insert_mode"/>
+    <Action name="show_select_mode"/>
+    <Action name="show_encoding"/>
+    <Action name="show_doc_name"/>
+  </Menu>
 </Menu>
 
 </kpartgui>

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic