[Libreoffice-commits] core.git: Branch 'feature/gsoc14-colors' - include/svx svx/source

Krisztian Pinter pin.terminator at gmail.com
Thu Jul 10 08:50:45 PDT 2014


 include/svx/Palette.hxx                |   19 ++++++---
 include/svx/PaletteManager.hxx         |    6 ++-
 svx/source/tbxctrls/Palette.cxx        |   66 +++++++++++++++++++++++----------
 svx/source/tbxctrls/PaletteManager.cxx |   51 +++++++++++++++++++------
 svx/source/tbxctrls/colorwindow.hxx    |   12 ++----
 svx/source/tbxctrls/tbcontrl.cxx       |   57 +++++++++++-----------------
 6 files changed, 129 insertions(+), 82 deletions(-)

New commits:
commit 05f5059ed6d24cf31de8f824fc62d786c115b223
Author: Krisztian Pinter <pin.terminator at gmail.com>
Date:   Thu Jul 10 16:14:29 2014 +0200

    Change SvxColorWindow_Impl to use ComboBox for palette selection
    
    Change-Id: I0fb9b46298f45bbdf9ae9198c145b9ea5e403bbf

diff --git a/include/svx/Palette.hxx b/include/svx/Palette.hxx
index f7ced03..d31e958 100644
--- a/include/svx/Palette.hxx
+++ b/include/svx/Palette.hxx
@@ -21,6 +21,7 @@
 
 #include <rtl/ustring.hxx>
 #include <tools/color.hxx>
+#include <tools/stream.hxx>
 
 class Palette
 {
@@ -28,17 +29,23 @@ public:
     typedef std::pair<Color, OString> NamedColor;
     typedef std::vector< NamedColor > ColorList;
 private:
-    bool        mbLoaded;
-    OUString    maFname;
-    OString     maName;
+    bool        mbLoadedPalette;
+    bool        mbValidPalette;
+    OUString    maFName;
+    OUString    maFPath;
+    OUString    maName;
     ColorList   maColors;
 
-    void LoadPalette();
+    bool        ReadPaletteHeader(SvFileStream& rFileStream);
+    void        LoadPaletteHeader();
+    void        LoadPalette();
 public:
-    Palette(const OUString &rFname);
+    Palette( const OUString &rFPath, const OUString &rFName );
 
-    const OString&      GetPaletteName();
+    const OUString&     GetName();
     const ColorList&    GetPaletteColors();
+
+    bool                IsValid();
 };
 
 #endif // INCLUDED_SVX_PALETTE_HXX
diff --git a/include/svx/PaletteManager.hxx b/include/svx/PaletteManager.hxx
index e1d7201..925f67b 100644
--- a/include/svx/PaletteManager.hxx
+++ b/include/svx/PaletteManager.hxx
@@ -37,8 +37,10 @@ public:
     PaletteManager();
     void        LoadPalettes();
     void        ReloadColorSet(SvxColorValueSet& rColorSet);
-    void        PrevPalette();
-    void        NextPalette();
+    std::vector<OUString> GetPaletteList();
+    void        SetPalette( sal_Int32 nPos );
+    sal_Int32   GetPalette();
+
     long        GetColorCount();
     OUString    GetPaletteName();
     const Color& GetLastColor();
diff --git a/svx/source/tbxctrls/Palette.cxx b/svx/source/tbxctrls/Palette.cxx
index aebb7f0..f84f2d5 100644
--- a/svx/source/tbxctrls/Palette.cxx
+++ b/svx/source/tbxctrls/Palette.cxx
@@ -18,7 +18,6 @@
  */
 
 #include <svx/Palette.hxx>
-#include <tools/stream.hxx>
 
 // finds first token in rStr from index, separated by whitespace
 // returns position of next token in index
@@ -52,13 +51,17 @@ OString lcl_getToken(const OString& rStr, sal_Int32& index)
     return rStr.copy(substart, toklen);
 }
 
