Project

General

Profile

Chyba #931

Nové UI pro nastavení

Added by Ondřej Fibich about 5 years ago.

Status:
Nový
Priority:
Normální
Assignee:
-
Category:
Uživatelské rozhraní
Target version:
Start date:
08/19/2014
Due date:
% Done:

0%

Estimated time:
20.00 h

Description

Analýza

Systémové nastavení začíná poměrně bobtnat, což jej značně znepřehledňuje,
a je proto nutné udělat nové uživatelské rozhraní, které bude:

  • zvládat velké množství konfiguračních stránek,
  • usnadňovat navigaci (ikony, vyhledávání dle názvu konfigurace apod.),
  • podporovat rozšiřitelnost konfigurace různými moduly (#921).

Návrh

Myslím, že nemá vymýšlet nic nového, ale inspirovat se fungujícími systémy.
V GNOME je to IMHO velmi povedené.

Oproti současnému stavu by tedy přibyly kategorie konfiguračních stránek,
podobné aktuálním záložkám ale víc obecné (např. Systém, Uživatelé, Síť, ...),
vyhledávání a velké ikony.

Samotné současné formuláře by prozatím zůstali (do úplné modularizace),
jen by na ně vedly odkazy z úvodní ("ikonové") stránky konfigurace.

Implementace

Je nutné modulární řešení, a proto budou zavedeny třídy CofigurationPage
(konfigurační stránka), ConfigurationCategory a ConfigurationManager.

Základní návrh rozhraní a třídy

Spousta věcí může chybět - dělám to z hlavy...

class CofigurationPage {
   /**
    * Relative path to settings page.
    * @return string
    */
   public function getPath();
   /**
    * Translated title for menu in main configuration page.
    * @return string
    */
   public function getMenuTitle();
   /**
    * Icon for menu in main configuration page.
    * @return string
    */
   public function getMenuIcon();
   /**
    * List of configuration options that are contained in this
    * page. It is commonly used for searching of available
    * configuration options (see it at action in Chromium).
    * @return array array of options names (strings)
    *               in future it may maybe contain also anchor
    *               to specific position in configuration page
    *               where option may be found.
    */
   public function getContainedConfigurations();
}
class CofigurationCategory {
   /**
    * Name of category for main configuration page that is translatable.
    * @return string
    */
   public function getName();
   /**
    * Adds a page to category.
    * @param IConfigurationPage $page
    */
   public function addPage(ConfigurationPage $page);
   /**
    * Gets all pages in category.
    * @return array
    */
   public function getPages();
}
class ConfigurationManager {
   private $categories = array();
   public function putCategory($categoryName) {
       if (!array_key_exists($categoryName, $categories)) {
           $categories[$categoryName] = new ConfigurationCategory($categoryName);
       }
       return $categories[$categoryName];
   }
   public function getCategories() {return $this->categories; }
   /**
    * Finds the most relevant configuration page to given needle
    * string. Searching is made through configuration pages
    * of all categories.
    * Searching is made on names of pages and then if nothing 
    * founded also on contained configuration of each page.
    * @return array of ConfigurationPage
    */
   public function search($needle);
}

Interakce tříd

// global object
$cm = new ConfigurationManager();

// module QoS
$cm->putCategory('Network')->addPage(new ConfigurationPage(
      'qos', 'QoS', 'qos-icon.png', array('QoS ceil', 'QoS rate', 'QoS server')
));

// module monitoring
$cm->putCategory('Network')->addPage(new ConfigurationPage(
      'monitoring', 'Monitoring', 'monitoring.png', array('Monitoring server', 'Info mailbox')
));

// A long time after, in a galaxy far, far away.... 
render($cm);

Related issues

Related to Požadavek #921: ModularitaNový07/28/2014

Actions

History

#1

Updated by Ondřej Fibich about 5 years ago

Also available in: Atom PDF