Changeset 22470d5


Ignore:
Timestamp:
May 29, 2014 7:48:36 AM (6 weeks ago)
Author:
yurkis <yurkis@…>
Branches:
master, releng/10.0.2
Children:
eaea8ff
Parents:
ed29650
Message:

Control panel: Save 80% of view settings between app launch; not show 'sudo' related items if user can't launch it

Location:
src-qt4/pc-controlpanel
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src-qt4/pc-controlpanel/mainwindow.cpp

    rd0638cd r22470d5  
    33#include <QListWidgetItem> 
    44#include <QToolTip> 
     5#include <QDir> 
     6 
     7#include <unistd.h> 
    58 
    69#include "pcbsd-utils.h" 
    7  
    810 
    911#include "mainwindow.h" 
     
    4749Q_DECLARE_METATYPE(CControlPanelItem*); 
    4850 
     51#define CONFIG_FILE (QDir::homePath()+QString("/.config/PC-BSD/ControlPanel.conf")) 
     52//const char* const CONFIG_FILE = "~/ControlPanel.conf"; 
     53const char* const CONFIG_GENERAL_GROUP = "General"; 
     54const char* const CONFIG_HIDE_DE_ITEMS = "HideDeItems"; 
     55const char* const CONFIG_VIEW_TYPE = "ViewType"; 
     56const char* const CONFIG_VIEW_TYPE_GRID = "Grid"; 
     57const char* const CONFIG_VIEW_TYPE_LIST = "List"; 
     58const char* const CONFIG_ICON_SIZE = "IconSize"; 
     59const char* const CONFIG_ICON_SIZE_NORMAL = "Normal"; 
     60const char* const CONFIG_ICON_SIZE_LARGE = "Large"; 
     61const char* const CONFIG_FIXED_LAYOUT = "FixedLayout"; 
     62 
     63 
    4964/////////////////////////////////////////////////////////////////////////////// 
    5065MainWindow::MainWindow(QWidget *parent) : 
     
    5368{ 
    5469    ui->setupUi(this); 
     70 
     71    mItemGropus[0]= SUIItemsGroup(&softwareItems, ui->softwareLW, ui->softwareGroupName); 
     72    mItemGropus[1]= SUIItemsGroup(&systemItems, ui->systemLW, ui->systemGroupName); 
     73    mItemGropus[2]= SUIItemsGroup(&hardwareItems, ui->hardwareLW, ui->hardwareGroupName); 
     74    mItemGropus[3]= SUIItemsGroup(&networkingItems, ui->networkingLW, ui->networkingGroupName); 
     75    mItemGropus[4]= SUIItemsGroup(&deItems, ui->deLW, ui->deGroupName); 
     76    mItemGropus[5]= SUIItemsGroup(&toolsItems, ui->toolsLW, ui->toolsGroupName); 
     77 
     78    loadSettings(); 
    5579 
    5680    setupDEChooser(); 
     
    85109{ 
    86110    delete ui; 
     111} 
     112 
     113/////////////////////////////////////////////////////////////////////////////// 
     114void MainWindow::closeEvent(QCloseEvent *event) 
     115{ 
     116    saveSettings(); 
    87117} 
    88118 
     
    112142                    if (installedDEs[k].isActive) 
    113143                    { 
    114                         DisplayName+=QString(" ")+tr("(Current)"); 
     144                        DisplayName+=QString(" ")+tr("(Current)");                         
    115145                        mEnabledDEs<<installedDEs[k].Name; 
    116146                        ui->DEChooserButton->setIcon(QIcon(DEEntries[i].mIconPath)); 
     
    136166    ui->DEChooserButton->setMenu(DEChoiseMenu); 
    137167 
    138     if (!isCurrentFound) 
     168    if ((!isCurrentFound) && (!misSettingsSystemOnly)) 
    139169    { 
    140170        ui->DEChooserButton->setIcon(QIcon(UNSUPPORTED_DE_ICON)); 
     
    142172    } 
    143173 
     174    if (misSettingsSystemOnly) 
     175    { 
     176        mEnabledDEs.clear(); 
     177        ui->DEChooserButton->setIcon(ui->actionSystem_only->icon()); 
     178        ui->DELaunchConfigApp->setVisible(false); 
     179    } 
     180 
    144181    //----Add actions to menu ad connect signals 
    145182    for (int i=0; i<DEntriesSize; i++) 
     
    156193/////////////////////////////////////////////////////////////////////////////// 
    157194void MainWindow::setupGroups() 
    158 { 
    159     mItemGropus[0]= SUIItemsGroup(&softwareItems, ui->softwareLW, ui->softwareGroupName); 
    160     mItemGropus[1]= SUIItemsGroup(&systemItems, ui->systemLW, ui->systemGroupName); 
    161     mItemGropus[2]= SUIItemsGroup(&hardwareItems, ui->hardwareLW, ui->hardwareGroupName); 
    162     mItemGropus[3]= SUIItemsGroup(&networkingItems, ui->networkingLW, ui->networkingGroupName); 
    163     mItemGropus[4]= SUIItemsGroup(&deItems, ui->deLW, ui->deGroupName); 
    164     mItemGropus[5]= SUIItemsGroup(&toolsItems, ui->toolsLW, ui->toolsGroupName); 
     195{     
     196    bool isAbleToSU = checkUserGroup("wheel") | checkUserGroup("opearator"); 
    165197 
    166198    for(int i=0; i<6; i++) 
     
    168200        QAutoExpandList* widget = mItemGropus[i].mListWidget; 
    169201        if (!widget) 
    170             continue; 
    171         widget->setIconSize(QSize(32, 32)); 
    172         widget->setViewMode(QListView::IconMode); 
     202            continue;         
    173203        widget->setWordWrap(true); 
    174204        widget->setFrameStyle(QFrame::NoFrame); 
     
    191221        connect(mItemGropus[i].mGroupNameWidget, SIGNAL(stateChanged(int)), this, SLOT(slotGropTextStateChanged(int))); 
    192222 
     223        mItemGropus[i].mItemGroup->setSkipRootRequiredItems(!isAbleToSU); 
     224 
    193225        mItemGropus[i].mItemGroup->readAssync(); 
    194226    } 
     227} 
     228 
     229/////////////////////////////////////////////////////////////////////////////// 
     230void MainWindow::loadSettings() 
     231{ 
     232    QSettings reader(CONFIG_FILE, QSettings::IniFormat); 
     233    qDebug()<<CONFIG_FILE; 
     234    QString str; 
     235    if (reader.status() != QSettings::NoError) 
     236    { 
     237        return; 
     238    } 
     239    reader.setIniCodec("UTF-8"); 
     240 
     241    reader.beginGroup(CONFIG_GENERAL_GROUP); 
     242 
     243    misSettingsSystemOnly = reader.value(CONFIG_HIDE_DE_ITEMS, QVariant(false)).toBool(); 
     244    str = reader.value(CONFIG_ICON_SIZE, QVariant(CONFIG_ICON_SIZE_NORMAL)).toString(); 
     245    setBigIcons(str == CONFIG_ICON_SIZE_LARGE); 
     246    str = reader.value(CONFIG_VIEW_TYPE, QVariant(CONFIG_VIEW_TYPE_GRID)).toString(); 
     247    setListMode(str == CONFIG_VIEW_TYPE_LIST); 
     248 
     249} 
     250 
     251/////////////////////////////////////////////////////////////////////////////// 
     252void MainWindow::saveSettings() 
     253{ 
     254    QSettings writer(CONFIG_FILE, QSettings::IniFormat); 
     255    QString str; 
     256    if (writer.status() != QSettings::NoError) 
     257    { 
     258        return; 
     259    } 
     260 
     261    writer.beginGroup(CONFIG_GENERAL_GROUP); 
     262 
     263    writer.setValue(CONFIG_HIDE_DE_ITEMS, QVariant(mEnabledDEs.size() == 0)); 
     264 
     265    str= (ui->actionLarge_icons->isChecked())?CONFIG_ICON_SIZE_LARGE:CONFIG_ICON_SIZE_NORMAL; 
     266    writer.setValue(CONFIG_ICON_SIZE, QVariant(str)); 
     267 
     268    str= (ui->actionList_view->isChecked())?CONFIG_VIEW_TYPE_LIST:CONFIG_VIEW_TYPE_GRID; 
     269    writer.setValue(CONFIG_VIEW_TYPE, QVariant(str)); 
     270 
     271    writer.endGroup(); 
     272} 
     273 
     274/////////////////////////////////////////////////////////////////////////////// 
     275bool MainWindow::checkUserGroup(QString groupName) 
     276{ 
     277       QString loginName = getlogin(); 
     278       QStringList gNames; 
     279       if ( loginName == "root" ) 
     280         return true; 
     281 
     282       QString tmp; 
     283       QFile iFile("/etc/group"); 
     284       if ( ! iFile.open(QIODevice::ReadOnly | QIODevice::Text)) 
     285         return true; //or FALSE? 
     286 
     287       while ( !iFile.atEnd() ) { 
     288         tmp = iFile.readLine().simplified(); 
     289         if ( tmp.indexOf(groupName) == 0 ) { 
     290        gNames = tmp.section(":", 3, 3).split(","); 
     291        break; 
     292         } 
     293       } 
     294       iFile.close(); 
     295 
     296       for ( int i = 0; i < gNames.size(); ++i ) 
     297          if ( gNames.at(i).indexOf(loginName) == 0 ) 
     298                return true; 
     299 
     300       return false; 
    195301} 
    196302 
     
    276382        lw_item->setData(Qt::UserRole, v); 
    277383 
    278  
    279         /*if (ui->actionFixed_item_width->isChecked()) 
    280         { 
    281  
    282             widget->setFixedSize(widget->iconSize()); 
    283         } 
    284         else 
    285         { 
    286  
    287         }*/ 
    288  
    289384        widget->addItem(lw_item); 
    290385    } 
     
    304399    QApplication::processEvents(); 
    305400    widget->fitSize(); 
     401} 
     402 
     403/////////////////////////////////////////////////////////////////////////////// 
     404void MainWindow::setBigIcons(bool isBig) 
     405{ 
     406    QSize icon_size; 
     407    if (!isBig) 
     408    { 
     409        ui->actionNormal_icons->setChecked(true); 
     410        ui->actionLarge_icons->setChecked(false); 
     411        icon_size = QSize(32,32); 
     412    } 
     413    else 
     414    { 
     415        ui->actionNormal_icons->setChecked(false); 
     416        ui->actionLarge_icons->setChecked(true); 
     417        icon_size = QSize(64,64); 
     418    } 
     419 
     420    for (int i=0; i<6; i++) 
     421    { 
     422        mItemGropus[i].mListWidget->setIconSize(icon_size); 
     423    } 
     424 
     425    on_actionFixed_item_width_triggered(); 
     426} 
     427 
     428/////////////////////////////////////////////////////////////////////////////// 
     429void MainWindow::setListMode(bool isListMode) 
     430{ 
     431    QListView::ViewMode view_mode; 
     432    if (!isListMode) 
     433    { 
     434        ui->actionGrid_view->setChecked(true); 
     435        ui->actionList_view->setChecked(false); 
     436        view_mode= QListView::IconMode; 
     437    } 
     438    else 
     439    { 
     440        ui->actionGrid_view->setChecked(false); 
     441        ui->actionList_view->setChecked(true); 
     442        view_mode= QListView::ListMode; 
     443    } 
     444    for (int i=0; i<6; i++) 
     445    { 
     446        mItemGropus[i].mListWidget->setViewMode(view_mode); 
     447        repaintGroupWidget(&mItemGropus[i]); 
     448    } 
     449 
     450    on_actionFixed_item_width_triggered(); 
     451 
     452} 
     453 
     454/////////////////////////////////////////////////////////////////////////////// 
     455void MainWindow::setFixedItemsLayout(bool isFixedLayout) 
     456{ 
     457    int w = 0; 
     458    int h = 0; 
     459 
     460    for (int i=0; i<6; i++) 
     461    { 
     462        if (w < mItemGropus[i].mListWidget->sizeHintForColumn(mItemGropus[i].mListWidget->modelColumn())) 
     463            w=  mItemGropus[i].mListWidget->sizeHintForColumn(mItemGropus[i].mListWidget->modelColumn()); 
     464        if (h < mItemGropus[i].mListWidget->sizeHintForRow(0)) 
     465            h = mItemGropus[i].mListWidget->sizeHintForRow(0); 
     466    } 
     467 
     468    for(int i=0; i<6; i++) 
     469    { 
     470        QSize grid_size; 
     471        if (isFixedLayout && (!ui->actionList_view->isChecked())) 
     472        { 
     473           grid_size = QSize(w, h); 
     474 
     475            qDebug()<<grid_size; 
     476        } 
     477        mItemGropus[i].mListWidget->setGridSize(grid_size); 
     478    } 
     479    ui->actionFixed_item_width->setChecked(isFixedLayout); 
    306480} 
    307481 
     
    375549/////////////////////////////////////////////////////////////////////////////// 
    376550void MainWindow::slotIconSizeActionTriggered() 
    377 { 
    378     QSize icon_size; 
     551{     
    379552    QAction* source= (QAction*)QObject::sender(); 
    380553    if (!source) 
     
    382555    if (source == ui->actionNormal_icons) 
    383556    { 
    384         ui->actionNormal_icons->setChecked(true); 
    385         ui->actionLarge_icons->setChecked(false); 
    386         icon_size = QSize(32,32); 
     557        setBigIcons(false); 
    387558    } 
    388559    else 
    389560    { 
    390         ui->actionNormal_icons->setChecked(false); 
    391         ui->actionLarge_icons->setChecked(true); 
    392         icon_size = QSize(64,64); 
    393     } 
    394  
    395     for (int i=0; i<6; i++) 
    396     { 
    397         mItemGropus[i].mListWidget->setIconSize(icon_size); 
    398     } 
    399  
    400     on_actionFixed_item_width_triggered(); 
     561        setBigIcons(true); 
     562    }     
    401563} 
    402564 
     
    404566void MainWindow::slotViewModeActionTriggered() 
    405567{ 
    406     QListView::ViewMode view_mode; 
     568 
    407569    QAction* source= (QAction*)QObject::sender(); 
    408570    if (!source) 
     
    410572    if (source == ui->actionGrid_view) 
    411573    { 
    412         ui->actionGrid_view->setChecked(true); 
    413         ui->actionList_view->setChecked(false); 
    414         view_mode= QListView::IconMode; 
     574        setListMode(false); 
    415575    } 
    416576    else 
    417577    { 
    418         ui->actionGrid_view->setChecked(false); 
    419         ui->actionList_view->setChecked(true); 
    420         view_mode= QListView::ListMode; 
    421     } 
    422     for (int i=0; i<6; i++) 
    423     { 
    424         mItemGropus[i].mListWidget->setViewMode(view_mode); 
    425         repaintGroupWidget(&mItemGropus[i]); 
    426     } 
    427  
    428     on_actionFixed_item_width_triggered(); 
     578        setListMode(true); 
     579    }     
    429580} 
    430581 
     
    513664void MainWindow::on_actionFixed_item_width_triggered() 
    514665{ 
    515     int w = 0; 
    516     int h = 0; 
    517  
    518     for (int i=0; i<6; i++) 
    519     { 
    520         if (w < mItemGropus[i].mListWidget->sizeHintForColumn(mItemGropus[i].mListWidget->modelColumn())) 
    521             w=  mItemGropus[i].mListWidget->sizeHintForColumn(mItemGropus[i].mListWidget->modelColumn()); 
    522         if (h < mItemGropus[i].mListWidget->sizeHintForRow(0)) 
    523             h = mItemGropus[i].mListWidget->sizeHintForRow(0); 
    524     } 
    525  
    526     for(int i=0; i<6; i++) 
    527     { 
    528         QSize grid_size; 
    529         if (ui->actionFixed_item_width->isChecked() && (!ui->actionList_view->isChecked())) 
    530         { 
    531            grid_size = QSize(w, h); 
    532  
    533             qDebug()<<grid_size; 
    534         } 
    535         mItemGropus[i].mListWidget->setGridSize(grid_size); 
    536     } 
    537  
    538 } 
     666    setFixedItemsLayout(ui->actionFixed_item_width->isChecked()); 
     667} 
  • src-qt4/pc-controlpanel/mainwindow.h

    rf7d1f5f r22470d5  
    3636    ~MainWindow(); 
    3737     
     38protected: 
     39    virtual void closeEvent(QCloseEvent *event); 
    3840private: 
    3941    Ui::MainWindow *ui; 
     
    4446    int mLastFilterLength; 
    4547 
     48    bool misSettingsSystemOnly; 
     49    bool misSettingsFixedLayout; 
     50 
    4651    void setupDEChooser(); 
    4752    void setupGroups(); 
     53    void loadSettings(); 
     54    void saveSettings(); 
     55    bool checkUserGroup(QString groupName); 
    4856 
    4957    void fillGroupWidget(SUIItemsGroup* itemsGroup); 
    50     void repaintGroupWidget(SUIItemsGroup* itemsGroup);     
     58    void repaintGroupWidget(SUIItemsGroup* itemsGroup); 
     59    void setBigIcons(bool isBig); 
     60    void setListMode(bool isListMode); 
     61    void setFixedItemsLayout(bool isFixedLayout); 
    5162 
    5263private slots: 
Note: See TracChangeset for help on using the changeset viewer.