-Palette::Palette(const OUString &rFname) :
-    mbLoaded( false ),
-    maFname( rFname ){}
+Palette::Palette( const OUString &rFPath, const OUString &rFName ) :
+    mbLoadedPalette( false ),
+    mbValidPalette( false ),
+    maFName( rFName ),
+    maFPath( rFPath )
+{
+    LoadPaletteHeader();
+}
 
-const OString& Palette::GetPaletteName()
+const OUString& Palette::GetName()
 {
-    LoadPalette();
     return maName;
 }
 
@@ -68,27 +71,52 @@ const Palette::ColorList& Palette::GetPaletteColors()
     return maColors;
 }
 
-void Palette::LoadPalette()
+bool Palette::IsValid()
 {
-    if( mbLoaded ) return;
-
-    mbLoaded = true;
-
-    // TODO add error handling!!!
-    SvFileStream aFile(maFname, STREAM_READ);
+    return mbValidPalette;
+}
 
+bool Palette::ReadPaletteHeader(SvFileStream& rFileStream)
+{
     OString aLine;
+    OString aName;
 
-    aFile.ReadLine(aLine);
-    if( !aLine.startsWith("GIMP Palette") ) return;
-    aFile.ReadLine(aLine);
-    if( aLine.startsWith("Name: ", &maName) )
+    rFileStream.ReadLine(aLine);
+    if( !aLine.startsWith("GIMP Palette") ) return false;
+    rFileStream.ReadLine(aLine);
+    if( aLine.startsWith("Name: ", &aName) )
     {
-        aFile.ReadLine(aLine);
+        maName = OStringToOUString(aName, RTL_TEXTENCODING_ASCII_US);
+        rFileStream.ReadLine(aLine);
         if( aLine.startsWith("Columns: "))
-            aFile.ReadLine(aLine); // we can ignore this
+            rFileStream.ReadLine(aLine); // we can ignore this
+    }
+    else
+    {
+        maName = maFName;
     }
+    return true;
+}
+
+//TODO make this LoadPaletteHeader and set a bool if palette is incorrect
+void Palette::LoadPaletteHeader()
+{
+    SvFileStream aFile(maFPath, STREAM_READ);
+    mbValidPalette = ReadPaletteHeader( aFile );
+}
 
+void Palette::LoadPalette()
+{
+    if( mbLoadedPalette ) return;
+    mbLoadedPalette = true;
+
+    // TODO add error handling!!!
+    SvFileStream aFile(maFPath, STREAM_READ);
+    mbValidPalette = ReadPaletteHeader( aFile );
+
+    if( !mbValidPalette ) return;
+
+    OString aLine;
     do {
         if (aLine[0] != '#' && aLine[0] != '\n')
         {
diff --git a/svx/source/tbxctrls/PaletteManager.cxx b/svx/source/tbxctrls/PaletteManager.cxx
index e9933d4..95c351d 100644
--- a/svx/source/tbxctrls/PaletteManager.cxx
+++ b/svx/source/tbxctrls/PaletteManager.cxx
@@ -25,6 +25,10 @@
 #include <svx/dialogs.hrc>
 #include <svtools/colrdlg.hxx>
 
+#define STR_DEFAULT_PAL         "Default palette"
+#define STR_DOC_COLORS          "Document colors"
+#define STR_DOC_COLOR_PREFIX    "Document Color "
+
 PaletteManager::PaletteManager() :
     mnNumOfPalettes(2),
     mnCurrentPalette(0),
@@ -42,7 +46,9 @@ void PaletteManager::LoadPalettes()
     osl::Directory aDir(aPalPath);
     maPalettes.clear();
     osl::DirectoryItem aDirItem;
-    osl::FileStatus aFileStat(osl_FileStatus_Mask_FileURL|osl_FileStatus_Mask_Type);
+    osl::FileStatus aFileStat( osl_FileStatus_Mask_FileName |
+                               osl_FileStatus_Mask_FileURL  |
+                               osl_FileStatus_Mask_Type     );
     if( aDir.open() == osl::FileBase::E_None )
     {
         while( aDir.getNextItem(aDirItem) == osl::FileBase::E_None )
@@ -50,11 +56,12 @@ void PaletteManager::LoadPalettes()
             aDirItem.getFileStatus(aFileStat);
             if(aFileStat.isRegular() || aFileStat.isLink())
             {
-                OUString aPath = aFileStat.getFileURL();
-                if(aPath.getLength() > 4 &&
-                    aPath.copy(aPath.getLength()-4).toAsciiLowerCase() == ".gpl")
+                OUString aFName = aFileStat.getFileName();
+                if( aFName.endsWithIgnoreAsciiCase(".gpl") )
                 {
-                    maPalettes.push_back(Palette(aPath));
+                    Palette aPalette( aFileStat.getFileURL(), aFName );
+                    if( aPalette.IsValid() )
+                        maPalettes.push_back( aPalette );
                 }
             }
         }
@@ -93,7 +100,7 @@ void PaletteManager::ReloadColorSet(SvxColorValueSet &rColorSet)
         std::vector<Color> aColors = pDocSh->GetDocColors();
         mnColorCount = aColors.size();
         rColorSet.Clear();
-        rColorSet.loadColorVector(aColors, "Document Color ");
+        rColorSet.loadColorVector(aColors, STR_DOC_COLOR_PREFIX );
     }
     else
     {
@@ -104,14 +111,32 @@ void PaletteManager::ReloadColorSet(SvxColorValueSet &rColorSet)
     }
 }
 
-void PaletteManager::PrevPalette()
+std::vector<OUString> PaletteManager::GetPaletteList()
+{
+    std::vector<OUString> aPaletteNames;
+
+    aPaletteNames.push_back( STR_DEFAULT_PAL );
+
+    for( std::vector<Palette>::iterator it = maPalettes.begin();
+         it != maPalettes.end();
+         ++it)
+    {
+        aPaletteNames.push_back( it->GetName() );
+    }
+
+    aPaletteNames.push_back( STR_DOC_COLORS );
+
+    return aPaletteNames;
+}
+
+void PaletteManager::SetPalette( sal_Int32 nPos )
 {
-    mnCurrentPalette = mnCurrentPalette == 0 ? mnNumOfPalettes - 1 : mnCurrentPalette - 1;
+    mnCurrentPalette = nPos;
 }
 
-void PaletteManager::NextPalette()
+sal_Int32 PaletteManager::GetPalette()
 {
-    mnCurrentPalette = mnCurrentPalette == mnNumOfPalettes - 1 ? 0 : mnCurrentPalette + 1;
+    return mnCurrentPalette;
 }
 
 long PaletteManager::GetColorCount()
@@ -122,11 +147,11 @@ long PaletteManager::GetColorCount()
 OUString PaletteManager::GetPaletteName()
 {
     if( mnCurrentPalette == 0 )
-        return OUString("Default palette");
+        return OUString( STR_DEFAULT_PAL );
     else if( mnCurrentPalette == mnNumOfPalettes - 1 )
-        return OUString("Document colors");
+        return OUString( STR_DOC_COLORS );
     else
-        return OStringToOUString(maPalettes[mnCurrentPalette - 1].GetPaletteName(), RTL_TEXTENCODING_ASCII_US);
+        return maPalettes[mnCurrentPalette - 1].GetName();
 }
 
 const Color& PaletteManager::GetLastColor()
diff --git a/svx/source/tbxctrls/colorwindow.hxx b/svx/source/tbxctrls/colorwindow.hxx
index fe8fe8d..fd8eef7 100644
--- a/svx/source/tbxctrls/colorwindow.hxx
+++ b/svx/source/tbxctrls/colorwindow.hxx
@@ -30,6 +30,7 @@
 #include <com/sun/star/frame/XFrame.hpp>
 #include <svx/SvxColorValueSet.hxx>
 #include <svx/PaletteManager.hxx>
+#include <vcl/combobox.hxx>
 
 
 // class SvxColorWindow_Impl --------------------------------------------------
@@ -42,22 +43,19 @@ class SvxColorWindow_Impl : public SfxPopupWindow
 private:
     const sal_uInt16 theSlotId;
     SvxColorValueSet aColorSet;
-    PushButton aButtonLeft;
-    PushButton aButtonRight;
+    ComboBox aPaletteComboBox;
     PushButton aButtonPicker;
-    FixedText  aPaletteName;
     OUString  maCommand;
     Link maSelectedLink;
 
-    const sal_uInt16 nNavButtonWidth;
-    const sal_uInt16 nNavButtonHeight;
+    const sal_uInt16 nButtonWidth;
+    const sal_uInt16 nButtonHeight;
     PaletteManager& mrPaletteManager;
 
     void UpdateGUI();
 
     DECL_LINK( SelectHdl, void * );
-    DECL_LINK( StepLeftClickHdl, void * );
-    DECL_LINK( StepRightClickHdl, void * );
+    DECL_LINK( SelectPaletteHdl, void *);
     DECL_LINK( OpenPickerClickHdl, void * );
 
 protected:
diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx
index f2141f4..6a307b2 100644
--- a/svx/source/tbxctrls/tbcontrl.cxx
+++ b/svx/source/tbxctrls/tbcontrl.cxx
@@ -1084,13 +1084,11 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString&            rCommand,
 
     theSlotId( nSlotId ),
     aColorSet   ( this, WinBits( WB_ITEMBORDER | WB_NAMEFIELD | WB_3DLOOK | WB_NO_DIRECTSELECT) ),
-    aButtonLeft ( this ),
-    aButtonRight( this ),
+    aPaletteComboBox( this, WinBits( WB_BORDER | WB_DROPDOWN | WB_AUTOSIZE) ),
     aButtonPicker( this ),
-    aPaletteName( this ),
     maCommand( rCommand ),
-    nNavButtonWidth ( 20 ),
-    nNavButtonHeight( 20 ),
+    nButtonWidth ( 28 ),
+    nButtonHeight( 28 ),
     mrPaletteManager( rPaletteManager )
 
 {
@@ -1125,22 +1123,21 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString&            rCommand,
         aColorSet.SetAccessibleName( SVX_RESSTR( RID_SVXSTR_LINECOLOR ) );
     }
 
-    aButtonLeft.SetText("<");
-    aButtonLeft.SetSizePixel(Size(nNavButtonWidth, nNavButtonHeight));
-    aButtonLeft.SetClickHdl( LINK( this, SvxColorWindow_Impl, StepLeftClickHdl ) );
-    aButtonLeft.Show();
-
-    aButtonRight.SetText(">");
-    aButtonRight.SetSizePixel(Size(nNavButtonWidth, nNavButtonHeight));
-    aButtonRight.SetClickHdl( LINK( this, SvxColorWindow_Impl, StepRightClickHdl ) );
-    aButtonRight.Show();
+    aPaletteComboBox.SetSelectHdl( LINK( this, SvxColorWindow_Impl, SelectPaletteHdl ) );
+    aPaletteComboBox.AdaptDropDownLineCountToMaximum();
+    aPaletteComboBox.Show();
+    std::vector<OUString> aPaletteList = mrPaletteManager.GetPaletteList();
+    for( std::vector<OUString>::iterator it = aPaletteList.begin(); it != aPaletteList.end(); ++it )
+    {
+        aPaletteComboBox.InsertEntry( *it );
+    }
+    aPaletteComboBox.SetText( aPaletteList[ mrPaletteManager.GetPalette() ] );
 
     aButtonPicker.SetText("P");
-    aButtonPicker.SetSizePixel(Size(nNavButtonWidth, nNavButtonHeight));
+    aButtonPicker.SetSizePixel(Size(nButtonWidth, nButtonHeight));
     aButtonPicker.SetClickHdl( LINK( this, SvxColorWindow_Impl, OpenPickerClickHdl ) );
     aButtonPicker.Show();
 
-    aPaletteName.SetSizePixel(Size(150, nNavButtonHeight));
     aColorSet.Show();
 
     aColorSet.SetSelectHdl( LINK( this, SvxColorWindow_Impl, SelectHdl ) );
@@ -1148,8 +1145,6 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString&            rCommand,
     aColorSet.SetHelpId( HID_POPUP_COLOR_CTRL );
     SetText( rWndTitle );
 
-    aPaletteName.Show();
-
     AddStatusListener( OUString( ".uno:ColorTableState" ));
     AddStatusListener( maCommand );
 
@@ -1166,16 +1161,13 @@ void SvxColorWindow_Impl::UpdateGUI()
     static sal_Int32 nAdd = 4;
 
     //TODO: Move left/right buttons above the colors
-    SetOutputSizePixel(Size(aNewSize.Width() + nAdd, aNewSize.Height() + nAdd + nNavButtonHeight));
-
-    aButtonLeft.SetPosPixel(Point(0, aNewSize.Height() + nAdd + 1));
+    SetOutputSizePixel(Size(aNewSize.Width() + nAdd, aNewSize.Height() + nAdd + nButtonHeight));
 
-    aButtonRight.SetPosPixel(Point(aNewSize.Width() + nAdd - nNavButtonWidth, aNewSize.Height() + nAdd + 1));
+    aPaletteComboBox.SetPosPixel(Point(0, aNewSize.Height() + nAdd + 1));
 
-    aButtonPicker.SetPosPixel(Point(aNewSize.Width() + nAdd - 2 * nNavButtonWidth, aNewSize.Height() + nAdd + 1));
+    aButtonPicker.SetPosPixel(Point(aNewSize.Width() + nAdd - nButtonWidth, aNewSize.Height() + nAdd + 1));
 
-    aPaletteName.SetPosPixel(Point(nNavButtonWidth, aNewSize.Height() + nAdd + 1));
-    aPaletteName.SetText(mrPaletteManager.GetPaletteName());
+    aPaletteComboBox.SetSizePixel(Size(aNewSize.Width() - nButtonWidth, nButtonHeight));
 }
 
 SvxColorWindow_Impl::~SvxColorWindow_Impl()
@@ -1229,16 +1221,11 @@ IMPL_LINK_NOARG(SvxColorWindow_Impl, SelectHdl)
     return 0;
 }
 
-IMPL_LINK_NOARG(SvxColorWindow_Impl, StepLeftClickHdl)
-{
-    mrPaletteManager.PrevPalette();
-    UpdateGUI();
-    return 0;
-}
-
-IMPL_LINK_NOARG(SvxColorWindow_Impl, StepRightClickHdl)
+IMPL_LINK_NOARG(SvxColorWindow_Impl, SelectPaletteHdl)
 {
-    mrPaletteManager.NextPalette();
+    OUString sSrchTxt = aPaletteComboBox.GetText();
+    sal_Int32 nPos = aPaletteComboBox.GetEntryPos( sSrchTxt );
+    mrPaletteManager.SetPalette( nPos );
     UpdateGUI();
     return 0;
 }
@@ -1251,7 +1238,7 @@ IMPL_LINK_NOARG(SvxColorWindow_Impl, OpenPickerClickHdl)
 
 void SvxColorWindow_Impl::Resize()
 {
-    lcl_ResizeValueSet( *this, aColorSet, nNavButtonHeight + 2);
+    lcl_ResizeValueSet( *this, aColorSet, nButtonHeight + 2);
 }
 
 void SvxColorWindow_Impl::StartSelection()


More information about the Libreoffice-commits mailing list